Skip to content

Commit 6e1f5b7

Browse files
committed
HBASE-26586 Should not rely on the global config when setting SFT implementation for a table while upgrading (#4006)
Signed-off-by: GeorryHuang <huangzhuoyue@apache.org> Signed-off-by: Josh Elser <elserj@apache.org> Signed-off-by: Wellington Ramos Chevreuil <wchevreuil@apache.org>
1 parent 39c42c7 commit 6e1f5b7

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/master/migrate/RollingUpgradeChore.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.apache.hadoop.hbase.master.MasterServices;
3535
import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
3636
import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
37-
import org.apache.hadoop.hbase.regionserver.storefiletracker.MigrateStoreFileTrackerProcedure;
37+
import org.apache.hadoop.hbase.regionserver.storefiletracker.InitializeStoreFileTrackerProcedure;
3838
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory;
3939
import org.apache.yetus.audience.InterfaceAudience;
4040
import org.slf4j.Logger;
@@ -60,7 +60,7 @@ public class RollingUpgradeChore extends ScheduledChore {
6060
private final static Logger LOG = LoggerFactory.getLogger(RollingUpgradeChore.class);
6161
ProcedureExecutor<MasterProcedureEnv> procedureExecutor;
6262
private TableDescriptors tableDescriptors;
63-
private List<MigrateStoreFileTrackerProcedure> processingProcs = new ArrayList<>();
63+
private List<InitializeStoreFileTrackerProcedure> processingProcs = new ArrayList<>();
6464

6565
public RollingUpgradeChore(MasterServices masterServices) {
6666
this(masterServices.getConfiguration(), masterServices.getMasterProcedureExecutor(),
@@ -89,9 +89,9 @@ protected void chore() {
8989
}
9090

9191
private boolean isCompletelyMigrateSFT(int concurrentCount){
92-
Iterator<MigrateStoreFileTrackerProcedure> iter = processingProcs.iterator();
92+
Iterator<InitializeStoreFileTrackerProcedure> iter = processingProcs.iterator();
9393
while(iter.hasNext()){
94-
MigrateStoreFileTrackerProcedure proc = iter.next();
94+
InitializeStoreFileTrackerProcedure proc = iter.next();
9595
if(procedureExecutor.isFinished(proc.getProcId())){
9696
iter.remove();
9797
}
@@ -120,8 +120,8 @@ private boolean isCompletelyMigrateSFT(int concurrentCount){
120120

121121
for (Map.Entry<String, TableDescriptor> entry : migrateSFTTables.entrySet()) {
122122
TableDescriptor tableDescriptor = entry.getValue();
123-
MigrateStoreFileTrackerProcedure proc =
124-
new MigrateStoreFileTrackerProcedure(procedureExecutor.getEnvironment(), tableDescriptor);
123+
InitializeStoreFileTrackerProcedure proc = new InitializeStoreFileTrackerProcedure(
124+
procedureExecutor.getEnvironment(), tableDescriptor);
125125
procedureExecutor.submitProcedure(proc);
126126
processingProcs.add(proc);
127127
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,28 +19,32 @@
1919

2020
import java.util.Optional;
2121
import org.apache.hadoop.hbase.client.TableDescriptor;
22+
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
2223
import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
2324
import org.apache.hadoop.hbase.master.procedure.ModifyTableDescriptorProcedure;
2425
import org.apache.hadoop.hbase.procedure2.util.StringUtils;
2526
import org.apache.yetus.audience.InterfaceAudience;
2627

2728
/**
28-
* Procedure for migrating StoreFileTracker information to table descriptor.
29+
* Procedure for setting StoreFileTracker information to table descriptor.
2930
*/
3031
@InterfaceAudience.Private
31-
public class MigrateStoreFileTrackerProcedure extends ModifyTableDescriptorProcedure {
32+
public class InitializeStoreFileTrackerProcedure extends ModifyTableDescriptorProcedure {
3233

33-
public MigrateStoreFileTrackerProcedure(){}
34+
public InitializeStoreFileTrackerProcedure(){}
3435

35-
public MigrateStoreFileTrackerProcedure(MasterProcedureEnv env, TableDescriptor unmodified) {
36+
public InitializeStoreFileTrackerProcedure(MasterProcedureEnv env, TableDescriptor unmodified) {
3637
super(env, unmodified);
3738
}
3839

3940
@Override
4041
protected Optional<TableDescriptor> modify(MasterProcedureEnv env, TableDescriptor current) {
4142
if (StringUtils.isEmpty(current.getValue(StoreFileTrackerFactory.TRACKER_IMPL))) {
43+
// no tracker impl means it is a table created in previous version, the tracker impl can only
44+
// be default.
4245
TableDescriptor td =
43-
StoreFileTrackerFactory.updateWithTrackerConfigs(env.getMasterConfiguration(), current);
46+
TableDescriptorBuilder.newBuilder(current).setValue(StoreFileTrackerFactory.TRACKER_IMPL,
47+
StoreFileTrackerFactory.Trackers.DEFAULT.name()).build();
4448
return Optional.of(td);
4549
}
4650
return Optional.empty();

hbase-server/src/test/java/org/apache/hadoop/hbase/master/migrate/TestMigrateStoreFileTracker.java renamed to hbase-server/src/test/java/org/apache/hadoop/hbase/master/migrate/TestInitializeStoreFileTracker.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.hadoop.hbase.master.migrate;
2020

21+
import static org.junit.Assert.assertEquals;
22+
2123
import java.io.IOException;
2224
import org.apache.commons.lang3.StringUtils;
2325
import org.apache.hadoop.conf.Configuration;
@@ -31,6 +33,7 @@
3133
import org.apache.hadoop.hbase.client.TableDescriptor;
3234
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
3335
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory;
36+
import org.apache.hadoop.hbase.testclassification.MasterTests;
3437
import org.apache.hadoop.hbase.testclassification.MediumTests;
3538
import org.apache.hadoop.hbase.util.Bytes;
3639
import org.junit.After;
@@ -40,11 +43,11 @@
4043
import org.junit.Test;
4144
import org.junit.experimental.categories.Category;
4245

43-
@Category(MediumTests.class)
44-
public class TestMigrateStoreFileTracker {
46+
@Category({ MediumTests.class, MasterTests.class })
47+
public class TestInitializeStoreFileTracker {
4548
@ClassRule
4649
public static final HBaseClassTestRule CLASS_RULE =
47-
HBaseClassTestRule.forClass(TestMigrateStoreFileTracker.class);
50+
HBaseClassTestRule.forClass(TestInitializeStoreFileTracker.class);
4851
private final static String[] tables = new String[] { "t1", "t2", "t3", "t4", "t5", "t6" };
4952
private final static String famStr = "f1";
5053
private final static byte[] fam = Bytes.toBytes(famStr);
@@ -56,9 +59,12 @@ public class TestMigrateStoreFileTracker {
5659
@Before
5760
public void setUp() throws Exception {
5861
conf = HBaseConfiguration.create();
59-
//Speed up the launch of RollingUpgradeChore
62+
// Speed up the launch of RollingUpgradeChore
6063
conf.setInt(RollingUpgradeChore.ROLLING_UPGRADE_CHORE_PERIOD_SECONDS_KEY, 1);
6164
conf.setLong(RollingUpgradeChore.ROLLING_UPGRADE_CHORE_DELAY_SECONDS_KEY, 1);
65+
// Set the default implementation to file instead of default, to confirm we will not set SFT to
66+
// file
67+
conf.set(StoreFileTrackerFactory.TRACKER_IMPL, StoreFileTrackerFactory.Trackers.FILE.name());
6268
HTU = new HBaseTestingUtility(conf);
6369
HTU.startMiniCluster();
6470
}
@@ -89,7 +95,7 @@ public void testMigrateStoreFileTracker() throws IOException, InterruptedExcepti
8995
HTU.getMiniHBaseCluster().stopMaster(0).join();
9096
HTU.getMiniHBaseCluster().startMaster();
9197
HTU.getMiniHBaseCluster().waitForActiveAndReadyMaster(30000);
92-
//wait until all tables have been migrated
98+
// wait until all tables have been migrated
9399
TableDescriptors tds = HTU.getMiniHBaseCluster().getMaster().getTableDescriptors();
94100
HTU.waitFor(30000, () -> {
95101
try {
@@ -104,5 +110,10 @@ public void testMigrateStoreFileTracker() throws IOException, InterruptedExcepti
104110
return false;
105111
}
106112
});
113+
for (String table : tables) {
114+
TableDescriptor td = tds.get(TableName.valueOf(table));
115+
assertEquals(StoreFileTrackerFactory.Trackers.DEFAULT.name(),
116+
td.getValue(StoreFileTrackerFactory.TRACKER_IMPL));
117+
}
107118
}
108119
}

0 commit comments

Comments
 (0)