Skip to content

Commit 7d28d95

Browse files
committed
HBASE-24822 Add a command to support archive the earliest log file manually
1 parent 485e0d2 commit 7d28d95

File tree

21 files changed

+346
-2
lines changed

21 files changed

+346
-2
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,14 @@ Future<Boolean> abortProcedureAsync(long procId, boolean mayInterruptIfRunning)
13221322
*/
13231323
void rollWALWriter(ServerName serverName) throws IOException, FailedLogCloseException;
13241324

1325+
/**
1326+
* Archive the earliest log file.
1327+
*
1328+
* @param serverName The servername of the regionserver.
1329+
* @throws IOException if a remote or network exception occurs
1330+
*/
1331+
void archiveEarliestWAL(ServerName serverName) throws IOException;
1332+
13251333
/**
13261334
* Helper that delegates to getClusterMetrics().getMasterCoprocessorNames().
13271335
* @return an array of master coprocessors

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,11 @@ public void rollWALWriter(ServerName serverName) throws IOException, FailedLogCl
588588
get(admin.rollWALWriter(serverName));
589589
}
590590

591+
@Override
592+
public void archiveEarliestWAL(ServerName serverName) throws IOException {
593+
get(admin.archiveEarliestWAL(serverName));
594+
}
595+
591596
@Override
592597
public CompactionState getCompactionState(TableName tableName) throws IOException {
593598
return get(admin.getCompactionState(tableName));

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,13 @@ default CompletableFuture<Integer> getMasterInfoPort() {
11271127
*/
11281128
CompletableFuture<Void> rollWALWriter(ServerName serverName);
11291129

1130+
/**
1131+
* Archive the earliest log file.
1132+
*
1133+
* @param serverName The servername of the region server.
1134+
*/
1135+
CompletableFuture<Void> archiveEarliestWAL(ServerName serverName);
1136+
11301137
/**
11311138
* Clear compacting queues on a region server.
11321139
* @param serverName

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,11 @@ public CompletableFuture<Void> rollWALWriter(ServerName serverName) {
635635
return wrap(rawAdmin.rollWALWriter(serverName));
636636
}
637637

638+
@Override
639+
public CompletableFuture<Void> archiveEarliestWAL(ServerName serverName) {
640+
return wrap(rawAdmin.archiveEarliestWAL(serverName));
641+
}
642+
638643
@Override
639644
public CompletableFuture<Void> clearCompactionQueues(ServerName serverName, Set<String> queues) {
640645
return wrap(rawAdmin.clearCompactionQueues(serverName, queues));

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeRequest;
122122
import org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeResponse;
123123
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
124+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ArchiveWALRequest;
125+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ArchiveWALResponse;
124126
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;
125127
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;
126128
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;
@@ -2913,6 +2915,17 @@ public CompletableFuture<Void> rollWALWriter(ServerName serverName) {
29132915
.serverName(serverName).call();
29142916
}
29152917

2918+
@Override
2919+
public CompletableFuture<Void> archiveEarliestWAL(ServerName serverName) {
2920+
return this
2921+
.<Void> newAdminCaller()
2922+
.action(
2923+
(controller, stub) -> this.<ArchiveWALRequest, ArchiveWALResponse, Void> adminCall(
2924+
controller, stub, RequestConverter.buildArchiveWALRequest(),
2925+
(s, c, req, done) -> s.archiveEarliestWAL(controller, req, done), resp -> null))
2926+
.serverName(serverName).call();
2927+
}
2928+
29162929
@Override
29172930
public CompletableFuture<Void> clearCompactionQueues(ServerName serverName, Set<String> queues) {
29182931
return this

hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.apache.hbase.thirdparty.com.google.common.collect.Sets;
7373
import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;
7474

75+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ArchiveWALRequest;
7576
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;
7677
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;
7778
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearSlowLogResponseRequest;
@@ -883,6 +884,20 @@ public static RollWALWriterRequest buildRollWALWriterRequest() {
883884
return ROLL_WAL_WRITER_REQUEST;
884885
}
885886

887+
/**
888+
* @see #buildArchiveWALRequest()
889+
*/
890+
private static ArchiveWALRequest ARCHIVE_WAL_REQUEST = ArchiveWALRequest.newBuilder()
891+
.build();
892+
893+
/**
894+
* Get the static ArchiveWALRequest instance
895+
* @return a ArchiveWALRequest
896+
*/
897+
public static ArchiveWALRequest buildArchiveWALRequest() {
898+
return ARCHIVE_WAL_REQUEST;
899+
}
900+
886901
/**
887902
* @see #buildGetServerInfoRequest()
888903
*/

hbase-protocol-shaded/src/main/protobuf/server/region/Admin.proto

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ message RollWALWriterResponse {
219219
repeated bytes region_to_flush = 1;
220220
}
221221

222+
message ArchiveWALRequest {
223+
}
224+
225+
message ArchiveWALResponse {
226+
}
227+
222228
message StopServerRequest {
223229
required string reason = 1;
224230
}
@@ -351,6 +357,9 @@ service AdminService {
351357
rpc RollWALWriter(RollWALWriterRequest)
352358
returns(RollWALWriterResponse);
353359

360+
rpc archiveEarliestWAL(ArchiveWALRequest)
361+
returns(ArchiveWALResponse);
362+
354363
rpc GetServerInfo(GetServerInfoRequest)
355364
returns(GetServerInfoResponse);
356365

hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionServerObserver.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,24 @@ default void postRollWALWriterRequest(
7676
final ObserverContext<RegionServerCoprocessorEnvironment> ctx)
7777
throws IOException {}
7878

79+
/**
80+
* This will be called before executing user request to archive earliest log
81+
* file of a region server.
82+
* @param ctx the environment to interact with the framework and region server.
83+
*/
84+
default void preArchiveWALRequest(
85+
final ObserverContext<RegionServerCoprocessorEnvironment> ctx)
86+
throws IOException {}
87+
88+
/**
89+
* This will be called after executing user request to archive earliest log
90+
* file of a region server.
91+
* @param ctx the environment to interact with the framework and region server.
92+
*/
93+
default void postArchiveWALRequest(
94+
final ObserverContext<RegionServerCoprocessorEnvironment> ctx)
95+
throws IOException {}
96+
7997
/**
8098
* This will be called after the replication endpoint is instantiated.
8199
* @param ctx the environment to interact with the framework and region server.

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@
171171
import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;
172172
import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;
173173
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
174+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ArchiveWALRequest;
175+
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ArchiveWALResponse;
174176
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;
175177
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;
176178
import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;
@@ -2394,6 +2396,27 @@ public RollWALWriterResponse rollWALWriter(final RpcController controller,
23942396
}
23952397
}
23962398

2399+
/**
2400+
* Archive the earliest log file of the region server.
2401+
* @param controller the RPC controller
2402+
* @param request the request
2403+
* @throws ServiceException
2404+
*/
2405+
@Override
2406+
public ArchiveWALResponse archiveEarliestWAL(final RpcController controller,
2407+
final ArchiveWALRequest request) throws ServiceException {
2408+
try {
2409+
checkOpen();
2410+
requestCount.increment();
2411+
regionServer.getRegionServerCoprocessorHost().preArchiveWALRequest();
2412+
regionServer.getWalRoller().requestArchive();
2413+
regionServer.getRegionServerCoprocessorHost().postArchiveWALRequest();
2414+
ArchiveWALResponse.Builder builder = ArchiveWALResponse.newBuilder();
2415+
return builder.build();
2416+
} catch (IOException ie) {
2417+
throw new ServiceException(ie);
2418+
}
2419+
}
23972420

23982421
/**
23992422
* Stop the region server.

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,24 @@ public void call(RegionServerObserver observer) throws IOException {
150150
});
151151
}
152152

153+
public void preArchiveWALRequest() throws IOException {
154+
execOperation(coprocEnvironments.isEmpty() ? null : new RegionServerObserverOperation() {
155+
@Override
156+
public void call(RegionServerObserver observer) throws IOException {
157+
observer.preArchiveWALRequest(this);
158+
}
159+
});
160+
}
161+
162+
public void postArchiveWALRequest() throws IOException {
163+
execOperation(coprocEnvironments.isEmpty() ? null : new RegionServerObserverOperation() {
164+
@Override
165+
public void call(RegionServerObserver observer) throws IOException {
166+
observer.postArchiveWALRequest(this);
167+
}
168+
});
169+
}
170+
153171
public void preReplicateLogEntries()
154172
throws IOException {
155173
execOperation(coprocEnvironments.isEmpty() ? null : new RegionServerObserverOperation() {

0 commit comments

Comments
 (0)