From fb08b9534901e333b36e4331c08385bd2adf6b30 Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Wed, 13 Mar 2019 17:32:45 +0800 Subject: [PATCH] HBASE-22039 Should add the synchronous parameter for the XXXSwitch method in AsyncAdmin --- .../hadoop/hbase/client/AsyncAdmin.java | 57 +++++++++++++++++-- .../hadoop/hbase/client/AsyncHBaseAdmin.java | 12 ++-- .../hbase/client/RawAsyncHBaseAdmin.java | 43 +++++++------- 3 files changed, 78 insertions(+), 34 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java index 595282152b..623e4f86ec 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java @@ -435,10 +435,25 @@ public interface AsyncAdmin { /** * Turn the Merge switch on or off. - * @param on + * @param enabled enabled or not + * @return Previous switch value wrapped by a {@link CompletableFuture} + */ + default CompletableFuture mergeSwitch(boolean enabled) { + return mergeSwitch(enabled, false); + } + + /** + * Turn the Merge switch on or off. + *

+ * Notice that, the method itself is always non-blocking, which means it will always return + * immediately. The {@code drainMerges} parameter only effects when will we complete the returned + * {@link CompletableFuture}. + * @param enabled enabled or not + * @param drainMerges If true, it waits until current merge() call, if outstanding, + * to return. * @return Previous switch value wrapped by a {@link CompletableFuture} */ - CompletableFuture mergeSwitch(boolean on); + CompletableFuture mergeSwitch(boolean enabled, boolean drainMerges); /** * Query the current state of the Merge switch. @@ -449,10 +464,25 @@ public interface AsyncAdmin { /** * Turn the Split switch on or off. - * @param on + * @param enabled enabled or not + * @return Previous switch value wrapped by a {@link CompletableFuture} + */ + default CompletableFuture splitSwitch(boolean enabled) { + return splitSwitch(enabled, false); + } + + /** + * Turn the Split switch on or off. + *

+ * Notice that, the method itself is always non-blocking, which means it will always return + * immediately. The {@code drainSplits} parameter only effects when will we complete the returned + * {@link CompletableFuture}. + * @param enabled enabled or not + * @param drainSplits If true, it waits until current split() call, if outstanding, + * to return. * @return Previous switch value wrapped by a {@link CompletableFuture} */ - CompletableFuture splitSwitch(boolean on); + CompletableFuture splitSwitch(boolean enabled, boolean drainSplits); /** * Query the current state of the Split switch. @@ -1132,10 +1162,25 @@ public interface AsyncAdmin { /** * Turn the load balancer on or off. - * @param on + * @param on Set to true to enable, false to disable. + * @return Previous balancer value wrapped by a {@link CompletableFuture}. + */ + default CompletableFuture balancerSwitch(boolean on) { + return balancerSwitch(on, false); + } + + /** + * Turn the load balancer on or off. + *

+ * Notice that, the method itself is always non-blocking, which means it will always return + * immediately. The {@code drainRITs} parameter only effects when will we complete the returned + * {@link CompletableFuture}. + * @param on Set to true to enable, false to disable. + * @param drainRITs If true, it waits until current balance() call, if outstanding, + * to return. * @return Previous balancer value wrapped by a {@link CompletableFuture}. */ - CompletableFuture balancerSwitch(boolean on); + CompletableFuture balancerSwitch(boolean on, boolean drainRITs); /** * Invoke the balancer. Will run the balancer and if regions to move, it will go ahead and do the diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java index 53eaec808e..ab37b31a43 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java @@ -296,8 +296,8 @@ class AsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture mergeSwitch(boolean on) { - return wrap(rawAdmin.mergeSwitch(on)); + public CompletableFuture mergeSwitch(boolean enabled, boolean drainMerges) { + return wrap(rawAdmin.mergeSwitch(enabled, drainMerges)); } @Override @@ -306,8 +306,8 @@ class AsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture splitSwitch(boolean on) { - return wrap(rawAdmin.splitSwitch(on)); + public CompletableFuture splitSwitch(boolean enabled, boolean drainSplits) { + return wrap(rawAdmin.splitSwitch(enabled, drainSplits)); } @Override @@ -664,8 +664,8 @@ class AsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture balancerSwitch(boolean on) { - return wrap(rawAdmin.balancerSwitch(on)); + public CompletableFuture balancerSwitch(boolean on, boolean drainRITs) { + return wrap(rawAdmin.balancerSwitch(on, drainRITs)); } @Override diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java index 1092332e76..c73eec49b8 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java @@ -1176,8 +1176,8 @@ class RawAsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture mergeSwitch(boolean on) { - return setSplitOrMergeOn(on, MasterSwitchType.MERGE); + public CompletableFuture mergeSwitch(boolean enabled, boolean drainMerges) { + return setSplitOrMergeOn(enabled, drainMerges, MasterSwitchType.MERGE); } @Override @@ -1186,8 +1186,8 @@ class RawAsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture splitSwitch(boolean on) { - return setSplitOrMergeOn(on, MasterSwitchType.SPLIT); + public CompletableFuture splitSwitch(boolean enabled, boolean drainSplits) { + return setSplitOrMergeOn(enabled, drainSplits, MasterSwitchType.SPLIT); } @Override @@ -1195,16 +1195,16 @@ class RawAsyncHBaseAdmin implements AsyncAdmin { return isSplitOrMergeOn(MasterSwitchType.SPLIT); } - private CompletableFuture setSplitOrMergeOn(boolean on, MasterSwitchType switchType) { + private CompletableFuture setSplitOrMergeOn(boolean enabled, boolean synchronous, + MasterSwitchType switchType) { SetSplitOrMergeEnabledRequest request = - RequestConverter.buildSetSplitOrMergeEnabledRequest(on, false, switchType); - return this - . newMasterCaller() - .action( - (controller, stub) -> this - . call( - controller, stub, request, (s, c, req, done) -> s.setSplitOrMergeEnabled(c, req, - done), (resp) -> resp.getPrevValueList().get(0))).call(); + RequestConverter.buildSetSplitOrMergeEnabledRequest(enabled, synchronous, switchType); + return this. newMasterCaller() + .action((controller, stub) -> this + . call(controller, + stub, request, (s, c, req, done) -> s.setSplitOrMergeEnabled(c, req, done), + (resp) -> resp.getPrevValueList().get(0))) + .call(); } private CompletableFuture isSplitOrMergeOn(MasterSwitchType switchType) { @@ -3127,15 +3127,14 @@ class RawAsyncHBaseAdmin implements AsyncAdmin { } @Override - public CompletableFuture balancerSwitch(final boolean on) { - return this - . newMasterCaller() - .action( - (controller, stub) -> this - . call(controller, - stub, RequestConverter.buildSetBalancerRunningRequest(on, true), - (s, c, req, done) -> s.setBalancerRunning(c, req, done), - (resp) -> resp.getPrevBalanceValue())).call(); + public CompletableFuture balancerSwitch(boolean on, boolean drainRITs) { + return this. newMasterCaller() + .action((controller, stub) -> this + . call(controller, stub, + RequestConverter.buildSetBalancerRunningRequest(on, drainRITs), + (s, c, req, done) -> s.setBalancerRunning(c, req, done), + (resp) -> resp.getPrevBalanceValue())) + .call(); } @Override -- 2.17.1