You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2022/01/16 08:26:18 UTC
[hbase] branch master updated: HBASE-26654 ModifyTableDescriptorProcedure shoud load TableDescriptor while executing (#4034)
This is an automated email from the ASF dual-hosted git repository.
zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new c9bcd87 HBASE-26654 ModifyTableDescriptorProcedure shoud load TableDescriptor while executing (#4034)
c9bcd87 is described below
commit c9bcd87b34a15d200a55ec7fdc2b1d86e3367a8c
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Sun Jan 16 16:25:28 2022 +0800
HBASE-26654 ModifyTableDescriptorProcedure shoud load TableDescriptor while executing (#4034)
Signed-off-by: GeorryHuang <hu...@apache.org>
---
.../protobuf/server/master/MasterProcedure.proto | 2 +-
.../hbase/master/migrate/RollingUpgradeChore.java | 2 +-
.../procedure/ModifyTableDescriptorProcedure.java | 30 +++++++++++++++++-----
.../InitializeStoreFileTrackerProcedure.java | 5 ++--
.../hbase/rsgroup/MigrateRSGroupProcedure.java | 5 ++--
.../hbase/rsgroup/RSGroupInfoManagerImpl.java | 2 +-
6 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto b/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
index 77f2c60..4f92e950 100644
--- a/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/server/master/MasterProcedure.proto
@@ -655,6 +655,6 @@ enum ModifyTableDescriptorState {
}
message ModifyTableDescriptorStateData {
- required TableSchema unmodified_table_schema = 1;
+ required TableName table_name = 1;
optional TableSchema modified_table_schema = 2;
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/migrate/RollingUpgradeChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/migrate/RollingUpgradeChore.java
index 0417b5c..b7087dd 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/migrate/RollingUpgradeChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/migrate/RollingUpgradeChore.java
@@ -121,7 +121,7 @@ public class RollingUpgradeChore extends ScheduledChore {
for (Map.Entry<String, TableDescriptor> entry : migrateSFTTables.entrySet()) {
TableDescriptor tableDescriptor = entry.getValue();
InitializeStoreFileTrackerProcedure proc = new InitializeStoreFileTrackerProcedure(
- procedureExecutor.getEnvironment(), tableDescriptor);
+ procedureExecutor.getEnvironment(), tableDescriptor.getTableName());
procedureExecutor.submitProcedure(proc);
processingProcs.add(proc);
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableDescriptorProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableDescriptorProcedure.java
index e11b4ab..57d7c23 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableDescriptorProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ModifyTableDescriptorProcedure.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hbase.master.procedure;
import java.io.IOException;
+import java.util.Objects;
import java.util.Optional;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.TableDescriptor;
@@ -44,20 +45,21 @@ public abstract class ModifyTableDescriptorProcedure
private static final Logger LOG = LoggerFactory.getLogger(ModifyTableDescriptorProcedure.class);
- private TableDescriptor unmodifiedTableDescriptor;
+ private TableName tableName;
+
private TableDescriptor modifiedTableDescriptor;
protected ModifyTableDescriptorProcedure() {
}
- protected ModifyTableDescriptorProcedure(MasterProcedureEnv env, TableDescriptor unmodified) {
+ protected ModifyTableDescriptorProcedure(MasterProcedureEnv env, TableName tableName) {
super(env);
- this.unmodifiedTableDescriptor = unmodified;
+ this.tableName = Objects.requireNonNull(tableName);
}
@Override
public TableName getTableName() {
- return unmodifiedTableDescriptor.getTableName();
+ return tableName;
}
@Override
@@ -82,7 +84,12 @@ public abstract class ModifyTableDescriptorProcedure
try {
switch (state) {
case MODIFY_TABLE_DESCRIPTOR_PREPARE:
- Optional<TableDescriptor> modified = modify(env, unmodifiedTableDescriptor);
+ TableDescriptor current = env.getMasterServices().getTableDescriptors().get(tableName);
+ if (current == null) {
+ LOG.info("Table {} does not exist, skip modifying", tableName);
+ return Flow.NO_MORE_STATE;
+ }
+ Optional<TableDescriptor> modified = modify(env, current);
if (modified.isPresent()) {
modifiedTableDescriptor = modified.get();
setNextState(ModifyTableDescriptorState.MODIFY_TABLE_DESCRIPTOR_UPDATE);
@@ -109,6 +116,15 @@ public abstract class ModifyTableDescriptorProcedure
}
@Override
+ protected boolean holdLock(MasterProcedureEnv env) {
+ // here we want to make sure that our modification result will not be overwrite by other MTPs,
+ // so we set holdLock to true. Since we do not need to schedule any sub procedures, especially
+ // no remote procedures, so it is OK for us a hold the lock all the time, it will not hurt the
+ // availability too much.
+ return true;
+ }
+
+ @Override
protected void rollbackState(MasterProcedureEnv env, ModifyTableDescriptorState state)
throws IOException, InterruptedException {
if (state == ModifyTableDescriptorState.MODIFY_TABLE_DESCRIPTOR_PREPARE) {
@@ -141,7 +157,7 @@ public abstract class ModifyTableDescriptorProcedure
protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {
super.serializeStateData(serializer);
ModifyTableDescriptorStateData.Builder builder = ModifyTableDescriptorStateData.newBuilder()
- .setUnmodifiedTableSchema(ProtobufUtil.toTableSchema(unmodifiedTableDescriptor));
+ .setTableName(ProtobufUtil.toProtoTableName(tableName));
if (modifiedTableDescriptor != null) {
builder.setModifiedTableSchema(ProtobufUtil.toTableSchema(modifiedTableDescriptor));
}
@@ -153,7 +169,7 @@ public abstract class ModifyTableDescriptorProcedure
super.deserializeStateData(serializer);
ModifyTableDescriptorStateData data =
serializer.deserialize(ModifyTableDescriptorStateData.class);
- unmodifiedTableDescriptor = ProtobufUtil.toTableDescriptor(data.getUnmodifiedTableSchema());
+ tableName = ProtobufUtil.toTableName(data.getTableName());
if (data.hasModifiedTableSchema()) {
modifiedTableDescriptor = ProtobufUtil.toTableDescriptor(data.getModifiedTableSchema());
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/InitializeStoreFileTrackerProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/InitializeStoreFileTrackerProcedure.java
index bd4162c..5a88f99 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/InitializeStoreFileTrackerProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/InitializeStoreFileTrackerProcedure.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hbase.regionserver.storefiletracker;
import java.util.Optional;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
@@ -33,8 +34,8 @@ public class InitializeStoreFileTrackerProcedure extends ModifyTableDescriptorPr
public InitializeStoreFileTrackerProcedure(){}
- public InitializeStoreFileTrackerProcedure(MasterProcedureEnv env, TableDescriptor unmodified) {
- super(env, unmodified);
+ public InitializeStoreFileTrackerProcedure(MasterProcedureEnv env, TableName tableName) {
+ super(env, tableName);
}
@Override
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/MigrateRSGroupProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/MigrateRSGroupProcedure.java
index bca77c8..3c03abc 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/MigrateRSGroupProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/MigrateRSGroupProcedure.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.rsgroup;
import java.io.IOException;
import java.util.Optional;
+import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
@@ -38,8 +39,8 @@ public class MigrateRSGroupProcedure extends ModifyTableDescriptorProcedure {
public MigrateRSGroupProcedure() {
}
- public MigrateRSGroupProcedure(MasterProcedureEnv env, TableDescriptor unmodified) {
- super(env, unmodified);
+ public MigrateRSGroupProcedure(MasterProcedureEnv env, TableName tableName) {
+ super(env, tableName);
}
@Override
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
index b13afef..6ec3746 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java
@@ -528,7 +528,7 @@ final class RSGroupInfoManagerImpl implements RSGroupInfoManager {
// master first and then region server, so after all the region servers has been reopened,
// the new TableDescriptor will be loaded.
MigrateRSGroupProcedure proc =
- new MigrateRSGroupProcedure(procExec.getEnvironment(), oldTd);
+ new MigrateRSGroupProcedure(procExec.getEnvironment(), tableName);
procExec.submitProcedure(proc);
procs.add(proc);
}