Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HBASE-23305: Master based registry implementation #954

Conversation

bharathv
Copy link
Contributor

Implements a master based registry for clients.

  • Supports hedged RPCs (fan out configured via configs).
  • Parameterized existing client tests to run with multiple
    registry combinations.
  • Added unit-test coverage for the new registry implenenation.

Copy link
Contributor Author

@bharathv bharathv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@apurtell @ndimiduk @saintstack Next in the series of patches that implements a master registry.

This patch is a little more involved than the earlier ones. Happy to do anything that makes it easier for you to review. Let me know.

I'm still thinking of ways to improve the test coverage, especially injecting faults and timeouts. Even without that, I think the patch is ready for review. Any feedback welcome.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 1m 11s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 1s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 35s Maven dependency ordering for branch
+1 💚 mvninstall 5m 52s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 44s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 34s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 5m 3s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 19s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 48s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 42s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 14s Maven dependency ordering for patch
+1 💚 mvninstall 5m 29s the patch passed
+1 💚 compile 1m 44s the patch passed
+1 💚 javac 1m 44s the patch passed
-1 ❌ checkstyle 1m 33s hbase-server: The patch generated 2 new + 224 unchanged - 45 fixed = 226 total (was 269)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
-1 ❌ shadedjars 2m 42s patch has 10 errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 17m 26s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
-1 ❌ javadoc 0m 21s hbase-client generated 2 new + 2 unchanged - 0 fixed = 4 total (was 2)
-1 ❌ findbugs 1m 18s hbase-client generated 1 new + 0 unchanged - 0 fixed = 1 total (was 0)
_ Other Tests _
+1 💚 unit 3m 1s hbase-common in the patch passed.
+1 💚 unit 1m 49s hbase-client in the patch passed.
-1 ❌ unit 205m 58s hbase-server in the patch failed.
-1 ❌ asflicense 1m 26s The patch generated 2 ASF License warnings.
283m 25s
Reason Tests
FindBugs module:hbase-client
Should org.apache.hadoop.hbase.client.MasterRegistry$BatchRpcCtx be a static inner class? At MasterRegistry.java:inner class? At MasterRegistry.java:[lines 100-145]
Failed junit tests hadoop.hbase.client.TestAsyncRegionAdminApi2
hadoop.hbase.client.TestAsyncTableRegionReplicasScan
hadoop.hbase.client.TestScannersFromClientSide
hadoop.hbase.client.TestMetaWithReplicas
hadoop.hbase.client.TestAsyncResultScannerCursor
hadoop.hbase.replication.TestReplicationDisableInactivePeer
hadoop.hbase.client.TestZKAsyncRegistry
hadoop.hbase.client.TestCIPutOperationTimeout
hadoop.hbase.client.TestCloneSnapshotFromClientAfterSplittingRegion
hadoop.hbase.client.TestMultipleTimestamps
hadoop.hbase.client.TestAdmin3
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux 55f8f10fe76f 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / e41b46c
Default Java 1.8.0_181
checkstyle https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/diff-checkstyle-hbase-server.txt
shadedjars https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/patch-shadedjars.txt
javadoc https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/diff-javadoc-javadoc-hbase-client.txt
findbugs https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/new-findbugs-hbase-client.html
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/testReport/
asflicense https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/artifact/out/patch-asflicense-problems.txt
Max. process+thread count 9918 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/1/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

Copy link
Contributor

@saintstack saintstack left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Patch looks good. Need to add delay for hedged reading but that can come in follow-on.

We are definetly saying goodbye to Master being able to sit at the back of the class being able to check in just once-in-a-while... and even being able to check out for long stretches at a time. It is now critical inline factor in overall uptime. In exchange we get simplified cluster deploy and tighter control of the interface we present clients.

// Configured list of masters to probe the meta information from.
private final List<ServerName> masterServers;
// Controls the fan out of the hedged requests. Requests are made in batches of this number until
// all the servers are exhausted. The first returned result is passed back to the client.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once we have a successful answer, do we kill/interrupt the other ongoing queries? Wondering because 100k clients going against 3 or 5 Masters will be a bit of a load.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If N connections to the cluster, how many MasterRegistries? As many as there are Connections? Or is there just a single instance per JVM and it is shared across?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my earlier review I suggest we do fan out adaptively by default. If single requests are performing adequately, fanout is unnecessary load for no reward.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once we have a successful answer, do we kill/interrupt the other ongoing queries? Wondering because 100k clients going against 3 or 5 Masters will be a bit of a load.

We interrupt the threads. I clarified it in the new design and wrote a detailed javadoc. Let me know if it is not clear.

If N connections to the cluster, how many MasterRegistries? As many as there are Connections? Or is there just a single instance per JVM and it is shared across?

This is actually a very good point. It is not once per JVM (although, I think that makes more sense to me). Infact it is multiple instances per connection (look at the callers of AsyncRegistryFactory#getRegistry()). I think there is definitely a scope for cleanup here. Can i revisit this as a follow up?

In my earlier review I suggest we do fan out adaptively by default. If single requests are performing adequately, fanout is unnecessary load for no reward.

Totally agree. I think the hedging policy needs to be smart. I clarified this in the new patch set. Can I implement this in a follow up patch? This is already too big.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Infact it is multiple instances per connection (look at the callers of AsyncRegistryFactory#getRegistry()). I think there is definitely a scope for cleanup here. Can i revisit this as a follow up?

This is the state of things before you arrived, right? I'd say file this as a separate ticket, as another cleanup project for rebase, or for after this code lands. I think I'd prefer to see the former, but it's not a strong preference ATM. I do consider it a blocker for back port to a branch-2, however.

// RPC client used to talk to the masters.
private final RpcClient rpcClient;
private final RpcControllerFactory rpcControllerFactory;
private final int rpcTimeoutNs;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does this timeout relate to general client rpc timeout? If I set rpc timeout for client of 10 seconds, is this timeout subsumed by the general client timeout or does this run indepentent of whatever the overall client timeout setting is?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleaned this up. Does not exist any more.

// at doRPCs().
@VisibleForTesting
@FunctionalInterface
public interface RpcCall<RESP> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is like AsyncAdminRequestRetryingCaller#Callable only it throws a ServiceException. Should it take a Controller? Should it be in a class of its own?

On ClientMetaService, 'meta' is overloaded in hbase. Usually it is about the hbase:meta table but here it is about something else? Should it be called something other than ClientMetaService? Somethign to do w/ Registry?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it return CompleteableFuture since we in async land?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed this and implemented a generic hedging framework for any RPC at the rpc layer.

*/
private void parseMasterAddrs(Configuration conf) {
String configuredMasters = conf.get(MASTER_ADDRS_KEY, MASTER_ADDRS_DEFAULT);
for (String masterAddr: configuredMasters.split(",")) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Fragile? If space after comma, this breaks?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yikes. Added some test coverage too.

masterServers.add(ServerName.valueOf(masterAddr, ServerName.NON_STARTCODE));
}
// (Pseudo) Randomized so that not all clients hot spot the same set of masters.
Collections.shuffle(masterServers);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good

conf.getInt(MASTER_REGISTRY_NUM_HEDGED_REQS_KEY, MASTER_REGISTRY_NUM_HEDGED_REQS_DEFAULT);
Preconditions.checkArgument(requestFanOut >= 1);
if (requestFanOut > 1) {
masterRpcPool = Executors.newFixedThreadPool(requestFanOut,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: delay query of second and third masters?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Copy link
Contributor

@apurtell apurtell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got to the point where I suggested a big refactor of the patch's approach and stopped there for now.

public class MasterRegistryFetchException extends HBaseIOException {
public MasterRegistryFetchException(List<ServerName> masters, String failedRPC) {
super(String.format("Exception making rpc %s to masters %s", failedRPC,
masters.stream().map(Objects::toString).collect(Collectors.toList())));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unnecessary Java 8 idioms

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much of this work has these, all presenting issues for backport (not insurmountable, though), but this one is less readable than a simple string join using Collections.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved this to PrettyPrinter as a general util for any collection.

but this one is less readable than a simple string join using Collections.

Fair point. Switched to good old better performing loops.

@VisibleForTesting
<RESP> Optional<RESP> doRPCs(RpcCall<RESP> rpcCall,
Function<RESP, Boolean> isvalidResp, String debug) {
if (requestFanOut == 1) {
Copy link
Contributor

@apurtell apurtell Dec 20, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was expecting for the first cut we'd do just one request to a random host on the list at a time, and retry with another random choice. (So above randomization of list is good and important.) This is what the zookeeper client does now so is no different from current state of play.

Hedged reading is ahead of the game.

Good that it is off by default, though.

Also, it's nice that fan out factor is configurable, but I would want an adaptive policy by default. Only if single requests are failing at some threshold of unacceptable probability (i suppose controlled by a config param) would you want to start loading up more than one per request in trade for faster response, hopefully, on average.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's generalize this and apply it to and reuse the existing RPC controller, RPC client, Callable, Call, Caller hierarchy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Re-did the whole thing. Now the hedging happens in the RPC layer and is not specific to MasterRegistry anymore.

Preconditions.checkState(requestFanOut > 1);
Preconditions.checkNotNull(masterRpcPool);
int i = 0;
while (i < masterServers.size()){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above comment regarding adaptive behavior. I'd prefer if we have fan out, to not blindly do it if single requests are performing adequately.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree.

while (i < masterServers.size()){
// Each iteration of loop picks requestFanOut masters
int subListSize = Math.min(masterServers.size(), i + requestFanOut);
List<ServerName> masterSubList = masterServers.subList(i, subListSize);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't the list be randomized again? Or we're hitting the sublists deterministically. Make a private list at top of function and shuffle?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking it'd be non-deterministic at the registry level. (different connections have different registries anyway, so wondering if we need to shuffle again.

private final Function<RESP, Boolean> isValidResp;
private final String debugStr;

MasterRpc(BatchRpcCtx<RESP> rpcCtx, ServerName master, RpcCall<RESP> rpcCall,
Copy link
Contributor

@apurtell apurtell Dec 20, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need a new one, right? Use existing RPC/Call facilities and set a retry policy where there are no retries using the factory methods for that.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 1m 8s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 8 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 35s Maven dependency ordering for branch
+1 💚 mvninstall 5m 48s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 45s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 32s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 5m 5s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 16s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 46s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 39s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 13s Maven dependency ordering for patch
+1 💚 mvninstall 5m 31s the patch passed
+1 💚 compile 1m 46s the patch passed
+1 💚 javac 1m 46s the patch passed
+1 💚 checkstyle 0m 25s The patch passed checkstyle in hbase-common
+1 💚 checkstyle 0m 34s The patch passed checkstyle in hbase-client
+1 💚 checkstyle 1m 32s hbase-server: The patch generated 0 new + 223 unchanged - 46 fixed = 223 total (was 269)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 5m 4s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 17m 29s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 15s the patch passed
-1 ❌ findbugs 1m 18s hbase-client generated 1 new + 0 unchanged - 0 fixed = 1 total (was 0)
_ Other Tests _
+1 💚 unit 3m 2s hbase-common in the patch passed.
+1 💚 unit 1m 49s hbase-client in the patch passed.
-1 ❌ unit 267m 40s hbase-server in the patch failed.
+1 💚 asflicense 1m 22s The patch does not generate ASF License warnings.
346m 53s
Reason Tests
FindBugs module:hbase-client
Should org.apache.hadoop.hbase.client.MasterRegistry$BatchRpcCtx be a static inner class? At MasterRegistry.java:inner class? At MasterRegistry.java:[lines 117-162]
Failed junit tests hadoop.hbase.client.TestSplitOrMergeStatus
hadoop.hbase.client.TestFromClientSideWithCoprocessor
hadoop.hbase.master.TestMasterShutdown
hadoop.hbase.client.TestScannersFromClientSide
hadoop.hbase.client.TestMobSnapshotCloneIndependence
hadoop.hbase.client.TestCIPutOperationTimeout
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/2/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux 2c688ac1523d 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / e41b46c
Default Java 1.8.0_181
findbugs https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/2/artifact/out/new-findbugs-hbase-client.html
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/2/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/2/testReport/
Max. process+thread count 9917 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/2/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

Copy link
Contributor Author

@bharathv bharathv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-implemented the whole hedging logic again. Will force-push the new set of commits shortly.

// Configured list of masters to probe the meta information from.
private final List<ServerName> masterServers;
// Controls the fan out of the hedged requests. Requests are made in batches of this number until
// all the servers are exhausted. The first returned result is passed back to the client.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once we have a successful answer, do we kill/interrupt the other ongoing queries? Wondering because 100k clients going against 3 or 5 Masters will be a bit of a load.

We interrupt the threads. I clarified it in the new design and wrote a detailed javadoc. Let me know if it is not clear.

If N connections to the cluster, how many MasterRegistries? As many as there are Connections? Or is there just a single instance per JVM and it is shared across?

This is actually a very good point. It is not once per JVM (although, I think that makes more sense to me). Infact it is multiple instances per connection (look at the callers of AsyncRegistryFactory#getRegistry()). I think there is definitely a scope for cleanup here. Can i revisit this as a follow up?

In my earlier review I suggest we do fan out adaptively by default. If single requests are performing adequately, fanout is unnecessary load for no reward.

Totally agree. I think the hedging policy needs to be smart. I clarified this in the new patch set. Can I implement this in a follow up patch? This is already too big.

*/
private void parseMasterAddrs(Configuration conf) {
String configuredMasters = conf.get(MASTER_ADDRS_KEY, MASTER_ADDRS_DEFAULT);
for (String masterAddr: configuredMasters.split(",")) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yikes. Added some test coverage too.

@VisibleForTesting
<RESP> Optional<RESP> doRPCs(RpcCall<RESP> rpcCall,
Function<RESP, Boolean> isvalidResp, String debug) {
if (requestFanOut == 1) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Re-did the whole thing. Now the hedging happens in the RPC layer and is not specific to MasterRegistry anymore.

Preconditions.checkState(requestFanOut > 1);
Preconditions.checkNotNull(masterRpcPool);
int i = 0;
while (i < masterServers.size()){
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree.

while (i < masterServers.size()){
// Each iteration of loop picks requestFanOut masters
int subListSize = Math.min(masterServers.size(), i + requestFanOut);
List<ServerName> masterSubList = masterServers.subList(i, subListSize);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking it'd be non-deterministic at the registry level. (different connections have different registries anyway, so wondering if we need to shuffle again.

public class MasterRegistryFetchException extends HBaseIOException {
public MasterRegistryFetchException(List<ServerName> masters, String failedRPC) {
super(String.format("Exception making rpc %s to masters %s", failedRPC,
masters.stream().map(Objects::toString).collect(Collectors.toList())));
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved this to PrettyPrinter as a general util for any collection.

but this one is less readable than a simple string join using Collections.

Fair point. Switched to good old better performing loops.

Copy link
Contributor Author

@bharathv bharathv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To summarize the set of changes in the latest force fush.

  • Hedging now happens in the rpc layer and is generic for any call.
  • Implemented MasterRegistry using this hedging rpc framework.
  • Clarified the hedging design in the javadocs.
  • Does not yet implement the adaptable hedging logic, since the patch is already too big. I think it can be done as a follow up.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 0m 32s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 10 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 36s Maven dependency ordering for branch
+1 💚 mvninstall 5m 17s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 47s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 24s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 4m 33s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 22s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 22s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 13s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 16s Maven dependency ordering for patch
+1 💚 mvninstall 5m 0s the patch passed
+1 💚 compile 1m 45s the patch passed
+1 💚 javac 1m 45s the patch passed
+1 💚 checkstyle 0m 26s hbase-common: The patch generated 0 new + 4 unchanged - 1 fixed = 4 total (was 5)
+1 💚 checkstyle 0m 32s hbase-client: The patch generated 0 new + 3 unchanged - 6 fixed = 3 total (was 9)
-1 ❌ checkstyle 1m 23s hbase-server: The patch generated 2 new + 227 unchanged - 46 fixed = 229 total (was 273)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
-1 ❌ shadedjars 2m 28s patch has 10 errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 15m 42s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 21s the patch passed
+1 💚 findbugs 6m 30s the patch passed
_ Other Tests _
+1 💚 unit 3m 10s hbase-common in the patch passed.
+1 💚 unit 1m 54s hbase-client in the patch passed.
-1 ❌ unit 175m 37s hbase-server in the patch failed.
-1 ❌ asflicense 1m 46s The patch generated 1 ASF License warnings.
247m 22s
Reason Tests
Failed junit tests hadoop.hbase.client.TestFromClientSide
hadoop.hbase.client.TestFromClientSideWithCoprocessor
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux dfed66e1cbf1 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / e41b46c
Default Java 1.8.0_181
checkstyle https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/artifact/out/diff-checkstyle-hbase-server.txt
shadedjars https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/artifact/out/patch-shadedjars.txt
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/testReport/
asflicense https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/artifact/out/patch-asflicense-problems.txt
Max. process+thread count 9903 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/3/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 0m 34s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 1s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 10 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 35s Maven dependency ordering for branch
+1 💚 mvninstall 5m 13s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 44s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 24s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 4m 38s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 19s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 26s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 18s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 16s Maven dependency ordering for patch
+1 💚 mvninstall 5m 7s the patch passed
+1 💚 compile 1m 45s the patch passed
+1 💚 javac 1m 45s the patch passed
+1 💚 checkstyle 0m 26s hbase-common: The patch generated 0 new + 4 unchanged - 1 fixed = 4 total (was 5)
+1 💚 checkstyle 0m 31s hbase-client: The patch generated 0 new + 3 unchanged - 6 fixed = 3 total (was 9)
+1 💚 checkstyle 1m 24s hbase-server: The patch generated 0 new + 227 unchanged - 46 fixed = 227 total (was 273)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 4m 39s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 15m 44s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 22s the patch passed
+1 💚 findbugs 6m 42s the patch passed
_ Other Tests _
+1 💚 unit 3m 11s hbase-common in the patch passed.
+1 💚 unit 1m 53s hbase-client in the patch passed.
-1 ❌ unit 189m 42s hbase-server in the patch failed.
+1 💚 asflicense 1m 45s The patch does not generate ASF License warnings.
264m 2s
Reason Tests
Failed junit tests hadoop.hbase.client.TestFromClientSide
hadoop.hbase.client.TestScannersFromClientSide
hadoop.hbase.client.TestFromClientSideWithCoprocessor
hadoop.hbase.quotas.TestQuotaAdmin
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/4/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux 0e3f574cae6c 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / e41b46c
Default Java 1.8.0_181
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/4/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/4/testReport/
Max. process+thread count 9909 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/4/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 1m 8s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 10 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 36s Maven dependency ordering for branch
+1 💚 mvninstall 5m 53s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 43s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 38s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 5m 7s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 17s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 43s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 37s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 14s Maven dependency ordering for patch
+1 💚 mvninstall 5m 32s the patch passed
+1 💚 compile 1m 47s the patch passed
+1 💚 javac 1m 47s the patch passed
+1 💚 checkstyle 0m 25s hbase-common: The patch generated 0 new + 4 unchanged - 1 fixed = 4 total (was 5)
+1 💚 checkstyle 0m 35s hbase-client: The patch generated 0 new + 3 unchanged - 6 fixed = 3 total (was 9)
+1 💚 checkstyle 1m 33s hbase-server: The patch generated 0 new + 227 unchanged - 46 fixed = 227 total (was 273)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 5m 3s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 17m 21s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 20s the patch passed
+1 💚 findbugs 7m 3s the patch passed
_ Other Tests _
+1 💚 unit 3m 1s hbase-common in the patch passed.
+1 💚 unit 1m 50s hbase-client in the patch passed.
-1 ❌ unit 271m 40s hbase-server in the patch failed.
+1 💚 asflicense 1m 10s The patch does not generate ASF License warnings.
350m 55s
Reason Tests
Failed junit tests hadoop.hbase.client.TestFromClientSideWithCoprocessor
hadoop.hbase.quotas.TestClusterScopeQuotaThrottle
hadoop.hbase.client.TestScannersFromClientSide
hadoop.hbase.client.TestFromClientSide
hadoop.hbase.regionserver.TestSplitTransactionOnCluster
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/5/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux f3a8a8df9404 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / e41b46c
Default Java 1.8.0_181
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/5/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/5/testReport/
Max. process+thread count 5491 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/5/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

@bharathv
Copy link
Contributor Author

Fixed all the test failures from the last run in the latest push. One of the fixes comes in as a separate PR to master #963 . To pull that in, the current feature branch needs a rebase on master. Also, from the last test run, the thread usage has substantially dropped due to the test cleanup. I think this is in a good shape for 2nd round of review. Appreciate any feedback.

@asfgit asfgit force-pushed the HBASE-18095/client-locate-meta-no-zookeeper branch from e41b46c to 1c41b36 Compare December 28, 2019 19:24
@bharathv
Copy link
Contributor Author

@saintstack / @apurtell Any thoughts on the new design? Happy to address any concerns. Thanks.


/**
* Exception thrown when an master registry RPC fails in client. The exception includes the list of
* masters to which RPC was attempted.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this include a throwable associated with each master? They can be failing for different reasons.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They will be logged anyway, didn't want to include them here because it will be too verbose. Thoughts?

@@ -217,7 +215,9 @@ private void cleanupIdleConnections() {
// have some pending calls on connection so we should not shutdown the connection outside.
// The connection itself will disconnect if there is no pending call for maxIdleTime.
if (conn.getLastTouched() < closeBeforeTime && !conn.isActive()) {
if (LOG.isTraceEnabled()) LOG.trace("Cleanup idle connection to " + conn.remoteId().address);
if (LOG.isTraceEnabled()) {
LOG.trace("Cleanup idle connection to " + conn.remoteId().address);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: use format string.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

// Configured list of masters to probe the meta information from.
private final List<ServerName> masterServers;
// Controls the fan out of the hedged requests. Requests are made in batches of this number until
// all the servers are exhausted. The first returned result is passed back to the client.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Infact it is multiple instances per connection (look at the callers of AsyncRegistryFactory#getRegistry()). I think there is definitely a scope for cleanup here. Can i revisit this as a follow up?

This is the state of things before you arrived, right? I'd say file this as a separate ticket, as another cleanup project for rebase, or for after this code lands. I think I'd prefer to see the former, but it's not a strong preference ATM. I do consider it a blocker for back port to a branch-2, however.

class HedgedRpcChannel implements RpcChannel {
private static final Logger LOG = LoggerFactory.getLogger(HedgedRpcChannel.class);

private final AbstractRpcClient rpcClient;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This instance variable needs to be templatized. Probably <?> is sufficient.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

* @param result Result to be set.
*/
public void setResultIfNotSet(Message result, HBaseRpcController rpcController) {
if (result == null) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Odd that the null check is vs result but it's the value of rpcController.getFailed() that is actually used. I would expect the null check against the value of getFailed. There would need to be a subsequent null check against result to check for a should-not-happen kind of scenario.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense.

// Cancel all pending in flight calls.
for (Call call: callsInFlight) {
// It is ok to do it for all calls as it is a no-op if the call is already done.
call.setException(new CallCancelledException("Hedged call succeeded."));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps something more descriptive like "Canceled because sibling hedged call succeeded". It's odd to see the message explaining an exception describe a successful result.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

public void testHedgedAsyncTimeouts() throws Exception {
List<RpcServer> rpcServers = new ArrayList<>();
List<InetSocketAddress> addresses = new ArrayList<>();
// Create a mix of running and failing servers.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stale comment? I only see running servers in this test.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

@@ -53,7 +52,7 @@

public static final class HMasterForTest extends HMaster {

public HMasterForTest(Configuration conf) throws IOException, KeeperException {
public HMasterForTest(Configuration conf) throws IOException {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your second miracle.

@@ -348,4 +352,32 @@ public void testToCell() throws Exception {
ProtobufUtil.toCell(ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY), cell);
assertTrue(CellComparatorImpl.COMPARATOR.compare(offheapKV, newOffheapKV) == 0);
}

@Test
public void testMetaRegionState() throws Exception {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💯

@asfgit asfgit force-pushed the HBASE-18095/client-locate-meta-no-zookeeper branch from 1c41b36 to dffa9be Compare January 3, 2020 00:21
@ndimiduk
Copy link
Member

ndimiduk commented Jan 3, 2020

FYI, I rebased the feature branch onto the tip of master.

Copy link
Contributor Author

@bharathv bharathv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ndimiduk Thanks for taking your time to review this. You see a ton of already-reviewed-changes here because of the force pushes to the feature branch. You shouldn't be seeing them once I rebase the patch. Will address your comments after the rebase.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 1m 12s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 31 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 33s Maven dependency ordering for branch
+1 💚 mvninstall 5m 50s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 1m 45s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 36s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 5m 8s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 24s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 5m 17s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 7m 21s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 14s Maven dependency ordering for patch
+1 💚 mvninstall 5m 37s the patch passed
+1 💚 compile 1m 44s the patch passed
+1 💚 javac 1m 44s the patch passed
+1 💚 checkstyle 0m 26s hbase-common: The patch generated 0 new + 4 unchanged - 1 fixed = 4 total (was 5)
-1 ❌ checkstyle 0m 33s hbase-client: The patch generated 2 new + 14 unchanged - 10 fixed = 16 total (was 24)
+1 💚 checkstyle 1m 31s hbase-server: The patch generated 0 new + 226 unchanged - 48 fixed = 226 total (was 274)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 5m 1s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 17m 33s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 18s the patch passed
+1 💚 findbugs 7m 19s the patch passed
_ Other Tests _
+1 💚 unit 3m 12s hbase-common in the patch passed.
+1 💚 unit 1m 54s hbase-client in the patch passed.
-1 ❌ unit 171m 59s hbase-server in the patch failed.
+1 💚 asflicense 1m 16s The patch does not generate ASF License warnings.
252m 59s
Reason Tests
Failed junit tests hadoop.hbase.client.TestScannersFromClientSide
hadoop.hbase.client.TestFromClientSide
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/7/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux 265a7760b785 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / dffa9be
Default Java 1.8.0_181
checkstyle https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/7/artifact/out/diff-checkstyle-hbase-client.txt
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/7/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/7/testReport/
Max. process+thread count 6669 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/7/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

@bharathv bharathv requested a review from apurtell January 3, 2020 21:10
@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 1m 20s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 1s No case conflicting files found.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 31 new or modified test files.
_ HBASE-18095/client-locate-meta-no-zookeeper Compile Tests _
+0 🆗 mvndep 0m 36s Maven dependency ordering for branch
+1 💚 mvninstall 5m 59s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 compile 2m 3s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 checkstyle 2m 39s HBASE-18095/client-locate-meta-no-zookeeper passed
+1 💚 shadedjars 5m 15s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 1m 18s HBASE-18095/client-locate-meta-no-zookeeper passed
+0 🆗 spotbugs 4m 43s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 6m 35s HBASE-18095/client-locate-meta-no-zookeeper passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 14s Maven dependency ordering for patch
+1 💚 mvninstall 5m 34s the patch passed
+1 💚 compile 1m 45s the patch passed
+1 💚 javac 1m 45s the patch passed
+1 💚 checkstyle 0m 26s hbase-common: The patch generated 0 new + 4 unchanged - 1 fixed = 4 total (was 5)
-1 ❌ checkstyle 0m 33s hbase-client: The patch generated 2 new + 14 unchanged - 10 fixed = 16 total (was 24)
+1 💚 checkstyle 1m 34s hbase-server: The patch generated 0 new + 224 unchanged - 50 fixed = 224 total (was 274)
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 5m 5s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 17m 34s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 javadoc 1m 16s the patch passed
+1 💚 findbugs 7m 33s the patch passed
_ Other Tests _
+1 💚 unit 3m 7s hbase-common in the patch passed.
+1 💚 unit 1m 55s hbase-client in the patch passed.
-1 ❌ unit 166m 9s hbase-server in the patch failed.
+1 💚 asflicense 1m 13s The patch does not generate ASF License warnings.
247m 11s
Reason Tests
Failed junit tests hadoop.hbase.client.TestFromClientSideWithCoprocessor
hadoop.hbase.client.TestFromClientSide
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/8/artifact/out/Dockerfile
GITHUB PR #954
JIRA Issue HBASE-23305
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile
uname Linux 1bcc84663300 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-954/out/precommit/personality/provided.sh
git revision HBASE-18095/client-locate-meta-no-zookeeper / dffa9be
Default Java 1.8.0_181
checkstyle https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/8/artifact/out/diff-checkstyle-hbase-client.txt
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/8/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/8/testReport/
Max. process+thread count 6395 (vs. ulimit of 10000)
modules C: hbase-common hbase-client hbase-server U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-954/8/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

@bharathv
Copy link
Contributor Author

bharathv commented Jan 4, 2020

Fixed the check style issues and rebased on the latest tip of the feature branch (and squashed all the commits). Test failures seem to be flakes and run fine for me locally. I think this is good to go for another round of review.

@bharathv bharathv requested a review from ndimiduk January 4, 2020 02:42
@ndimiduk ndimiduk merged commit 4a74bb3 into apache:HBASE-18095/client-locate-meta-no-zookeeper Jan 14, 2020
asfgit pushed a commit that referenced this pull request Jan 14, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
ndimiduk pushed a commit to ndimiduk/hbase that referenced this pull request Jan 21, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
ndimiduk pushed a commit to ndimiduk/hbase that referenced this pull request Jan 21, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Jan 24, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Jan 28, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
(cherry picked from commit 62da419)
asfgit pushed a commit that referenced this pull request Jan 29, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Jan 29, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Jan 30, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 2, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 2, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Feb 3, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Feb 4, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Feb 5, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
asfgit pushed a commit that referenced this pull request Feb 5, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit that referenced this pull request Feb 9, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit that referenced this pull request Feb 11, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit that referenced this pull request Feb 13, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 14, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 17, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit that referenced this pull request Feb 18, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 20, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit that referenced this pull request Feb 20, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 23, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
(cherry picked from commit 62da419)
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 25, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
(cherry picked from commit 62da419)
bharathv added a commit to bharathv/hbase that referenced this pull request Feb 26, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
(cherry picked from commit 62da419)
bharathv added a commit that referenced this pull request Feb 27, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
(cherry picked from commit 62da419)
thangTang pushed a commit to thangTang/hbase that referenced this pull request Apr 16, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
thangTang pushed a commit to thangTang/hbase that referenced this pull request Apr 16, 2020
Implements a master based registry for clients.

 - Supports hedged RPCs (fan out configured via configs).
 - Parameterized existing client tests to run with multiple registry combinations.
 - Added unit-test coverage for the new registry implementation.

Signed-off-by: Nick Dimiduk <ndimiduk@apache.org>
Signed-off-by: stack <stack@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants