HBASE-14456 Implement a namespace-based region grouping strategy for RegionGroupingProvider (Yu Li)
This commit is contained in:
parent
52188c5c4a
commit
2b84576e3d
|
@ -6099,7 +6099,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
|
|||
effectiveWAL = (new WALFactory(confForWAL,
|
||||
Collections.<WALActionsListener>singletonList(new MetricsWAL()),
|
||||
"hregion-" + RandomStringUtils.randomNumeric(8))).
|
||||
getWAL(info.getEncodedNameAsBytes());
|
||||
getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
}
|
||||
HRegion region = HRegion.newHRegion(tableDir,
|
||||
effectiveWAL, fs, conf, info, hTableDescriptor, null);
|
||||
|
|
|
@ -1835,9 +1835,10 @@ public class HRegionServer extends HasThread implements
|
|||
roller = ensureMetaWALRoller();
|
||||
wal = walFactory.getMetaWAL(regionInfo.getEncodedNameAsBytes());
|
||||
} else if (regionInfo == null) {
|
||||
wal = walFactory.getWAL(UNSPECIFIED_REGION);
|
||||
wal = walFactory.getWAL(UNSPECIFIED_REGION, null);
|
||||
} else {
|
||||
wal = walFactory.getWAL(regionInfo.getEncodedNameAsBytes());
|
||||
byte[] namespace = regionInfo.getTable().getNamespace();
|
||||
wal = walFactory.getWAL(regionInfo.getEncodedNameAsBytes(), namespace);
|
||||
}
|
||||
roller.addWAL(wal);
|
||||
return wal;
|
||||
|
|
|
@ -194,11 +194,13 @@ class HMerge {
|
|||
for (int i = 0; i < info.length - 1; i++) {
|
||||
if (currentRegion == null) {
|
||||
currentRegion = HRegion.openHRegion(conf, fs, this.rootDir, info[i], this.htd,
|
||||
walFactory.getWAL(info[i].getEncodedNameAsBytes()));
|
||||
walFactory.getWAL(info[i].getEncodedNameAsBytes(),
|
||||
info[i].getTable().getNamespace()));
|
||||
currentSize = currentRegion.getLargestHStoreSize();
|
||||
}
|
||||
nextRegion = HRegion.openHRegion(conf, fs, this.rootDir, info[i + 1], this.htd,
|
||||
walFactory.getWAL(info[i+1].getEncodedNameAsBytes()));
|
||||
walFactory.getWAL(info[i + 1].getEncodedNameAsBytes(),
|
||||
info[i + 1].getTable().getNamespace()));
|
||||
nextSize = nextRegion.getLargestHStoreSize();
|
||||
|
||||
if ((currentSize + nextSize) <= (maxFilesize / 2)) {
|
||||
|
|
|
@ -95,7 +95,9 @@ public class MetaUtils {
|
|||
this.walFactory = new WALFactory(walConf, null, logName);
|
||||
}
|
||||
final byte[] region = info.getEncodedNameAsBytes();
|
||||
return info.isMetaRegion() ? walFactory.getMetaWAL(region) : walFactory.getWAL(region);
|
||||
final byte[] namespace = info.getTable().getNamespace();
|
||||
return info.isMetaRegion() ? walFactory.getMetaWAL(region) : walFactory.getWAL(region,
|
||||
namespace);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -42,7 +42,7 @@ public class BoundedGroupingStrategy implements RegionGroupingStrategy{
|
|||
private String[] groupNames;
|
||||
|
||||
@Override
|
||||
public String group(byte[] identifier) {
|
||||
public String group(byte[] identifier, byte[] namespace) {
|
||||
String idStr = Bytes.toString(identifier);
|
||||
String groupName = groupNameCache.get(idStr);
|
||||
if (null == groupName) {
|
||||
|
|
|
@ -120,7 +120,7 @@ public class DefaultWALProvider implements WALProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WAL getWAL(final byte[] identifier) throws IOException {
|
||||
public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException {
|
||||
if (log == null) {
|
||||
// only lock when need to create wal, and need to lock since
|
||||
// creating hlog on fs is time consuming
|
||||
|
|
|
@ -66,7 +66,7 @@ class DisabledWALProvider implements WALProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WAL getWAL(final byte[] identifier) throws IOException {
|
||||
public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.hadoop.hbase.wal;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.hbase.NamespaceDescriptor;
|
||||
import org.apache.hadoop.hbase.classification.InterfaceAudience;
|
||||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.apache.hadoop.hbase.wal.RegionGroupingProvider.RegionGroupingStrategy;
|
||||
|
||||
/**
|
||||
* A WAL grouping strategy based on namespace.
|
||||
* Notice: the wal-group mapping might change if we support dynamic namespace updating later,
|
||||
* and special attention needed if we support feature like group-based replication.
|
||||
*/
|
||||
@InterfaceAudience.Private
|
||||
public class NamespaceGroupingStrategy implements RegionGroupingStrategy {
|
||||
private String providerId;
|
||||
|
||||
@Override
|
||||
public String group(byte[] identifier, byte[] namespace) {
|
||||
String namespaceString;
|
||||
if (namespace == null || namespace.length == 0) {
|
||||
namespaceString = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;
|
||||
} else {
|
||||
namespaceString = Bytes.toString(namespace);
|
||||
}
|
||||
return providerId + GROUP_NAME_DELIMITER + namespaceString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Configuration config, String providerId) {
|
||||
this.providerId = providerId;
|
||||
}
|
||||
|
||||
}
|
|
@ -65,12 +65,11 @@ class RegionGroupingProvider implements WALProvider {
|
|||
*/
|
||||
public static interface RegionGroupingStrategy {
|
||||
String GROUP_NAME_DELIMITER = ".";
|
||||
|
||||
/**
|
||||
* Given an identifier, pick a group.
|
||||
* the byte[] returned for a given group must always use the same instance, since we
|
||||
* will be using it as a hash key.
|
||||
* Given an identifier and a namespace, pick a group.
|
||||
*/
|
||||
String group(final byte[] identifier);
|
||||
String group(final byte[] identifier, byte[] namespace);
|
||||
void init(Configuration config, String providerId);
|
||||
}
|
||||
|
||||
|
@ -80,7 +79,8 @@ class RegionGroupingProvider implements WALProvider {
|
|||
static enum Strategies {
|
||||
defaultStrategy(BoundedGroupingStrategy.class),
|
||||
identity(IdentityGroupingStrategy.class),
|
||||
bounded(BoundedGroupingStrategy.class);
|
||||
bounded(BoundedGroupingStrategy.class),
|
||||
namespace(NamespaceGroupingStrategy.class);
|
||||
|
||||
final Class<? extends RegionGroupingStrategy> clazz;
|
||||
Strategies(Class<? extends RegionGroupingStrategy> clazz) {
|
||||
|
@ -200,12 +200,12 @@ class RegionGroupingProvider implements WALProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WAL getWAL(final byte[] identifier) throws IOException {
|
||||
public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException {
|
||||
final String group;
|
||||
if (META_WAL_PROVIDER_ID.equals(this.providerId)) {
|
||||
group = META_WAL_GROUP_NAME;
|
||||
} else {
|
||||
group = strategy.group(identifier);
|
||||
group = strategy.group(identifier, namespace);
|
||||
}
|
||||
return getWAL(group);
|
||||
}
|
||||
|
@ -254,7 +254,7 @@ class RegionGroupingProvider implements WALProvider {
|
|||
@Override
|
||||
public void init(Configuration config, String providerId) {}
|
||||
@Override
|
||||
public String group(final byte[] identifier) {
|
||||
public String group(final byte[] identifier, final byte[] namespace) {
|
||||
return Bytes.toString(identifier);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -225,9 +225,10 @@ public class WALFactory {
|
|||
|
||||
/**
|
||||
* @param identifier may not be null, contents will not be altered
|
||||
* @param namespace could be null, and will use default namespace if null
|
||||
*/
|
||||
public WAL getWAL(final byte[] identifier) throws IOException {
|
||||
return provider.getWAL(identifier);
|
||||
public WAL getWAL(final byte[] identifier, final byte[] namespace) throws IOException {
|
||||
return provider.getWAL(identifier, namespace);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -247,7 +248,7 @@ public class WALFactory {
|
|||
metaProvider = this.metaProvider.get();
|
||||
}
|
||||
}
|
||||
return metaProvider.getWAL(identifier);
|
||||
return metaProvider.getWAL(identifier, null);
|
||||
}
|
||||
|
||||
public Reader createReader(final FileSystem fs, final Path path) throws IOException {
|
||||
|
|
|
@ -54,9 +54,10 @@ public interface WALProvider {
|
|||
|
||||
/**
|
||||
* @param identifier may not be null. contents will not be altered.
|
||||
* @param namespace could be null, and will use default namespace if null
|
||||
* @return a WAL for writing entries for the given region.
|
||||
*/
|
||||
WAL getWAL(final byte[] identifier) throws IOException;
|
||||
WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException;
|
||||
|
||||
/**
|
||||
* persist outstanding WALs to storage and stop accepting new appends.
|
||||
|
|
|
@ -1807,7 +1807,7 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility {
|
|||
return (new WALFactory(confForWAL,
|
||||
Collections.<WALActionsListener>singletonList(new MetricsWAL()),
|
||||
"hregion-" + RandomStringUtils.randomNumeric(8))).
|
||||
getWAL(hri.getEncodedNameAsBytes());
|
||||
getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -162,7 +162,7 @@ public class TestWALObserver {
|
|||
*/
|
||||
@Test
|
||||
public void testWALObserverWriteToWAL() throws Exception {
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION);
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
verifyWritesSeen(log, getCoprocessor(log, SampleRegionWALObserver.class), false);
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ public class TestWALObserver {
|
|||
*/
|
||||
@Test
|
||||
public void testLegacyWALObserverWriteToWAL() throws Exception {
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION);
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
verifyWritesSeen(log, getCoprocessor(log, SampleRegionWALObserver.Legacy.class), true);
|
||||
}
|
||||
|
||||
|
@ -277,7 +277,7 @@ public class TestWALObserver {
|
|||
|
||||
final Configuration newConf = HBaseConfiguration.create(this.conf);
|
||||
|
||||
final WAL wal = wals.getWAL(UNSPECIFIED_REGION);
|
||||
final WAL wal = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
final SampleRegionWALObserver newApi = getCoprocessor(wal, SampleRegionWALObserver.class);
|
||||
newApi.setTestValues(TEST_TABLE, TEST_ROW, null, null, null, null, null, null);
|
||||
final SampleRegionWALObserver oldApi = getCoprocessor(wal,
|
||||
|
@ -349,7 +349,7 @@ public class TestWALObserver {
|
|||
final HTableDescriptor htd = createBasic3FamilyHTD(Bytes.toString(TEST_TABLE));
|
||||
final AtomicLong sequenceId = new AtomicLong(0);
|
||||
|
||||
WAL log = wals.getWAL(UNSPECIFIED_REGION);
|
||||
WAL log = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
try {
|
||||
SampleRegionWALObserver cp = getCoprocessor(log, SampleRegionWALObserver.class);
|
||||
|
||||
|
@ -394,7 +394,7 @@ public class TestWALObserver {
|
|||
final Configuration newConf = HBaseConfiguration.create(this.conf);
|
||||
|
||||
// WAL wal = new WAL(this.fs, this.dir, this.oldLogDir, this.conf);
|
||||
WAL wal = wals.getWAL(UNSPECIFIED_REGION);
|
||||
WAL wal = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
// Put p = creatPutWith2Families(TEST_ROW);
|
||||
WALEdit edit = new WALEdit();
|
||||
long now = EnvironmentEdgeManager.currentTime();
|
||||
|
@ -419,7 +419,7 @@ public class TestWALObserver {
|
|||
FileSystem newFS = FileSystem.get(newConf);
|
||||
// Make a new wal for new region open.
|
||||
final WALFactory wals2 = new WALFactory(conf, null, currentTest.getMethodName()+"2");
|
||||
WAL wal2 = wals2.getWAL(UNSPECIFIED_REGION);;
|
||||
WAL wal2 = wals2.getWAL(UNSPECIFIED_REGION, null);;
|
||||
HRegion region = HRegion.openHRegion(newConf, FileSystem.get(newConf), hbaseRootDir,
|
||||
hri, htd, wal2, TEST_UTIL.getHBaseCluster().getRegionServer(0), null);
|
||||
long seqid2 = region.getOpenSeqNum();
|
||||
|
@ -447,7 +447,7 @@ public class TestWALObserver {
|
|||
*/
|
||||
@Test
|
||||
public void testWALObserverLoaded() throws Exception {
|
||||
WAL log = wals.getWAL(UNSPECIFIED_REGION);
|
||||
WAL log = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
assertNotNull(getCoprocessor(log, SampleRegionWALObserver.class));
|
||||
}
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ public class TestWALRecordReader {
|
|||
@Test
|
||||
public void testPartialRead() throws Exception {
|
||||
final WALFactory walfactory = new WALFactory(conf, null, getName());
|
||||
WAL log = walfactory.getWAL(info.getEncodedNameAsBytes());
|
||||
WAL log = walfactory.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
// This test depends on timestamp being millisecond based and the filename of the WAL also
|
||||
// being millisecond based.
|
||||
long ts = System.currentTimeMillis();
|
||||
|
@ -181,7 +181,7 @@ public class TestWALRecordReader {
|
|||
@Test
|
||||
public void testWALRecordReader() throws Exception {
|
||||
final WALFactory walfactory = new WALFactory(conf, null, getName());
|
||||
WAL log = walfactory.getWAL(info.getEncodedNameAsBytes());
|
||||
WAL log = walfactory.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
byte [] value = Bytes.toBytes("value");
|
||||
final AtomicLong sequenceId = new AtomicLong(0);
|
||||
WALEdit edit = new WALEdit();
|
||||
|
|
|
@ -174,7 +174,7 @@ public class TestCacheOnWriteInSchema {
|
|||
walFactory = new WALFactory(conf, null, id);
|
||||
|
||||
region = TEST_UTIL.createLocalHRegion(info, htd,
|
||||
walFactory.getWAL(info.getEncodedNameAsBytes()));
|
||||
walFactory.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace()));
|
||||
store = new HStore(region, hcd, conf);
|
||||
}
|
||||
|
||||
|
|
|
@ -97,8 +97,8 @@ public class TestDefaultCompactSelection extends TestCase {
|
|||
region = HRegion.createHRegion(info, basedir, conf, htd);
|
||||
HRegion.closeHRegion(region);
|
||||
Path tableDir = FSUtils.getTableDir(basedir, htd.getTableName());
|
||||
region = new HRegion(tableDir, wals.getWAL(info.getEncodedNameAsBytes()), fs, conf, info, htd,
|
||||
null);
|
||||
region = new HRegion(tableDir, wals.getWAL(info.getEncodedNameAsBytes(), info.getTable()
|
||||
.getNamespace()), fs, conf, info, htd, null);
|
||||
|
||||
store = new HStore(region, hcd, conf);
|
||||
|
||||
|
|
|
@ -958,7 +958,7 @@ public class TestDefaultMemStore extends TestCase {
|
|||
desc.addFamily(new HColumnDescriptor("foo".getBytes()));
|
||||
HRegion r =
|
||||
HRegion.createHRegion(hri, testDir, conf, desc,
|
||||
wFactory.getWAL(hri.getEncodedNameAsBytes()));
|
||||
wFactory.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace()));
|
||||
HRegion.addRegionToMETA(meta, r);
|
||||
edge.setCurrentTimeMillis(1234 + 100);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
|
|
@ -923,7 +923,7 @@ public class TestHRegion {
|
|||
final Configuration walConf = new Configuration(TEST_UTIL.getConfiguration());
|
||||
FSUtils.setRootDir(walConf, logDir);
|
||||
final WALFactory wals = new WALFactory(walConf, null, method);
|
||||
final WAL wal = wals.getWAL(tableName.getName());
|
||||
final WAL wal = wals.getWAL(tableName.getName(), tableName.getNamespace());
|
||||
|
||||
this.region = initHRegion(tableName.getName(), HConstants.EMPTY_START_ROW,
|
||||
HConstants.EMPTY_END_ROW, method, CONF, false, Durability.USE_DEFAULT, wal, family);
|
||||
|
@ -4753,7 +4753,7 @@ public class TestHRegion {
|
|||
final Configuration walConf = new Configuration(conf);
|
||||
FSUtils.setRootDir(walConf, logDir);
|
||||
final WALFactory wals = new WALFactory(walConf, null, UUID.randomUUID().toString());
|
||||
final WAL wal = spy(wals.getWAL(tableName.getName()));
|
||||
final WAL wal = spy(wals.getWAL(tableName.getName(), tableName.getNamespace()));
|
||||
this.region = initHRegion(tableName.getName(), HConstants.EMPTY_START_ROW,
|
||||
HConstants.EMPTY_END_ROW, method, conf, false, tableDurability, wal,
|
||||
new byte[][] { family });
|
||||
|
|
|
@ -158,8 +158,10 @@ public class TestHRegionReplayEvents {
|
|||
false, time, 1);
|
||||
|
||||
wals = TestHRegion.createWALFactory(CONF, rootDir);
|
||||
walPrimary = wals.getWAL(primaryHri.getEncodedNameAsBytes());
|
||||
walSecondary = wals.getWAL(secondaryHri.getEncodedNameAsBytes());
|
||||
walPrimary = wals.getWAL(primaryHri.getEncodedNameAsBytes(),
|
||||
primaryHri.getTable().getNamespace());
|
||||
walSecondary = wals.getWAL(secondaryHri.getEncodedNameAsBytes(),
|
||||
secondaryHri.getTable().getNamespace());
|
||||
|
||||
rss = mock(RegionServerServices.class);
|
||||
when(rss.getServerName()).thenReturn(ServerName.valueOf("foo", 1, 1));
|
||||
|
|
|
@ -414,8 +414,9 @@ public class TestRegionMergeTransaction {
|
|||
HRegion a = HRegion.createHRegion(hri, testdir,
|
||||
TEST_UTIL.getConfiguration(), htd);
|
||||
HRegion.closeHRegion(a);
|
||||
return HRegion.openHRegion(testdir, hri, htd, wals.getWAL(hri.getEncodedNameAsBytes()),
|
||||
TEST_UTIL.getConfiguration());
|
||||
return HRegion.openHRegion(testdir, hri, htd,
|
||||
wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace()),
|
||||
TEST_UTIL.getConfiguration());
|
||||
}
|
||||
|
||||
private int countRows(final HRegion r) throws IOException {
|
||||
|
|
|
@ -378,7 +378,8 @@ public class TestSplitTransaction {
|
|||
HRegionInfo hri = new HRegionInfo(htd.getTableName(), STARTROW, ENDROW);
|
||||
HRegion r = HRegion.createHRegion(hri, testdir, TEST_UTIL.getConfiguration(), htd);
|
||||
HRegion.closeHRegion(r);
|
||||
return HRegion.openHRegion(testdir, hri, htd, wals.getWAL(hri.getEncodedNameAsBytes()),
|
||||
return HRegion.openHRegion(testdir, hri, htd,
|
||||
wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace()),
|
||||
TEST_UTIL.getConfiguration());
|
||||
}
|
||||
|
||||
|
|
|
@ -183,8 +183,8 @@ public class TestStore {
|
|||
final Configuration walConf = new Configuration(conf);
|
||||
FSUtils.setRootDir(walConf, basedir);
|
||||
final WALFactory wals = new WALFactory(walConf, null, methodName);
|
||||
HRegion region = new HRegion(tableDir, wals.getWAL(info.getEncodedNameAsBytes()), fs, conf,
|
||||
info, htd, null);
|
||||
HRegion region = new HRegion(tableDir, wals.getWAL(info.getEncodedNameAsBytes(),
|
||||
info.getTable().getNamespace()), fs, conf, info, htd, null);
|
||||
|
||||
store = new HStore(region, hcd, conf);
|
||||
return store;
|
||||
|
|
|
@ -105,7 +105,9 @@ public class TestStoreFileRefresherChore {
|
|||
final Configuration walConf = new Configuration(conf);
|
||||
FSUtils.setRootDir(walConf, tableDir);
|
||||
final WALFactory wals = new WALFactory(walConf, null, "log_" + replicaId);
|
||||
HRegion region = new HRegion(fs, wals.getWAL(info.getEncodedNameAsBytes()), conf, htd, null);
|
||||
HRegion region =
|
||||
new HRegion(fs, wals.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace()),
|
||||
conf, htd, null);
|
||||
|
||||
region.initialize();
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ public class TestDurability {
|
|||
public void testDurability() throws Exception {
|
||||
final WALFactory wals = new WALFactory(CONF, null, "TestDurability");
|
||||
byte[] tableName = Bytes.toBytes("TestDurability");
|
||||
final WAL wal = wals.getWAL(tableName);
|
||||
final WAL wal = wals.getWAL(tableName, null);
|
||||
HRegion region = createHRegion(tableName, "region", wal, Durability.USE_DEFAULT);
|
||||
HRegion deferredRegion = createHRegion(tableName, "deferredRegion", wal, Durability.ASYNC_WAL);
|
||||
|
||||
|
@ -147,7 +147,7 @@ public class TestDurability {
|
|||
// Setting up region
|
||||
final WALFactory wals = new WALFactory(CONF, null, "TestIncrement");
|
||||
byte[] tableName = Bytes.toBytes("TestIncrement");
|
||||
final WAL wal = wals.getWAL(tableName);
|
||||
final WAL wal = wals.getWAL(tableName, null);
|
||||
HRegion region = createHRegion(tableName, "increment", wal, Durability.USE_DEFAULT);
|
||||
|
||||
// col1: amount = 1, 1 write back to WAL
|
||||
|
@ -205,7 +205,7 @@ public class TestDurability {
|
|||
// Setting up region
|
||||
final WALFactory wals = new WALFactory(CONF, null, "testIncrementWithReturnResultsSetToFalse");
|
||||
byte[] tableName = Bytes.toBytes("testIncrementWithReturnResultsSetToFalse");
|
||||
final WAL wal = wals.getWAL(tableName);
|
||||
final WAL wal = wals.getWAL(tableName, null);
|
||||
HRegion region = createHRegion(tableName, "increment", wal, Durability.USE_DEFAULT);
|
||||
|
||||
Increment inc1 = new Increment(row1);
|
||||
|
|
|
@ -192,7 +192,8 @@ public class TestLogRollAbort {
|
|||
TableName.valueOf(this.getClass().getName());
|
||||
HRegionInfo regioninfo = new HRegionInfo(tableName,
|
||||
HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW);
|
||||
final WAL log = wals.getWAL(regioninfo.getEncodedNameAsBytes());
|
||||
final WAL log = wals.getWAL(regioninfo.getEncodedNameAsBytes(),
|
||||
regioninfo.getTable().getNamespace());
|
||||
|
||||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ public class TestLogRolling {
|
|||
final Configuration conf = TEST_UTIL.getConfiguration();
|
||||
final WALFactory wals = new WALFactory(conf, null,
|
||||
ServerName.valueOf("test.com",8080, 1).toString());
|
||||
final WAL newLog = wals.getWAL(new byte[]{});
|
||||
final WAL newLog = wals.getWAL(new byte[]{}, null);
|
||||
try {
|
||||
// Now roll the log before we write anything.
|
||||
newLog.rollWriter(true);
|
||||
|
|
|
@ -65,7 +65,7 @@ public class TestLogRollingNoCluster {
|
|||
final Configuration conf = new Configuration(TEST_UTIL.getConfiguration());
|
||||
FSUtils.setRootDir(conf, dir);
|
||||
final WALFactory wals = new WALFactory(conf, null, TestLogRollingNoCluster.class.getName());
|
||||
final WAL wal = wals.getWAL(new byte[]{});
|
||||
final WAL wal = wals.getWAL(new byte[]{}, null);
|
||||
|
||||
Appender [] appenders = null;
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ public class TestWALActionsListener {
|
|||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
HRegionInfo hri = new HRegionInfo(TableName.valueOf(SOME_BYTES),
|
||||
SOME_BYTES, SOME_BYTES, false);
|
||||
final WAL wal = wals.getWAL(hri.getEncodedNameAsBytes());
|
||||
final WAL wal = wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());
|
||||
|
||||
for (int i = 0; i < 20; i++) {
|
||||
byte[] b = Bytes.toBytes(i+"");
|
||||
|
|
|
@ -200,7 +200,7 @@ public class TestReplicationSourceManager {
|
|||
listeners.add(replication);
|
||||
final WALFactory wals = new WALFactory(utility.getConfiguration(), listeners,
|
||||
URLEncoder.encode("regionserver:60020", "UTF8"));
|
||||
final WAL wal = wals.getWAL(hri.getEncodedNameAsBytes());
|
||||
final WAL wal = wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());
|
||||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
manager.init();
|
||||
HTableDescriptor htd = new HTableDescriptor();
|
||||
|
|
|
@ -131,7 +131,7 @@ public class TestReplicationWALReaderManager {
|
|||
pathWatcher = new PathWatcher();
|
||||
listeners.add(pathWatcher);
|
||||
final WALFactory wals = new WALFactory(conf, listeners, tn.getMethodName());
|
||||
log = wals.getWAL(info.getEncodedNameAsBytes());
|
||||
log = wals.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
|
@ -269,7 +269,7 @@ public class TestMergeTool extends HBaseTestCase {
|
|||
// Close the region and delete the log
|
||||
HRegion.closeHRegion(regions[i]);
|
||||
}
|
||||
WAL log = wals.getWAL(new byte[]{});
|
||||
WAL log = wals.getWAL(new byte[]{}, null);
|
||||
// Merge Region 0 and Region 1
|
||||
HRegion merged = mergeAndVerify("merging regions 0 and 1 ",
|
||||
this.sourceRegions[0].getRegionNameAsString(),
|
||||
|
|
|
@ -108,7 +108,7 @@ public class IOTestProvider implements WALProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WAL getWAL(final byte[] identifier) throws IOException {
|
||||
public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException {
|
||||
return log;
|
||||
}
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ public class TestBoundedRegionGroupingStrategy {
|
|||
int count = 0;
|
||||
// we know that this should see one of the wals more than once
|
||||
for (int i = 0; i < temp*8; i++) {
|
||||
final WAL maybeNewWAL = wals.getWAL(Bytes.toBytes(random.nextInt()));
|
||||
final WAL maybeNewWAL = wals.getWAL(Bytes.toBytes(random.nextInt()), null);
|
||||
LOG.info("Iteration " + i + ", checking wal " + maybeNewWAL);
|
||||
if (seen.add(maybeNewWAL)) {
|
||||
count++;
|
||||
|
|
|
@ -197,7 +197,7 @@ public class TestDefaultWALProvider {
|
|||
HRegionInfo hri2 = new HRegionInfo(htd2.getTableName(),
|
||||
HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW);
|
||||
// we want to mix edits from regions, so pick our own identifier.
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION);
|
||||
final WAL log = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
|
||||
// Add a single edit and make sure that rolling won't remove the file
|
||||
// Before HBASE-3198 it used to delete it
|
||||
|
@ -264,7 +264,7 @@ public class TestDefaultWALProvider {
|
|||
localConf.set(WALFactory.WAL_PROVIDER, DefaultWALProvider.class.getName());
|
||||
final WALFactory wals = new WALFactory(localConf, null, currentTest.getMethodName());
|
||||
try {
|
||||
final WAL wal = wals.getWAL(UNSPECIFIED_REGION);
|
||||
final WAL wal = wals.getWAL(UNSPECIFIED_REGION, null);
|
||||
assertEquals(0, DefaultWALProvider.getNumRolledLogFiles(wal));
|
||||
HRegionInfo hri1 =
|
||||
new HRegionInfo(table1.getTableName(), HConstants.EMPTY_START_ROW,
|
||||
|
@ -350,10 +350,11 @@ public class TestDefaultWALProvider {
|
|||
final Set<WAL> seen = new HashSet<WAL>(1);
|
||||
final Random random = new Random();
|
||||
assertTrue("first attempt to add WAL from default provider should work.",
|
||||
seen.add(wals.getWAL(Bytes.toBytes(random.nextInt()))));
|
||||
seen.add(wals.getWAL(Bytes.toBytes(random.nextInt()), null)));
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
assertFalse("default wal provider is only supposed to return a single wal, which should " +
|
||||
"compare as .equals itself.", seen.add(wals.getWAL(Bytes.toBytes(random.nextInt()))));
|
||||
assertFalse("default wal provider is only supposed to return a single wal, which should "
|
||||
+ "compare as .equals itself.",
|
||||
seen.add(wals.getWAL(Bytes.toBytes(random.nextInt()), null)));
|
||||
}
|
||||
} finally {
|
||||
wals.close();
|
||||
|
|
|
@ -93,7 +93,8 @@ public class TestSecureWAL {
|
|||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
|
||||
// Write the WAL
|
||||
final WAL wal = wals.getWAL(regioninfo.getEncodedNameAsBytes());
|
||||
final WAL wal =
|
||||
wals.getWAL(regioninfo.getEncodedNameAsBytes(), regioninfo.getTable().getNamespace());
|
||||
|
||||
for (int i = 0; i < total; i++) {
|
||||
WALEdit kvs = new WALEdit();
|
||||
|
|
|
@ -185,7 +185,8 @@ public class TestWALFactory {
|
|||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
for (int ii = 0; ii < howmany; ii++) {
|
||||
for (int i = 0; i < howmany; i++) {
|
||||
final WAL log = wals.getWAL(infos[i].getEncodedNameAsBytes());
|
||||
final WAL log =
|
||||
wals.getWAL(infos[i].getEncodedNameAsBytes(), infos[i].getTable().getNamespace());
|
||||
for (int j = 0; j < howmany; j++) {
|
||||
WALEdit edit = new WALEdit();
|
||||
byte [] family = Bytes.toBytes("column");
|
||||
|
@ -246,7 +247,7 @@ public class TestWALFactory {
|
|||
null,null, false);
|
||||
HTableDescriptor htd = new HTableDescriptor();
|
||||
htd.addFamily(new HColumnDescriptor(tableName.getName()));
|
||||
final WAL wal = wals.getWAL(info.getEncodedNameAsBytes());
|
||||
final WAL wal = wals.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
|
||||
for (int i = 0; i < total; i++) {
|
||||
WALEdit kvs = new WALEdit();
|
||||
|
@ -361,7 +362,8 @@ public class TestWALFactory {
|
|||
HRegionInfo regioninfo = new HRegionInfo(tableName,
|
||||
HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW, false);
|
||||
|
||||
final WAL wal = wals.getWAL(regioninfo.getEncodedNameAsBytes());
|
||||
final WAL wal =
|
||||
wals.getWAL(regioninfo.getEncodedNameAsBytes(), regioninfo.getTable().getNamespace());
|
||||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
final int total = 20;
|
||||
|
||||
|
@ -498,7 +500,7 @@ public class TestWALFactory {
|
|||
}
|
||||
HRegionInfo info = new HRegionInfo(htd.getTableName(),
|
||||
row,Bytes.toBytes(Bytes.toString(row) + "1"), false);
|
||||
final WAL log = wals.getWAL(info.getEncodedNameAsBytes());
|
||||
final WAL log = wals.getWAL(info.getEncodedNameAsBytes(), info.getTable().getNamespace());
|
||||
|
||||
final long txid = log.append(htd, info,
|
||||
new WALKey(info.getEncodedNameAsBytes(), htd.getTableName(), System.currentTimeMillis()),
|
||||
|
@ -555,7 +557,7 @@ public class TestWALFactory {
|
|||
}
|
||||
HRegionInfo hri = new HRegionInfo(htd.getTableName(),
|
||||
HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW);
|
||||
final WAL log = wals.getWAL(hri.getEncodedNameAsBytes());
|
||||
final WAL log = wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());
|
||||
final long txid = log.append(htd, hri,
|
||||
new WALKey(hri.getEncodedNameAsBytes(), htd.getTableName(), System.currentTimeMillis()),
|
||||
cols, sequenceId, true, null);
|
||||
|
@ -603,7 +605,7 @@ public class TestWALFactory {
|
|||
|
||||
HRegionInfo hri = new HRegionInfo(tableName,
|
||||
HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW);
|
||||
final WAL log = wals.getWAL(hri.getEncodedNameAsBytes());
|
||||
final WAL log = wals.getWAL(hri.getEncodedNameAsBytes(), hri.getTable().getNamespace());
|
||||
log.registerWALActionsListener(visitor);
|
||||
for (int i = 0; i < COL_COUNT; i++) {
|
||||
WALEdit cols = new WALEdit();
|
||||
|
@ -632,7 +634,7 @@ public class TestWALFactory {
|
|||
@Test
|
||||
public void testWALCoprocessorLoaded() throws Exception {
|
||||
// test to see whether the coprocessor is loaded or not.
|
||||
WALCoprocessorHost host = wals.getWAL(UNSPECIFIED_REGION).getCoprocessorHost();
|
||||
WALCoprocessorHost host = wals.getWAL(UNSPECIFIED_REGION, null).getCoprocessorHost();
|
||||
Coprocessor c = host.findCoprocessor(SampleRegionWALObserver.class.getName());
|
||||
assertNotNull(c);
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ public class TestWALMethods {
|
|||
|
||||
final Configuration walConf = new Configuration(util.getConfiguration());
|
||||
FSUtils.setRootDir(walConf, regiondir);
|
||||
(new WALFactory(walConf, null, "dummyLogName")).getWAL(new byte[]{});
|
||||
(new WALFactory(walConf, null, "dummyLogName")).getWAL(new byte[] {}, null);
|
||||
|
||||
NavigableSet<Path> files = WALSplitter.getSplitEditFilesSorted(fs, regiondir);
|
||||
assertEquals(7, files.size());
|
||||
|
|
|
@ -108,7 +108,8 @@ public class TestWALReaderOnSecureWAL {
|
|||
final AtomicLong sequenceId = new AtomicLong(1);
|
||||
|
||||
// Write the WAL
|
||||
WAL wal = wals.getWAL(regioninfo.getEncodedNameAsBytes());
|
||||
WAL wal =
|
||||
wals.getWAL(regioninfo.getEncodedNameAsBytes(), regioninfo.getTable().getNamespace());
|
||||
for (int i = 0; i < total; i++) {
|
||||
WALEdit kvs = new WALEdit();
|
||||
kvs.add(new KeyValue(row, family, Bytes.toBytes(i), value));
|
||||
|
|
|
@ -1073,7 +1073,7 @@ public class TestWALSplit {
|
|||
REGIONS.add(regionName);
|
||||
generateWALs(-1);
|
||||
|
||||
wals.getWAL(Bytes.toBytes(regionName));
|
||||
wals.getWAL(Bytes.toBytes(regionName), null);
|
||||
FileStatus[] logfiles = fs.listStatus(WALDIR);
|
||||
assertTrue("There should be some log file",
|
||||
logfiles != null && logfiles.length > 0);
|
||||
|
|
|
@ -485,7 +485,8 @@ public final class WALPerformanceEvaluation extends Configured implements Tool {
|
|||
// Initialize HRegion
|
||||
HRegionInfo regionInfo = new HRegionInfo(htd.getTableName());
|
||||
// Initialize WAL
|
||||
final WAL wal = wals.getWAL(regionInfo.getEncodedNameAsBytes());
|
||||
final WAL wal =
|
||||
wals.getWAL(regionInfo.getEncodedNameAsBytes(), regionInfo.getTable().getNamespace());
|
||||
// If we haven't already, attach a listener to this wal to handle rolls and metrics.
|
||||
if (walsListenedTo.add(wal)) {
|
||||
roller.addWAL(wal);
|
||||
|
|
Loading…
Reference in New Issue