Skip to content

Commit e1d9bc2

Browse files
committed
HBASE-26587 Introduce a new Admin API to change SFT implementation (apache#4030)
Signed-off-by: Wellington Ramos Chevreuil <[email protected]> Reviewed-by: Josh Elser <[email protected]>
1 parent 76eb1b0 commit e1d9bc2

30 files changed

+1716
-276
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
*
@@ -1633,6 +1657,28 @@ default Future<Void> modifyTableAsync(TableName tableName, TableDescriptor td)
16331657
*/
16341658
Future<Void> modifyTableAsync(TableDescriptor td) throws IOException;
16351659

1660+
/**
1661+
* Change the store file tracker of the given table.
1662+
* @param tableName the table you want to change
1663+
* @param dstSFT the destination store file tracker
1664+
* @throws IOException if a remote or network exception occurs
1665+
*/
1666+
default void modifyTableStoreFileTracker(TableName tableName, String dstSFT) throws IOException {
1667+
get(modifyTableStoreFileTrackerAsync(tableName, dstSFT), getSyncWaitTimeout(),
1668+
TimeUnit.MILLISECONDS);
1669+
}
1670+
1671+
/**
1672+
* Change the store file tracker of the given table.
1673+
* @param tableName the table you want to change
1674+
* @param dstSFT the destination store file tracker
1675+
* @return the result of the async modify. You can use Future.get(long, TimeUnit) to wait on the
1676+
* operation to complete
1677+
* @throws IOException if a remote or network exception occurs
1678+
*/
1679+
Future<Void> modifyTableStoreFileTrackerAsync(TableName tableName, String dstSFT)
1680+
throws IOException;
1681+
16361682
/**
16371683
* Shuts down the HBase cluster.
16381684
* <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
@@ -124,6 +124,10 @@
124124
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsRpcThrottleEnabledResponse;
125125
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;
126126
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;
127+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerRequest;
128+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerResponse;
129+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerRequest;
130+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerResponse;
127131
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;
128132
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;
129133
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;
@@ -1948,6 +1952,20 @@ public HBaseProtos.LogEntry getLogEntries(RpcController controller,
19481952
HBaseProtos.LogRequest request) throws ServiceException {
19491953
return stub.getLogEntries(controller, request);
19501954
}
1955+
1956+
@Override
1957+
public ModifyTableStoreFileTrackerResponse modifyTableStoreFileTracker(
1958+
RpcController controller, ModifyTableStoreFileTrackerRequest request)
1959+
throws ServiceException {
1960+
return stub.modifyTableStoreFileTracker(controller, request);
1961+
}
1962+
1963+
@Override
1964+
public ModifyColumnStoreFileTrackerResponse modifyColumnStoreFileTracker(
1965+
RpcController controller, ModifyColumnStoreFileTrackerRequest request)
1966+
throws ServiceException {
1967+
return stub.modifyColumnStoreFileTracker(controller, request);
1968+
}
19511969
};
19521970
}
19531971

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
@@ -198,10 +198,14 @@
198198
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsResponse;
199199
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnRequest;
200200
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnResponse;
201+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerRequest;
202+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyColumnStoreFileTrackerResponse;
201203
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceRequest;
202204
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyNamespaceResponse;
203205
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableRequest;
204206
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableResponse;
207+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerRequest;
208+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ModifyTableStoreFileTrackerResponse;
205209
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest;
206210
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotRequest;
207211
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RestoreSnapshotResponse;
@@ -368,19 +372,54 @@ public TableDescriptor getDescriptor(TableName tableName)
368372
public Future<Void> modifyTableAsync(TableDescriptor td) throws IOException {
369373
ModifyTableResponse response = executeCallable(
370374
new MasterCallable<ModifyTableResponse>(getConnection(), getRpcControllerFactory()) {
371-
Long nonceGroup = ng.getNonceGroup();
372-
Long nonce = ng.newNonce();
375+
long nonceGroup = ng.getNonceGroup();
376+
long nonce = ng.newNonce();
377+
373378
@Override
374379
protected ModifyTableResponse rpcCall() throws Exception {
375380
setPriority(td.getTableName());
376-
ModifyTableRequest request = RequestConverter.buildModifyTableRequest(
377-
td.getTableName(), td, nonceGroup, nonce);
381+
ModifyTableRequest request =
382+
RequestConverter.buildModifyTableRequest(td.getTableName(), td, nonceGroup, nonce);
378383
return master.modifyTable(getRpcController(), request);
379384
}
380385
});
381386
return new ModifyTableFuture(this, td.getTableName(), response);
382387
}
383388

389+
390+
@Override
391+
public Future<Void> modifyTableStoreFileTrackerAsync(TableName tableName, String dstSFT)
392+
throws IOException {
393+
ModifyTableStoreFileTrackerResponse response =
394+
executeCallable(new MasterCallable<ModifyTableStoreFileTrackerResponse>(getConnection(),
395+
getRpcControllerFactory()) {
396+
long nonceGroup = ng.getNonceGroup();
397+
long nonce = ng.newNonce();
398+
399+
@Override
400+
protected ModifyTableStoreFileTrackerResponse rpcCall() throws Exception {
401+
setPriority(tableName);
402+
ModifyTableStoreFileTrackerRequest request = RequestConverter
403+
.buildModifyTableStoreFileTrackerRequest(tableName, dstSFT, nonceGroup, nonce);
404+
return master.modifyTableStoreFileTracker(getRpcController(), request);
405+
}
406+
});
407+
return new ModifyTablerStoreFileTrackerFuture(this, tableName, response);
408+
}
409+
410+
private static class ModifyTablerStoreFileTrackerFuture extends ModifyTableFuture {
411+
public ModifyTablerStoreFileTrackerFuture(HBaseAdmin admin, TableName tableName,
412+
ModifyTableStoreFileTrackerResponse response) {
413+
super(admin, tableName,
414+
(response != null && response.hasProcId()) ? response.getProcId() : null);
415+
}
416+
417+
@Override
418+
public String getOperationType() {
419+
return "MODIFY_TABLE_STORE_FILE_TRACKER";
420+
}
421+
}
422+
384423
@Override
385424
public List<TableDescriptor> listTableDescriptorsByNamespace(byte[] name) throws IOException {
386425
return executeCallable(new MasterCallable<List<TableDescriptor>>(getConnection(),
@@ -1077,21 +1116,20 @@ public String getOperationType() {
10771116

10781117
@Override
10791118
public Future<Void> modifyColumnFamilyAsync(final TableName tableName,
1080-
final ColumnFamilyDescriptor columnFamily) throws IOException {
1081-
ModifyColumnResponse response =
1082-
executeCallable(new MasterCallable<ModifyColumnResponse>(getConnection(),
1083-
getRpcControllerFactory()) {
1084-
Long nonceGroup = ng.getNonceGroup();
1085-
Long nonce = ng.newNonce();
1086-
@Override
1087-
protected ModifyColumnResponse rpcCall() throws Exception {
1088-
setPriority(tableName);
1089-
ModifyColumnRequest req =
1090-
RequestConverter.buildModifyColumnRequest(tableName, columnFamily,
1091-
nonceGroup, nonce);
1092-
return master.modifyColumn(getRpcController(), req);
1093-
}
1094-
});
1119+
final ColumnFamilyDescriptor columnFamily) throws IOException {
1120+
ModifyColumnResponse response = executeCallable(
1121+
new MasterCallable<ModifyColumnResponse>(getConnection(), getRpcControllerFactory()) {
1122+
long nonceGroup = ng.getNonceGroup();
1123+
long nonce = ng.newNonce();
1124+
1125+
@Override
1126+
protected ModifyColumnResponse rpcCall() throws Exception {
1127+
setPriority(tableName);
1128+
ModifyColumnRequest req =
1129+
RequestConverter.buildModifyColumnRequest(tableName, columnFamily, nonceGroup, nonce);
1130+
return master.modifyColumn(getRpcController(), req);
1131+
}
1132+
});
10951133
return new ModifyColumnFamilyFuture(this, tableName, response);
10961134
}
10971135

@@ -1108,6 +1146,39 @@ public String getOperationType() {
11081146
}
11091147
}
11101148

1149+
@Override
1150+
public Future<Void> modifyColumnFamilyStoreFileTrackerAsync(TableName tableName, byte[] family,
1151+
String dstSFT) throws IOException {
1152+
ModifyColumnStoreFileTrackerResponse response =
1153+
executeCallable(new MasterCallable<ModifyColumnStoreFileTrackerResponse>(getConnection(),
1154+
getRpcControllerFactory()) {
1155+
long nonceGroup = ng.getNonceGroup();
1156+
long nonce = ng.newNonce();
1157+
1158+
@Override
1159+
protected ModifyColumnStoreFileTrackerResponse rpcCall() throws Exception {
1160+
setPriority(tableName);
1161+
ModifyColumnStoreFileTrackerRequest req = RequestConverter
1162+
.buildModifyColumnStoreFileTrackerRequest(tableName, family, dstSFT, nonceGroup, nonce);
1163+
return master.modifyColumnStoreFileTracker(getRpcController(), req);
1164+
}
1165+
});
1166+
return new ModifyColumnFamilyStoreFileTrackerFuture(this, tableName, response);
1167+
}
1168+
1169+
private static class ModifyColumnFamilyStoreFileTrackerFuture extends ModifyTableFuture {
1170+
public ModifyColumnFamilyStoreFileTrackerFuture(HBaseAdmin admin, TableName tableName,
1171+
final ModifyColumnStoreFileTrackerResponse response) {
1172+
super(admin, tableName,
1173+
(response != null && response.hasProcId()) ? response.getProcId() : null);
1174+
}
1175+
1176+
@Override
1177+
public String getOperationType() {
1178+
return "MODIFY_COLUMN_FAMILY_STORE_FILE_TRACKER";
1179+
}
1180+
}
1181+
11111182
@Deprecated
11121183
@Override
11131184
public void closeRegion(final String regionName, final String unused) throws IOException {

0 commit comments

Comments
 (0)