From ce81d38ff255dc36589681558ecf8b823c4bf633 Mon Sep 17 00:00:00 2001 From: Wellington Chevreuil Date: Sun, 10 Feb 2019 10:24:18 +0000 Subject: [PATCH] HBASE-21860 - WALFactory should switch to default provider if multiwal provider is defined for meta wal (Per suggestions on HBASE-21843) Change-Id: I7c7521343b9273cd9a7ffe303a4e3123fc4e610e --- .../java/org/apache/hadoop/hbase/wal/WALFactory.java | 9 ++++++++- .../org/apache/hadoop/hbase/wal/TestWALFactory.java | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java index f5723a7785..c69aea1873 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java @@ -129,8 +129,15 @@ public class WALFactory { } Class getProviderClass(String key, String defaultValue) { + Providers provider = Providers.valueOf(conf.get(key, defaultValue)); try { - return Providers.valueOf(conf.get(key, defaultValue)).clazz; + //MultiWAL shouldn't be used for meta wals. See discusssions on HBASE-21843. + if (key.equals(META_WAL_PROVIDER) && provider.clazz == RegionGroupingProvider.class){ + provider = Providers.defaultProvider; + LOG.warn("Meta WAL shouldn't use MultiWAL Provider. Replaced Meta WAL provider to: " + + provider.clazz.getName()); + } + return provider.clazz; } catch (IllegalArgumentException exception) { // Fall back to them specifying a class name // Note that the passed default class shouldn't actually be used, since the above only fails diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALFactory.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALFactory.java index 75b8317887..9de0d73500 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALFactory.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/TestWALFactory.java @@ -710,6 +710,18 @@ public class TestWALFactory { } } + @Test + public void testSetMetaToMultiWALProviderGetsReplacedToDefault() throws IOException { + final Configuration config = new Configuration(); + config.set(WALFactory.META_WAL_PROVIDER, WALFactory.Providers.multiwal.name()); + Class walProvider = this.wals.getProviderClass( + WALFactory.WAL_PROVIDER, WALFactory.Providers.filesystem.name()); + assertEquals(WALFactory.Providers.filesystem.clazz, walProvider); + assertTrue(this.wals.getMetaWAL(null)!=null); + WALProvider metaWALProvider = this.wals.getMetaWALProvider(); + assertEquals(WALFactory.Providers.defaultProvider.clazz, metaWALProvider.getClass()); + } + static class DumbWALActionsListener extends WALActionsListener.Base { int increments = 0; -- 2.17.2 (Apple Git-113)