Skip to content

Commit 1a849dd

Browse files
Apache9Wellington Chevreuil
authored andcommitted
HBASE-26587 Introduce a new Admin API to change SFT implementation (apache#4030) (apache#4080)
Signed-off-by: Wellington Ramos Chevreuil <[email protected]> Reviewed-by: Josh Elser <[email protected]> Change-Id: I2668783c0903641ebef24d53d8e30018829735b8
1 parent b90a833 commit 1a849dd

30 files changed

+1716
-98
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070
import org.apache.yetus.audience.InterfaceAudience;
7171

7272
import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;
73-
import org.apache.yetus.audience.InterfaceStability;
7473

7574
/**
7675
* The administrative API for HBase. Obtain an instance from {@link Connection#getAdmin()} and
@@ -806,6 +805,31 @@ default void modifyColumnFamily(TableName tableName, ColumnFamilyDescriptor colu
806805
Future<Void> modifyColumnFamilyAsync(TableName tableName, ColumnFamilyDescriptor columnFamily)
807806
throws IOException;
808807

808+
/**
809+
* Change the store file tracker of the given table's given family.
810+
* @param tableName the table you want to change
811+
* @param family the family you want to change
812+
* @param dstSFT the destination store file tracker
813+
* @throws IOException if a remote or network exception occurs
814+
*/
815+
default void modifyColumnFamilyStoreFileTracker(TableName tableName, byte[] family, String dstSFT)
816+
throws IOException {
817+
get(modifyColumnFamilyStoreFileTrackerAsync(tableName, family, dstSFT), getSyncWaitTimeout(),
818+
TimeUnit.MILLISECONDS);
819+
}
820+
821+
/**
822+
* Change the store file tracker of the given table's given family.
823+
* @param tableName the table you want to change
824+
* @param family the family you want to change
825+
* @param dstSFT the destination store file tracker
826+
* @return the result of the async modify. You can use Future.get(long, TimeUnit) to wait on the
827+
* operation to complete
828+
* @throws IOException if a remote or network exception occurs
829+
*/
830+
Future<Void> modifyColumnFamilyStoreFileTrackerAsync(TableName tableName, byte[] family,
831+
String dstSFT) throws IOException;
832+
809833
/**
810834
* Uses {@link #unassign(byte[], boolean)} to unassign the region. For expert-admins.
811835
*
@@ -1611,6 +1635,28 @@ default Future<Void> modifyTableAsync(TableName tableName, TableDescriptor td)
16111635
*/
16121636
Future<Void> modifyTableAsync(TableDescriptor td) throws IOException;
16131637

1638+
/**
1639+
* Change the store file tracker of the given table.
1640+
* @param tableName the table you want to change
1641+
* @param dstSFT the destination store file tracker
1642+
* @throws IOException if a remote or network exception occurs
1643+
*/
1644+
default void modifyTableStoreFileTracker(TableName tableName, String dstSFT) throws IOException {
1645+
get(modifyTableStoreFileTrackerAsync(tableName, dstSFT), getSyncWaitTimeout(),
1646+
TimeUnit.MILLISECONDS);
1647+
}
1648+
1649+
/**
1650+
* Change the store file tracker of the given table.
1651+
* @param tableName the table you want to change
1652+
* @param dstSFT the destination store file tracker
1653+
* @return the result of the async modify. You can use Future.get(long, TimeUnit) to wait on the
1654+
* operation to complete
1655+
* @throws IOException if a remote or network exception occurs
1656+
*/
1657+
Future<Void> modifyTableStoreFileTrackerAsync(TableName tableName, String dstSFT)
1658+
throws IOException;
1659+
16141660
/**
16151661
* Shuts down the HBase cluster.
16161662
* <p/>

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ CompletableFuture<Void> createTable(TableDescriptor desc, byte[] startKey, byte[
178178
*/
179179
CompletableFuture<Void> modifyTable(TableDescriptor desc);
180180

181+
/**
182+
* Change the store file tracker of the given table.
183+
* @param tableName the table you want to change
184+
* @param dstSFT the destination store file tracker
185+
*/
186+
CompletableFuture<Void> modifyTableStoreFileTracker(TableName tableName, String dstSFT);
187+
181188
/**
182189
* Deletes a table.
183190
* @param tableName name of table to delete
@@ -259,6 +266,15 @@ CompletableFuture<Void> addColumnFamily(TableName tableName,
259266
CompletableFuture<Void> modifyColumnFamily(TableName tableName,
260267
ColumnFamilyDescriptor columnFamily);
261268

269+
/**
270+
* Change the store file tracker of the given table's given family.
271+
* @param tableName the table you want to change
272+
* @param family the family you want to change
273+
* @param dstSFT the destination store file tracker
274+
*/
275+
CompletableFuture<Void> modifyColumnFamilyStoreFileTracker(TableName tableName, byte[] family,
276+
String dstSFT);
277+
262278
/**
263279
* Create a new namespace.
264280
* @param descriptor descriptor which describes the new namespace

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ public CompletableFuture<Void> modifyTable(TableDescriptor desc) {
142142
return wrap(rawAdmin.modifyTable(desc));
143143
}
144144

145+
@Override
146+
public CompletableFuture<Void> modifyTableStoreFileTracker(TableName tableName, String dstSFT) {
147+
return wrap(rawAdmin.modifyTableStoreFileTracker(tableName, dstSFT));
148+
}
149+
145150
@Override
146151
public CompletableFuture<Void> deleteTable(TableName tableName) {
147152
return wrap(rawAdmin.deleteTable(tableName));
@@ -199,6 +204,12 @@ public CompletableFuture<Void> modifyColumnFamily(TableName tableName,
199204
return wrap(rawAdmin.modifyColumnFamily(tableName, columnFamily));
200205
}
201206

207+
@Override
208+
public CompletableFuture<Void> modifyColumnFamilyStoreFileTracker(TableName tableName,
209+
byte[] family, String dstSFT) {
210+
return wrap(rawAdmin.modifyColumnFamilyStoreFileTracker(tableName, family, dstSFT));
211+
}
212+
202213
@Override
203214
public CompletableFuture<Void> createNamespace(NamespaceDescriptor descriptor) {
204215
return wrap(rawAdmin.createNamespace(descriptor));

hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@
9898
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsRpcThrottleEnabledResponse;
9999
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;
100100
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;
101+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerRequest;
102+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerResponse;
103+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerRequest;
104+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerResponse;
101105
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;
102106
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;
103107
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;
@@ -1915,6 +1919,20 @@ public HBaseProtos.LogEntry getLogEntries(RpcController controller,
19151919
HBaseProtos.LogRequest request) throws ServiceException {
19161920
return stub.getLogEntries(controller, request);
19171921
}
1922+
1923+
@Override
1924+
public ModifyTableStoreFileTrackerResponse modifyTableStoreFileTracker(
1925+
RpcController controller, ModifyTableStoreFileTrackerRequest request)
1926+
throws ServiceException {
1927+
return stub.modifyTableStoreFileTracker(controller, request);
1928+
}
1929+
1930+
@Override
1931+
public ModifyColumnStoreFileTrackerResponse modifyColumnStoreFileTracker(
1932+
RpcController controller, ModifyColumnStoreFileTrackerRequest request)
1933+
throws ServiceException {
1934+
return stub.modifyColumnStoreFileTracker(controller, request);
1935+
}
19181936
};
19191937
}
19201938

hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java

Lines changed: 90 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,14 @@
199199
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse;
200200
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest;
201201
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse;
202+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerRequest;
203+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerResponse;
202204
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest;
203205
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse;
204206
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableRequest;
205207
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableResponse;
208+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerRequest;
209+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerResponse;
206210
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest;
207211
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest;
208212
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse;
@@ -388,19 +392,54 @@ public TableDescriptor getDescriptor(TableName tableName)
388392
public Future<Void> modifyTableAsync(TableDescriptor td) throws IOException {
389393
ModifyTableResponse response = executeCallable(
390394
new MasterCallable<ModifyTableResponse>(getConnection(), getRpcControllerFactory()) {
391-
Long nonceGroup = ng.getNonceGroup();
392-
Long nonce = ng.newNonce();
395+
long nonceGroup = ng.getNonceGroup();
396+
long nonce = ng.newNonce();
397+
393398
@Override
394399
protected ModifyTableResponse rpcCall() throws Exception {
395400
setPriority(td.getTableName());
396-
ModifyTableRequest request = RequestConverter.buildModifyTableRequest(
397-
td.getTableName(), td, nonceGroup, nonce);
401+
ModifyTableRequest request =
402+
RequestConverter.buildModifyTableRequest(td.getTableName(), td, nonceGroup, nonce);
398403
return master.modifyTable(getRpcController(), request);
399404
}
400405
});
401406
return new ModifyTableFuture(this, td.getTableName(), response);
402407
}
403408

409+
410+
@Override
411+
public Future<Void> modifyTableStoreFileTrackerAsync(TableName tableName, String dstSFT)
412+
throws IOException {
413+
ModifyTableStoreFileTrackerResponse response =
414+
executeCallable(new MasterCallable<ModifyTableStoreFileTrackerResponse>(getConnection(),
415+
getRpcControllerFactory()) {
416+
long nonceGroup = ng.getNonceGroup();
417+
long nonce = ng.newNonce();
418+
419+
@Override
420+
protected ModifyTableStoreFileTrackerResponse rpcCall() throws Exception {
421+
setPriority(tableName);
422+
ModifyTableStoreFileTrackerRequest request = RequestConverter
423+
.buildModifyTableStoreFileTrackerRequest(tableName, dstSFT, nonceGroup, nonce);
424+
return master.modifyTableStoreFileTracker(getRpcController(), request);
425+
}
426+
});
427+
return new ModifyTablerStoreFileTrackerFuture(this, tableName, response);
428+
}
429+
430+
private static class ModifyTablerStoreFileTrackerFuture extends ModifyTableFuture {
431+
public ModifyTablerStoreFileTrackerFuture(HBaseAdmin admin, TableName tableName,
432+
ModifyTableStoreFileTrackerResponse response) {
433+
super(admin, tableName,
434+
(response != null && response.hasProcId()) ? response.getProcId() : null);
435+
}
436+
437+
@Override
438+
public String getOperationType() {
439+
return "MODIFY_TABLE_STORE_FILE_TRACKER";
440+
}
441+
}
442+
404443
@Override
405444
public List<TableDescriptor> listTableDescriptorsByNamespace(byte[] name) throws IOException {
406445
return executeCallable(new MasterCallable<List<TableDescriptor>>(getConnection(),
@@ -1097,21 +1136,20 @@ public String getOperationType() {
10971136

10981137
@Override
10991138
public Future<Void> modifyColumnFamilyAsync(final TableName tableName,
1100-
final ColumnFamilyDescriptor columnFamily) throws IOException {
1101-
ModifyColumnResponse response =
1102-
executeCallable(new MasterCallable<ModifyColumnResponse>(getConnection(),
1103-
getRpcControllerFactory()) {
1104-
Long nonceGroup = ng.getNonceGroup();
1105-
Long nonce = ng.newNonce();
1106-
@Override
1107-
protected ModifyColumnResponse rpcCall() throws Exception {
1108-
setPriority(tableName);
1109-
ModifyColumnRequest req =
1110-
RequestConverter.buildModifyColumnRequest(tableName, columnFamily,
1111-
nonceGroup, nonce);
1112-
return master.modifyColumn(getRpcController(), req);
1113-
}
1114-
});
1139+
final ColumnFamilyDescriptor columnFamily) throws IOException {
1140+
ModifyColumnResponse response = executeCallable(
1141+
new MasterCallable<ModifyColumnResponse>(getConnection(), getRpcControllerFactory()) {
1142+
long nonceGroup = ng.getNonceGroup();
1143+
long nonce = ng.newNonce();
1144+
1145+
@Override
1146+
protected ModifyColumnResponse rpcCall() throws Exception {
1147+
setPriority(tableName);
1148+
ModifyColumnRequest req =
1149+
RequestConverter.buildModifyColumnRequest(tableName, columnFamily, nonceGroup, nonce);
1150+
return master.modifyColumn(getRpcController(), req);
1151+
}
1152+
});
11151153
return new ModifyColumnFamilyFuture(this, tableName, response);
11161154
}
11171155

@@ -1128,6 +1166,39 @@ public String getOperationType() {
11281166
}
11291167
}
11301168

1169+
@Override
1170+
public Future<Void> modifyColumnFamilyStoreFileTrackerAsync(TableName tableName, byte[] family,
1171+
String dstSFT) throws IOException {
1172+
ModifyColumnStoreFileTrackerResponse response =
1173+
executeCallable(new MasterCallable<ModifyColumnStoreFileTrackerResponse>(getConnection(),
1174+
getRpcControllerFactory()) {
1175+
long nonceGroup = ng.getNonceGroup();
1176+
long nonce = ng.newNonce();
1177+
1178+
@Override
1179+
protected ModifyColumnStoreFileTrackerResponse rpcCall() throws Exception {
1180+
setPriority(tableName);
1181+
ModifyColumnStoreFileTrackerRequest req = RequestConverter
1182+
.buildModifyColumnStoreFileTrackerRequest(tableName, family, dstSFT, nonceGroup, nonce);
1183+
return master.modifyColumnStoreFileTracker(getRpcController(), req);
1184+
}
1185+
});
1186+
return new ModifyColumnFamilyStoreFileTrackerFuture(this, tableName, response);
1187+
}
1188+
1189+
private static class ModifyColumnFamilyStoreFileTrackerFuture extends ModifyTableFuture {
1190+
public ModifyColumnFamilyStoreFileTrackerFuture(HBaseAdmin admin, TableName tableName,
1191+
final ModifyColumnStoreFileTrackerResponse response) {
1192+
super(admin, tableName,
1193+
(response != null && response.hasProcId()) ? response.getProcId() : null);
1194+
}
1195+
1196+
@Override
1197+
public String getOperationType() {
1198+
return "MODIFY_COLUMN_FAMILY_STORE_FILE_TRACKER";
1199+
}
1200+
}
1201+
11311202
@Deprecated
11321203
@Override
11331204
public void closeRegion(final String regionName, final String unused) throws IOException {

0 commit comments

Comments
 (0)