Skip to content

Commit 436fb78

Browse files
authored
HBASE-26586 Should not rely on the global config when setting SFT implementation for a table while upgrading (#4006)
Signed-off-by: GeorryHuang <[email protected]> Signed-off-by: Josh Elser <[email protected]> Signed-off-by: Wellington Ramos Chevreuil <[email protected]>
1 parent 47983cf commit 436fb78

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();
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;
@@ -30,6 +32,7 @@
3032
import org.apache.hadoop.hbase.client.TableDescriptor;
3133
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
3234
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory;
35+
import org.apache.hadoop.hbase.testclassification.MasterTests;
3336
import org.apache.hadoop.hbase.testclassification.MediumTests;
3437
import org.apache.hadoop.hbase.util.Bytes;
3538
import org.junit.After;
@@ -39,11 +42,11 @@
3942
import org.junit.Test;
4043
import org.junit.experimental.categories.Category;
4144

42-
@Category(MediumTests.class)
43-
public class TestMigrateStoreFileTracker {
45+
@Category({ MediumTests.class, MasterTests.class })
46+
public class TestInitializeStoreFileTracker {
4447
@ClassRule
4548
public static final HBaseClassTestRule CLASS_RULE =
46-
HBaseClassTestRule.forClass(TestMigrateStoreFileTracker.class);
49+
HBaseClassTestRule.forClass(TestInitializeStoreFileTracker.class);
4750
private final static String[] tables = new String[] { "t1", "t2", "t3", "t4", "t5", "t6" };
4851
private final static String famStr = "f1";
4952
private final static byte[] fam = Bytes.toBytes(famStr);
@@ -55,9 +58,12 @@ public class TestMigrateStoreFileTracker {
5558
@Before
5659
public void setUp() throws Exception {
5760
conf = HBaseConfiguration.create();
58-
//Speed up the launch of RollingUpgradeChore
61+
// Speed up the launch of RollingUpgradeChore
5962
conf.setInt(RollingUpgradeChore.ROLLING_UPGRADE_CHORE_PERIOD_SECONDS_KEY, 1);
6063
conf.setLong(RollingUpgradeChore.ROLLING_UPGRADE_CHORE_DELAY_SECONDS_KEY, 1);
64+
// Set the default implementation to file instead of default, to confirm we will not set SFT to
65+
// file
66+
conf.set(StoreFileTrackerFactory.TRACKER_IMPL, StoreFileTrackerFactory.Trackers.FILE.name());
6167
HTU = new HBaseTestingUtil(conf);
6268
HTU.startMiniCluster();
6369
}
@@ -88,7 +94,7 @@ public void testMigrateStoreFileTracker() throws IOException, InterruptedExcepti
8894
HTU.getMiniHBaseCluster().stopMaster(0).join();
8995
HTU.getMiniHBaseCluster().startMaster();
9096
HTU.getMiniHBaseCluster().waitForActiveAndReadyMaster(30000);
91-
//wait until all tables have been migrated
97+
// wait until all tables have been migrated
9298
TableDescriptors tds = HTU.getMiniHBaseCluster().getMaster().getTableDescriptors();
9399
HTU.waitFor(30000, () -> {
94100
try {
@@ -103,5 +109,10 @@ public void testMigrateStoreFileTracker() throws IOException, InterruptedExcepti
103109
return false;
104110
}
105111
});
112+
for (String table : tables) {
113+
TableDescriptor td = tds.get(TableName.valueOf(table));
114+
assertEquals(StoreFileTrackerFactory.Trackers.DEFAULT.name(),
115+
td.getValue(StoreFileTrackerFactory.TRACKER_IMPL));
116+
}
106117
}
107118
}

0 commit comments

Comments
 (0)