bharathv commented on a change in pull request #2280:
URL: https://github.com/apache/hbase/pull/2280#discussion_r487440011



##########
File path: 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetricsConnection.java
##########
@@ -56,6 +56,7 @@
   /** Set this key to {@code true} to enable metrics collection of client 
requests. */
   public static final String CLIENT_SIDE_METRICS_ENABLED_KEY = 
"hbase.client.metrics.enable";
 
+  private static final String CNT_BASE = "rpcCount_";

Review comment:
       This landed as a part of #2130 (HBASE-24765). Nick suggested that we 
should have a way of accounting all RPCs that happen from a client perspective 
and this seemed like a good and clean way to me. Given this already was already 
clubbed with HBASE-24765 in master, you still want to separate it here?

##########
File path: 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/MasterRegistry.java
##########
@@ -0,0 +1,266 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.client;
+
+import static org.apache.hadoop.hbase.util.DNS.getMasterHostname;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.net.HostAndPort;
+import com.google.protobuf.Message;
+import com.google.protobuf.RpcController;
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ThreadLocalRandom;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseIOException;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.RegionLocations;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;
+import org.apache.hadoop.hbase.exceptions.MasterRegistryFetchException;
+import org.apache.hadoop.hbase.ipc.BlockingRpcCallback;
+import org.apache.hadoop.hbase.ipc.HBaseRpcController;
+import org.apache.hadoop.hbase.ipc.RpcClient;
+import org.apache.hadoop.hbase.ipc.RpcClientFactory;
+import org.apache.hadoop.hbase.ipc.RpcControllerFactory;
+import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
+import org.apache.hadoop.hbase.security.User;
+
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ClientMetaService;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterIdRequest;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterIdResponse;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetMastersRequest;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetMastersResponse;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetMastersResponseEntry;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetMetaRegionLocationsRequest;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetMetaRegionLocationsResponse;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetNumLiveRSRequest;
+import 
org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetNumLiveRSResponse;
+
+/**
+ * Master based registry implementation. Makes RPCs to the configured master 
addresses from config
+ * {@value org.apache.hadoop.hbase.HConstants#MASTER_ADDRS_KEY}. All the 
registry methods are
+ * blocking unlike implementations in other branches.
+ */
+@InterfaceAudience.Private
+public class MasterRegistry implements ConnectionRegistry {
+  private static final String MASTER_ADDRS_CONF_SEPARATOR = ",";
+
+  private volatile ImmutableMap<String, ClientMetaService.Interface> 
masterAddr2Stub;
+
+  // RPC client used to talk to the masters.
+  private RpcClient rpcClient;
+  private RpcControllerFactory rpcControllerFactory;
+  private int rpcTimeoutMs;
+
+  protected MasterAddressRefresher masterAddressRefresher;
+
+  @Override
+  public void init(Connection connection) throws IOException {
+    Configuration conf = connection.getConfiguration();
+    rpcTimeoutMs = (int) Math.min(Integer.MAX_VALUE,
+        conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, 
HConstants.DEFAULT_HBASE_RPC_TIMEOUT));
+    // XXX: we pass cluster id as null here since we do not have a cluster id 
yet, we have to fetch

Review comment:
       Let me create a jira for this. It's like a chicken and egg problem at 
this point. I'm studying digest based auth to see if there is a way to move 
away from cluster ID (I don't fully understand it now). Currently this 
limitation exists in all branches. 

##########
File path: 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
##########
@@ -1571,43 +1573,31 @@ boolean isMasterRunning() throws ServiceException {
        * @throws KeeperException
        * @throws ServiceException
        */
-      private Object makeStubNoRetries() throws IOException, KeeperException, 
ServiceException {
-        ZooKeeperKeepAliveConnection zkw;
-        try {
-          zkw = getKeepAliveZooKeeperWatcher();
-        } catch (IOException e) {
-          ExceptionUtil.rethrowIfInterrupt(e);
-          throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", 
e);
-        }
-        try {
-          checkIfBaseNodeAvailable(zkw);
-          ServerName sn = MasterAddressTracker.getMasterAddress(zkw);
-          if (sn == null) {
-            String msg = "ZooKeeper available but no active master location 
found";
-            LOG.info(msg);
-            throw new MasterNotRunningException(msg);
-          }
-          if (isDeadServer(sn)) {
-            throw new MasterNotRunningException(sn + " is dead.");
+      private Object makeStubNoRetries() throws IOException, ServiceException {
+        ServerName sn = registry.getActiveMaster();
+        if (sn == null) {
+          String msg = "ZooKeeper available but no active master location 
found";

Review comment:
       Fixed.

##########
File path: 
hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetricsConnection.java
##########
@@ -466,6 +468,9 @@ public void updateRpc(MethodDescriptor method, Message 
param, CallStats stats) {
     if (callsPerServer > 0) {
       concurrentCallsPerServerHist.update(callsPerServer);
     }
+    // Update the counter that tracks RPCs by type.
+    final String methodName = method.getService().getName() + "_" + 
method.getName();

Review comment:
       Responded above. Let me know if you still think it should be a separate 
change, I'll do it.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to