You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/07/03 22:29:54 UTC
svn commit: r1356920 [1/5] - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/ main/java/org/apache/hadoop/hbase/client/
main/java/org/apache/hadoop/hbase/io/ main/java/org/apache/hadoop/hbase/ipc/
main/java/org/apache/hadoop/hbase/m...
Author: stack
Date: Tue Jul 3 20:29:50 2012
New Revision: 1356920
URL: http://svn.apache.org/viewvc?rev=1356920&view=rev
Log:
HBASE-6039 Remove HMasterInterface and replace with something similar to RegionServerStatusProtocol
Added:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterAdminProtocol.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterMonitorProtocol.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterProtocol.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterAdminKeepAliveConnection.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterMonitorKeepAliveConnection.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterAdminProtos.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterMonitorProtos.java
hbase/trunk/hbase-server/src/main/protobuf/MasterAdmin.proto
hbase/trunk/hbase-server/src/main/protobuf/MasterMonitor.proto
Removed:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterKeepAliveConnection.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/Invocation.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/generated/MasterProtos.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/security/HBasePolicyProvider.java
hbase/trunk/hbase-server/src/main/protobuf/Master.proto
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestHMasterRPCException.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.java
Added: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterAdminProtocol.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterAdminProtocol.java?rev=1356920&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterAdminProtocol.java (added)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterAdminProtocol.java Tue Jul 3 20:29:50 2012
@@ -0,0 +1,306 @@
+/**
+ * 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;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MasterAdminService;
+import org.apache.hadoop.hbase.security.TokenInfo;
+import org.apache.hadoop.hbase.security.KerberosInfo;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ShutdownRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ShutdownResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.StopMasterRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.StopMasterResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningResponse;
+
+
+import com.google.protobuf.RpcController;
+import com.google.protobuf.ServiceException;
+
+/**
+ * Protocol that a client uses to communicate with the Master (for admin purposes).
+ */
+@KerberosInfo(
+ serverPrincipal = "hbase.master.kerberos.principal")
+@TokenInfo("HBASE_AUTH_TOKEN")
+@InterfaceAudience.Private
+@InterfaceStability.Evolving
+public interface MasterAdminProtocol extends
+ MasterAdminService.BlockingInterface, MasterProtocol {
+ public static final long VERSION = 1L;
+
+ /* Column-level */
+
+ /**
+ * Adds a column to the specified table
+ * @param controller Unused (set to null).
+ * @param req AddColumnRequest that contains:<br>
+ * - tableName: table to modify<br>
+ * - column: column descriptor
+ * @throws ServiceException
+ */
+ @Override
+ public AddColumnResponse addColumn(RpcController controller, AddColumnRequest req)
+ throws ServiceException;
+
+ /**
+ * Deletes a column from the specified table. Table must be disabled.
+ * @param controller Unused (set to null).
+ * @param req DeleteColumnRequest that contains:<br>
+ * - tableName: table to alter<br>
+ * - columnName: column family to remove
+ * @throws ServiceException
+ */
+ @Override
+ public DeleteColumnResponse deleteColumn(RpcController controller, DeleteColumnRequest req)
+ throws ServiceException;
+
+ /**
+ * Modifies an existing column on the specified table
+ * @param controller Unused (set to null).
+ * @param req ModifyColumnRequest that contains:<br>
+ * - tableName: table name<br>
+ * - descriptor: new column descriptor
+ * @throws IOException e
+ */
+ @Override
+ public ModifyColumnResponse modifyColumn(RpcController controller, ModifyColumnRequest req)
+ throws ServiceException;
+
+ /* Region-level */
+
+ /**
+ * Move a region to a specified destination server.
+ * @param controller Unused (set to null).
+ * @param req The request that contains:<br>
+ * - region: The encoded region name; i.e. the hash that makes
+ * up the region name suffix: e.g. if regionname is
+ * <code>TestTable,0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396.</code>,
+ * then the encoded region name is: <code>527db22f95c8a9e0116f0cc13c680396</code>.<br>
+ * - destServerName: The servername of the destination regionserver. If
+ * passed the empty byte array we'll assign to a random server. A server name
+ * is made of host, port and startcode. Here is an example:
+ * <code> host187.example.com,60020,1289493121758</code>.
+ * @throws ServiceException that wraps a UnknownRegionException if we can't find a
+ * region named <code>encodedRegionName</code>
+ */
+ @Override
+ public MoveRegionResponse moveRegion(RpcController controller, MoveRegionRequest req)
+ throws ServiceException;
+
+ /**
+ * Assign a region to a server chosen at random.
+ * @param controller Unused (set to null).
+ * @param req contains the region to assign. Will use existing RegionPlan if one
+ * found.
+ * @throws ServiceException
+ */
+ @Override
+ public AssignRegionResponse assignRegion(RpcController controller, AssignRegionRequest req)
+ throws ServiceException;
+
+ /**
+ * Unassign a region from current hosting regionserver. Region will then be
+ * assigned to a regionserver chosen at random. Region could be reassigned
+ * back to the same server. Use {@link #moveRegion(RpcController,MoveRegionRequest}
+ * if you want to control the region movement.
+ * @param controller Unused (set to null).
+ * @param req The request that contains:<br>
+ * - region: Region to unassign. Will clear any existing RegionPlan
+ * if one found.<br>
+ * - force: If true, force unassign (Will remove region from
+ * regions-in-transition too if present as well as from assigned regions --
+ * radical!.If results in double assignment use hbck -fix to resolve.
+ * @throws ServiceException
+ */
+ @Override
+ public UnassignRegionResponse unassignRegion(RpcController controller, UnassignRegionRequest req)
+ throws ServiceException;
+
+ /**
+ * Offline a region from the assignment manager's in-memory state. The
+ * region should be in a closed state and there will be no attempt to
+ * automatically reassign the region as in unassign. This is a special
+ * method, and should only be used by experts or hbck.
+ * @param controller Unused (set to null).
+ * @param request OfflineRegionRequest that contains:<br>
+ * - region: Region to offline. Will clear any existing RegionPlan
+ * if one found.
+ * @throws ServiceException
+ */
+ @Override
+ public OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)
+ throws ServiceException;
+
+ /* Table-level */
+
+ /**
+ * Creates a new table asynchronously. If splitKeys are specified, then the
+ * table will be created with an initial set of multiple regions.
+ * If splitKeys is null, the table will be created with a single region.
+ * @param controller Unused (set to null).
+ * @param req CreateTableRequest that contains:<br>
+ * - tablesSchema: table descriptor<br>
+ * - splitKeys
+ * @throws ServiceException
+ */
+ @Override
+ public CreateTableResponse createTable(RpcController controller, CreateTableRequest req)
+ throws ServiceException;
+
+ /**
+ * Deletes a table
+ * @param controller Unused (set to null).
+ * @param req DeleteTableRequest that contains:<br>
+ * - tableName: table to delete
+ * @throws ServiceException
+ */
+ @Override
+ public DeleteTableResponse deleteTable(RpcController controller, DeleteTableRequest req)
+ throws ServiceException;
+
+ /**
+ * Puts the table on-line (only needed if table has been previously taken offline)
+ * @param controller Unused (set to null).
+ * @param req EnableTableRequest that contains:<br>
+ * - tableName: table to enable
+ * @throws ServiceException
+ */
+ @Override
+ public EnableTableResponse enableTable(RpcController controller, EnableTableRequest req)
+ throws ServiceException;
+
+ /**
+ * Take table offline
+ *
+ * @param controller Unused (set to null).
+ * @param req DisableTableRequest that contains:<br>
+ * - tableName: table to take offline
+ * @throws ServiceException
+ */
+ @Override
+ public DisableTableResponse disableTable(RpcController controller, DisableTableRequest req)
+ throws ServiceException;
+
+ /**
+ * Modify a table's metadata
+ *
+ * @param controller Unused (set to null).
+ * @param req ModifyTableRequest that contains:<br>
+ * - tableName: table to modify<br>
+ * - tableSchema: new descriptor for table
+ * @throws ServiceException
+ */
+ @Override
+ public ModifyTableResponse modifyTable(RpcController controller, ModifyTableRequest req)
+ throws ServiceException;
+
+ /* Cluster-level */
+
+ /**
+ * Shutdown an HBase cluster.
+ * @param controller Unused (set to null).
+ * @param request ShutdownRequest
+ * @return ShutdownResponse
+ * @throws ServiceException
+ */
+ @Override
+ public ShutdownResponse shutdown(RpcController controller, ShutdownRequest request)
+ throws ServiceException;
+
+ /**
+ * Stop HBase Master only.
+ * Does not shutdown the cluster.
+ * @param controller Unused (set to null).
+ * @param request StopMasterRequest
+ * @return StopMasterResponse
+ * @throws ServiceException
+ */
+ @Override
+ public StopMasterResponse stopMaster(RpcController controller, StopMasterRequest request)
+ throws ServiceException;
+
+ /**
+ * Run the balancer. Will run the balancer and if regions to move, it will
+ * go ahead and do the reassignments. Can NOT run for various reasons. Check
+ * logs.
+ * @param c Unused (set to null).
+ * @param request BalanceRequest
+ * @return BalanceResponse that contains:<br>
+ * - balancerRan: True if balancer ran and was able to tell the region servers to
+ * unassign all the regions to balance (the re-assignment itself is async),
+ * false otherwise.
+ */
+ @Override
+ public BalanceResponse balance(RpcController c, BalanceRequest request) throws ServiceException;
+
+ /**
+ * Turn the load balancer on or off.
+ * @param controller Unused (set to null).
+ * @param req SetBalancerRunningRequest that contains:<br>
+ * - on: If true, enable balancer. If false, disable balancer.<br>
+ * - synchronous: if true, wait until current balance() call, if outstanding, to return.
+ * @return SetBalancerRunningResponse that contains:<br>
+ * - prevBalanceValue: Previous balancer value
+ * @throws ServiceException
+ */
+ @Override
+ public SetBalancerRunningResponse setBalancerRunning(
+ RpcController controller, SetBalancerRunningRequest req) throws ServiceException;
+
+ /**
+ * @param c Unused (set to null).
+ * @param req IsMasterRunningRequest
+ * @return IsMasterRunningRequest that contains:<br>
+ * isMasterRunning: true if master is available
+ * @throws ServiceException
+ */
+ @Override
+ public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)
+ throws ServiceException;
+}
Added: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterMonitorProtocol.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterMonitorProtocol.java?rev=1356920&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterMonitorProtocol.java (added)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterMonitorProtocol.java Tue Jul 3 20:29:50 2012
@@ -0,0 +1,99 @@
+/**
+ * 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;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.MasterMonitorService;
+import org.apache.hadoop.hbase.security.TokenInfo;
+import org.apache.hadoop.hbase.security.KerberosInfo;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningResponse;
+
+import com.google.protobuf.RpcController;
+import com.google.protobuf.ServiceException;
+
+/**
+ * Protocol that a client uses to communicate with the Master (for monitoring purposes).
+ */
+@KerberosInfo(
+ serverPrincipal = "hbase.master.kerberos.principal")
+@TokenInfo("HBASE_AUTH_TOKEN")
+@InterfaceAudience.Public
+@InterfaceStability.Evolving
+public interface MasterMonitorProtocol extends
+ MasterMonitorService.BlockingInterface, MasterProtocol {
+ public static final long VERSION = 1L;
+
+ /**
+ * Used by the client to get the number of regions that have received the
+ * updated schema
+ *
+ * @param controller Unused (set to null).
+ * @param req GetSchemaAlterStatusRequest that contains:<br>
+ * - tableName
+ * @return GetSchemaAlterStatusResponse indicating the number of regions updated.
+ * yetToUpdateRegions is the regions that are yet to be updated totalRegions
+ * is the total number of regions of the table
+ * @throws ServiceException
+ */
+ @Override
+ public GetSchemaAlterStatusResponse getSchemaAlterStatus(
+ RpcController controller, GetSchemaAlterStatusRequest req) throws ServiceException;
+
+ /**
+ * Get list of TableDescriptors for requested tables.
+ * @param controller Unused (set to null).
+ * @param req GetTableDescriptorsRequest that contains:<br>
+ * - tableNames: requested tables, or if empty, all are requested
+ * @return GetTableDescriptorsResponse
+ * @throws ServiceException
+ */
+ @Override
+ public GetTableDescriptorsResponse getTableDescriptors(
+ RpcController controller, GetTableDescriptorsRequest req) throws ServiceException;
+
+ /**
+ * Return cluster status.
+ * @param controller Unused (set to null).
+ * @param req GetClusterStatusRequest
+ * @return status object
+ * @throws ServiceException
+ */
+ @Override
+ public GetClusterStatusResponse getClusterStatus(RpcController controller, GetClusterStatusRequest req)
+ throws ServiceException;
+
+ /**
+ * @param c Unused (set to null).
+ * @param req IsMasterRunningRequest
+ * @return IsMasterRunningRequest that contains:<br>
+ * isMasterRunning: true if master is available
+ * @throws ServiceException
+ */
+ @Override
+ public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)
+ throws ServiceException;
+}
Added: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterProtocol.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterProtocol.java?rev=1356920&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterProtocol.java (added)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/MasterProtocol.java Tue Jul 3 20:29:50 2012
@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+// Functions implemented by all the master protocols (e.g. MasterAdminProtocol,
+// MasterMonitorProtocol). Currently, this is only isMasterRunning, which is used,
+// on proxy creation, to check if the master has been stopped. If it has,
+// a MasterNotRunningException is thrown back to the client, and the client retries.
+
+package org.apache.hadoop.hbase;
+
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MasterService;
+import org.apache.hadoop.hbase.ipc.VersionedProtocol;
+import com.google.protobuf.RpcController;
+import com.google.protobuf.ServiceException;
+
+public interface MasterProtocol extends VersionedProtocol, MasterService.BlockingInterface {
+
+ /**
+ * @param c Unused (set to null).
+ * @param req IsMasterRunningRequest
+ * @return IsMasterRunningRequest that contains:<br>
+ * isMasterRunning: true if master is available
+ * @throws ServiceException
+ */
+ public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)
+ throws ServiceException;
+}
\ No newline at end of file
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Tue Jul 3 20:29:50 2012
@@ -58,7 +58,6 @@ import org.apache.hadoop.hbase.client.Ad
import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitorBase;
-import org.apache.hadoop.hbase.ipc.HMasterInterface;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.RequestConverter;
import org.apache.hadoop.hbase.protobuf.ResponseConverter;
@@ -75,25 +74,27 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.TableSchema;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AddColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DisableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.EnableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AssignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.UnassignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ShutdownRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ShutdownRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.StopMasterRequest;
+import org.apache.hadoop.hbase.client.MasterAdminKeepAliveConnection;
+import org.apache.hadoop.hbase.client.MasterMonitorKeepAliveConnection;
import org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException;
import org.apache.hadoop.hbase.util.Addressing;
import org.apache.hadoop.hbase.util.Bytes;
@@ -210,22 +211,6 @@ public class HBaseAdmin implements Abort
return connection;
}
- /**
- * Get a connection to the currently set master.
- * @return proxy connection to master server for this instance
- * @throws MasterNotRunningException if the master is not running
- * @throws ZooKeeperConnectionException if unable to connect to zookeeper
- * @deprecated Master is an implementation detail for HBaseAdmin.
- * Deprecated in HBase 0.94
- */
- @Deprecated
- public HMasterInterface getMaster()
- throws MasterNotRunningException, ZooKeeperConnectionException {
- // We take a shared master, but we will never release it,
- // so we will have the same behavior as before.
- return this.connection.getKeepAliveMaster();
- }
-
/** @return - true if the master server is running. Throws an exception
* otherwise.
* @throws ZooKeeperConnectionException
@@ -505,11 +490,11 @@ public class HBaseAdmin implements Abort
}
}
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
CreateTableRequest request = RequestConverter.buildCreateTableRequest(desc, splitKeys);
- master.createTable(null, request);
+ masterAdmin.createTable(null, request);
return null;
}
});
@@ -538,11 +523,11 @@ public class HBaseAdmin implements Abort
HRegionLocation firstMetaServer = getFirstMetaServerForTable(tableName);
boolean tableExists = true;
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
DeleteTableRequest req = RequestConverter.buildDeleteTableRequest(tableName);
- master.deleteTable(null,req);
+ masterAdmin.deleteTable(null,req);
return null;
}
});
@@ -571,7 +556,7 @@ public class HBaseAdmin implements Abort
if (values == null || values.length == 0) {
tableExists = false;
GetTableDescriptorsResponse htds;
- MasterKeepAliveConnection master = connection.getKeepAliveMaster();
+ MasterMonitorKeepAliveConnection master = connection.getKeepAliveMasterMonitor();
try {
GetTableDescriptorsRequest req =
RequestConverter.buildGetTableDescriptorsRequest(null);
@@ -726,12 +711,12 @@ public class HBaseAdmin implements Abort
public void enableTableAsync(final byte [] tableName)
throws IOException {
HTableDescriptor.isLegalTableName(tableName);
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
LOG.info("Started enable of " + Bytes.toString(tableName));
EnableTableRequest req = RequestConverter.buildEnableTableRequest(tableName);
- master.enableTable(null,req);
+ masterAdmin.enableTable(null,req);
return null;
}
});
@@ -797,12 +782,12 @@ public class HBaseAdmin implements Abort
*/
public void disableTableAsync(final byte [] tableName) throws IOException {
HTableDescriptor.isLegalTableName(tableName);
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
LOG.info("Started disable of " + Bytes.toString(tableName));
DisableTableRequest req = RequestConverter.buildDisableTableRequest(tableName);
- master.disableTable(null,req);
+ masterAdmin.disableTable(null,req);
return null;
}
});
@@ -968,12 +953,12 @@ public class HBaseAdmin implements Abort
public Pair<Integer, Integer> getAlterStatus(final byte[] tableName)
throws IOException {
HTableDescriptor.isLegalTableName(tableName);
- return execute(new MasterCallable<Pair<Integer, Integer>>() {
+ return execute(new MasterMonitorCallable<Pair<Integer, Integer>>() {
@Override
public Pair<Integer, Integer> call() throws ServiceException {
GetSchemaAlterStatusRequest req =
RequestConverter.buildGetSchemaAlterStatusRequest(tableName);
- GetSchemaAlterStatusResponse ret = master.getSchemaAlterStatus(null,req);
+ GetSchemaAlterStatusResponse ret = masterMonitor.getSchemaAlterStatus(null,req);
Pair<Integer,Integer> pair =
new Pair<Integer,Integer>(
new Integer(ret.getYetToUpdateRegions()),new Integer(ret.getTotalRegions()));
@@ -1005,11 +990,11 @@ public class HBaseAdmin implements Abort
*/
public void addColumn(final byte [] tableName, final HColumnDescriptor column)
throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
AddColumnRequest req = RequestConverter.buildAddColumnRequest(tableName, column);
- master.addColumn(null,req);
+ masterAdmin.addColumn(null,req);
return null;
}
});
@@ -1038,11 +1023,11 @@ public class HBaseAdmin implements Abort
*/
public void deleteColumn(final byte [] tableName, final byte [] columnName)
throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
DeleteColumnRequest req = RequestConverter.buildDeleteColumnRequest(tableName, columnName);
- master.deleteColumn(null,req);
+ masterAdmin.deleteColumn(null,req);
return null;
}
});
@@ -1073,11 +1058,11 @@ public class HBaseAdmin implements Abort
*/
public void modifyColumn(final byte [] tableName, final HColumnDescriptor descriptor)
throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
ModifyColumnRequest req = RequestConverter.buildModifyColumnRequest(tableName, descriptor);
- master.modifyColumn(null,req);
+ masterAdmin.modifyColumn(null,req);
return null;
}
});
@@ -1392,7 +1377,7 @@ public class HBaseAdmin implements Abort
*/
public void move(final byte [] encodedRegionName, final byte [] destServerName)
throws UnknownRegionException, MasterNotRunningException, ZooKeeperConnectionException {
- MasterKeepAliveConnection master = connection.getKeepAliveMaster();
+ MasterAdminKeepAliveConnection master = connection.getKeepAliveMasterAdmin();
try {
MoveRegionRequest request = RequestConverter.buildMoveRegionRequest(encodedRegionName, destServerName);
master.moveRegion(null,request);
@@ -1419,11 +1404,11 @@ public class HBaseAdmin implements Abort
*/
public void assign(final byte[] regionName) throws MasterNotRunningException,
ZooKeeperConnectionException, IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
AssignRegionRequest request = RequestConverter.buildAssignRegionRequest(regionName);
- master.assignRegion(null,request);
+ masterAdmin.assignRegion(null,request);
return null;
}
});
@@ -1445,12 +1430,12 @@ public class HBaseAdmin implements Abort
*/
public void unassign(final byte [] regionName, final boolean force)
throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
UnassignRegionRequest request =
RequestConverter.buildUnassignRegionRequest(regionName, force);
- master.unassignRegion(null,request);
+ masterAdmin.unassignRegion(null,request);
return null;
}
});
@@ -1461,7 +1446,7 @@ public class HBaseAdmin implements Abort
*/
public void offline(final byte [] regionName)
throws IOException {
- MasterKeepAliveConnection master = connection.getKeepAliveMaster();
+ MasterAdminKeepAliveConnection master = connection.getKeepAliveMasterAdmin();
try {
master.offlineRegion(null,RequestConverter.buildOfflineRegionRequest(regionName));
} catch (ServiceException se) {
@@ -1479,7 +1464,7 @@ public class HBaseAdmin implements Abort
*/
public boolean setBalancerRunning(final boolean on, final boolean synchronous)
throws MasterNotRunningException, ZooKeeperConnectionException {
- MasterKeepAliveConnection master = connection.getKeepAliveMaster();
+ MasterAdminKeepAliveConnection master = connection.getKeepAliveMasterAdmin();
try {
SetBalancerRunningRequest req =
RequestConverter.buildSetBalancerRunningRequest(on, synchronous);
@@ -1509,7 +1494,7 @@ public class HBaseAdmin implements Abort
*/
public boolean balancer()
throws MasterNotRunningException, ZooKeeperConnectionException, ServiceException {
- MasterKeepAliveConnection master = connection.getKeepAliveMaster();
+ MasterAdminKeepAliveConnection master = connection.getKeepAliveMasterAdmin();
try {
return master.balance(null,RequestConverter.buildBalanceRequest()).getBalancerRan();
} finally {
@@ -1611,11 +1596,11 @@ public class HBaseAdmin implements Abort
*/
public void modifyTable(final byte [] tableName, final HTableDescriptor htd)
throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
ModifyTableRequest request = RequestConverter.buildModifyTableRequest(tableName, htd);
- master.modifyTable(null, request);
+ masterAdmin.modifyTable(null, request);
return null;
}
});
@@ -1662,10 +1647,10 @@ public class HBaseAdmin implements Abort
* @throws IOException if a remote or network exception occurs
*/
public synchronized void shutdown() throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
- master.shutdown(null,ShutdownRequest.newBuilder().build());
+ masterAdmin.shutdown(null,ShutdownRequest.newBuilder().build());
return null;
}
});
@@ -1678,10 +1663,10 @@ public class HBaseAdmin implements Abort
* @throws IOException if a remote or network exception occurs
*/
public synchronized void stopMaster() throws IOException {
- execute(new MasterCallable<Void>() {
+ execute(new MasterAdminCallable<Void>() {
@Override
public Void call() throws ServiceException {
- master.stopMaster(null,StopMasterRequest.newBuilder().build());
+ masterAdmin.stopMaster(null,StopMasterRequest.newBuilder().build());
return null;
}
});
@@ -1713,11 +1698,11 @@ public class HBaseAdmin implements Abort
* @throws IOException if a remote or network exception occurs
*/
public ClusterStatus getClusterStatus() throws IOException {
- return execute(new MasterCallable<ClusterStatus>() {
+ return execute(new MasterMonitorCallable<ClusterStatus>() {
@Override
public ClusterStatus call() throws ServiceException {
GetClusterStatusRequest req = RequestConverter.buildGetClusterStatusRequest();
- return ClusterStatus.convert(master.getClusterStatus(null,req).getClusterStatus());
+ return ClusterStatus.convert(masterMonitor.getClusterStatus(null,req).getClusterStatus());
}
});
}
@@ -1779,9 +1764,9 @@ public class HBaseAdmin implements Abort
}
// Check Master, same logic.
- MasterKeepAliveConnection master = null;
+ MasterAdminKeepAliveConnection master = null;
try {
- master = connection.getKeepAliveMaster();
+ master = connection.getKeepAliveMasterAdmin();
master.isMasterRunning(null,RequestConverter.buildIsMasterRunningRequest());
} finally {
if (master != null) {
@@ -1966,19 +1951,51 @@ public class HBaseAdmin implements Abort
}
/**
- * @see {@link #execute}
+ * @see {@link #execute(MasterAdminCallable<V>)}
+ */
+ private abstract static class MasterAdminCallable<V> implements Callable<V>{
+ protected MasterAdminKeepAliveConnection masterAdmin;
+ }
+
+ /**
+ * @see {@link #execute(MasterMonitorCallable<V>)}
+ */
+ private abstract static class MasterMonitorCallable<V> implements Callable<V> {
+ protected MasterMonitorKeepAliveConnection masterMonitor;
+ }
+
+ /**
+ * This method allows to execute a function requiring a connection to
+ * master without having to manage the connection creation/close.
+ * Create a {@link MasterAdminCallable} to use it.
*/
- private abstract static class MasterCallable<V> implements Callable<V>{
- protected MasterKeepAliveConnection master;
+ private <V> V execute(MasterAdminCallable<V> function) throws IOException {
+ function.masterAdmin = connection.getKeepAliveMasterAdmin();
+ try {
+ return executeCallable(function);
+ } finally {
+ function.masterAdmin.close();
+ }
}
/**
* This method allows to execute a function requiring a connection to
* master without having to manage the connection creation/close.
- * Create a {@link MasterCallable} to use it.
+ * Create a {@link MasterAdminCallable} to use it.
+ */
+ private <V> V execute(MasterMonitorCallable<V> function) throws IOException {
+ function.masterMonitor = connection.getKeepAliveMasterMonitor();
+ try {
+ return executeCallable(function);
+ } finally {
+ function.masterMonitor.close();
+ }
+ }
+
+ /**
+ * Helper function called by other execute functions.
*/
- private <V> V execute(MasterCallable<V> function) throws IOException {
- function.master = connection.getKeepAliveMaster();
+ private <V> V executeCallable(Callable<V> function) throws IOException {
try {
return function.call();
} catch (RemoteException re) {
@@ -1990,8 +2007,6 @@ public class HBaseAdmin implements Abort
} catch (Exception e) {
// This should not happen...
throw new IOException("Unexpected exception when calling master", e);
- } finally {
- function.master.close();
}
}
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnection.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnection.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnection.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnection.java Tue Jul 3 20:29:50 2012
@@ -40,7 +40,6 @@ import org.apache.hadoop.hbase.client.Ad
import org.apache.hadoop.hbase.client.ClientProtocol;
import org.apache.hadoop.hbase.client.coprocessor.Batch;
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
-import org.apache.hadoop.hbase.ipc.HMasterInterface;
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
/**
@@ -79,20 +78,6 @@ public interface HConnection extends Abo
@Deprecated
public ZooKeeperWatcher getZooKeeperWatcher() throws IOException;
- /**
- * @return proxy connection to master server for this instance
- * @throws MasterNotRunningException if the master is not running
- * @throws ZooKeeperConnectionException if unable to connect to zookeeper
- * @deprecated Removed because it was a mistake exposing master in this
- * interface (master is an implementation detail). Master functions are
- * available from HConnection or HBaseAdmin, without having to use
- * directly the master.
- * Deprecated in HBase 0.94
- */
- @Deprecated
- public HMasterInterface getMaster()
- throws MasterNotRunningException, ZooKeeperConnectionException;
-
/** @return - true if the master server is running */
public boolean isMasterRunning()
throws MasterNotRunningException, ZooKeeperConnectionException;
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java Tue Jul 3 20:29:50 2012
@@ -65,13 +65,17 @@ import org.apache.hadoop.hbase.client.co
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
import org.apache.hadoop.hbase.ipc.ExecRPCInvoker;
import org.apache.hadoop.hbase.ipc.HBaseRPC;
-import org.apache.hadoop.hbase.ipc.HMasterInterface;
+import org.apache.hadoop.hbase.MasterProtocol;
+import org.apache.hadoop.hbase.MasterMonitorProtocol;
+import org.apache.hadoop.hbase.MasterAdminProtocol;
+import org.apache.hadoop.hbase.client.MasterAdminKeepAliveConnection;
+import org.apache.hadoop.hbase.client.MasterMonitorKeepAliveConnection;
import org.apache.hadoop.hbase.ipc.VersionedProtocol;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.RequestConverter;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.TableSchema;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.util.*;
import org.apache.hadoop.hbase.zookeeper.ZKClusterId;
@@ -523,7 +527,6 @@ public class HConnectionManager {
private final Object masterAndZKLock = new Object();
private long keepZooKeeperWatcherAliveUntil = Long.MAX_VALUE;
- private long keepMasterAliveUntil = Long.MAX_VALUE;
private final DelayedClosing delayedClosing =
DelayedClosing.createAndStart(this);
@@ -657,12 +660,26 @@ public class HConnectionManager {
return this.conf;
}
+ private static class MasterProtocolState {
+ public MasterProtocol protocol;
+ public int userCount;
+ public long keepAliveUntil = Long.MAX_VALUE;
+ public final Class<? extends MasterProtocol> protocolClass;
+ public long version;
+
+ public MasterProtocolState (
+ final Class<? extends MasterProtocol> protocolClass, long version) {
+ this.protocolClass = protocolClass;
+ this.version = version;
+ }
+ }
/**
* Create a new Master proxy. Try once only.
*/
- private HMasterInterface createMasterInterface()
- throws IOException, KeeperException, ServiceException {
+ private MasterProtocol createMasterInterface(
+ MasterProtocolState masterProtocolState)
+ throws IOException, KeeperException, ServiceException {
ZooKeeperKeepAliveConnection zkw;
try {
@@ -685,9 +702,10 @@ public class HConnectionManager {
InetSocketAddress isa =
new InetSocketAddress(sn.getHostname(), sn.getPort());
- HMasterInterface tryMaster = (HMasterInterface) HBaseRPC.getProxy(
- HMasterInterface.class, HMasterInterface.VERSION, isa, this.conf,
- this.rpcTimeout);
+ MasterProtocol tryMaster = (MasterProtocol) HBaseRPC.getProxy(
+ masterProtocolState.protocolClass,
+ masterProtocolState.version,
+ isa, this.conf,this.rpcTimeout);
if (tryMaster.isMasterRunning(
null, RequestConverter.buildIsMasterRunningRequest()).getIsMasterRunning()) {
@@ -703,50 +721,24 @@ public class HConnectionManager {
}
}
-
- /**
- * Get a connection to master. This connection will be reset if master dies.
- * Don't close it, it will be closed with the connection.
- * @deprecated This function is deprecated because it creates a never ending
- * connection to master and hence wastes resources.
- * In the hbase.client package, use {@link #getKeepAliveMaster()} instead.
- *
- * Internally, we're using the shared master as there is no reason to create
- * a new connection. However, in this case, we will never close the shared
- * master.
- */
- @Override
- @Deprecated
- public HMasterInterface getMaster() throws
- MasterNotRunningException, ZooKeeperConnectionException {
- synchronized (this.masterAndZKLock) {
- canCloseMaster = false;
- try {
- return getKeepAliveMaster();
- } catch (MasterNotRunningException e) {
- throw e;
- }
- }
- }
-
/**
* Create a master, retries if necessary.
*/
- private HMasterInterface createMasterWithRetries()
- throws MasterNotRunningException {
+ private MasterProtocol createMasterWithRetries(
+ MasterProtocolState masterProtocolState) throws MasterNotRunningException {
// The lock must be at the beginning to prevent multiple master creation
// (and leaks) in a multithread context
synchronized (this.masterAndZKLock) {
Exception exceptionCaught = null;
- HMasterInterface master = null;
+ MasterProtocol master = null;
int tries = 0;
while (
!this.closed && master == null
) {
tries++;
try {
- master = createMasterInterface();
+ master = createMasterInterface(masterProtocolState);
} catch (IOException e) {
exceptionCaught = e;
} catch (KeeperException e) {
@@ -818,7 +810,7 @@ public class HConnectionManager {
// When getting the master proxy connection, we check it's running,
// so if there is no exception, it means we've been able to get a
// connection on a running master
- getKeepAliveMaster().close();
+ getKeepAliveMasterMonitor().close();
return true;
}
@@ -1471,7 +1463,7 @@ public class HConnectionManager {
/**
* Creates a Chore thread to check the connections to master & zookeeper
* and close them when they reach their closing time (
- * {@link #keepMasterAliveUntil} and
+ * {@link #MasterProtocolState.keepAliveUntil} and
* {@link #keepZooKeeperWatcherAliveUntil}). Keep alive time is
* managed by the release functions and the variable {@link #keepAlive}
*/
@@ -1499,6 +1491,13 @@ public class HConnectionManager {
return new DelayedClosing(hci, stoppable);
}
+ protected void closeMasterProtocol(MasterProtocolState protocolState) {
+ if (System.currentTimeMillis() > protocolState.keepAliveUntil) {
+ hci.closeMasterProtocol(protocolState);
+ protocolState.keepAliveUntil = Long.MAX_VALUE;
+ }
+ }
+
@Override
protected void chore() {
synchronized (hci.masterAndZKLock) {
@@ -1510,12 +1509,8 @@ public class HConnectionManager {
hci.keepZooKeeperWatcherAliveUntil = Long.MAX_VALUE;
}
}
- if (hci.canCloseMaster) {
- if (System.currentTimeMillis() > hci.keepMasterAliveUntil) {
- hci.closeMaster();
- hci.keepMasterAliveUntil = Long.MAX_VALUE;
- }
- }
+ closeMasterProtocol(hci.masterAdminProtocol);
+ closeMasterProtocol(hci.masterMonitorProtocol);
}
}
@@ -1543,14 +1538,14 @@ public class HConnectionManager {
}
}
- private static class MasterHandler implements InvocationHandler {
+ private static class MasterProtocolHandler implements InvocationHandler {
private HConnectionImplementation connection;
- private HMasterInterface master;
+ private MasterProtocolState protocolStateTracker;
- protected MasterHandler(HConnectionImplementation connection,
- HMasterInterface master) {
+ protected MasterProtocolHandler(HConnectionImplementation connection,
+ MasterProtocolState protocolStateTracker) {
this.connection = connection;
- this.master = master;
+ this.protocolStateTracker = protocolStateTracker;
}
@Override
@@ -1558,11 +1553,11 @@ public class HConnectionManager {
throws Throwable {
if (method.getName().equals("close") &&
method.getParameterTypes().length == 0) {
- release(connection, master);
+ release(connection, protocolStateTracker);
return null;
} else {
try {
- return method.invoke(master, args);
+ return method.invoke(protocolStateTracker.protocol, args);
}catch (InvocationTargetException e){
// We will have this for all the exception, checked on not, sent
// by any layer, including the functional exception
@@ -1581,20 +1576,15 @@ public class HConnectionManager {
private void release(
HConnectionImplementation connection,
- org.apache.hadoop.hbase.ipc.HMasterInterface target) {
+ MasterProtocolState target) {
connection.releaseMaster(target);
}
}
- private HMasterInterface keepAliveMaster;
- private int keepAliveMasterUserCount;
-
- // The old interface {@link #getMaster} allows to get a master that's never
- // closed. So if someone uses this interface, we never close the shared
- // master whatever the user count...
- // When closing the connection, we close the master as well, as in the
- // previous implementation.
- private boolean canCloseMaster = true;
+ MasterProtocolState masterAdminProtocol =
+ new MasterProtocolState(MasterAdminProtocol.class, MasterAdminProtocol.VERSION);
+ MasterProtocolState masterMonitorProtocol =
+ new MasterProtocolState(MasterMonitorProtocol.class, MasterMonitorProtocol.VERSION);
/**
* This function allows HBaseAdmin and potentially others
@@ -1603,33 +1593,58 @@ public class HConnectionManager {
* @return The shared instance. Never returns null.
* @throws MasterNotRunningException
*/
- MasterKeepAliveConnection getKeepAliveMaster()
- throws MasterNotRunningException {
+ private Object getKeepAliveMasterProtocol(
+ MasterProtocolState protocolState, Class connectionClass)
+ throws MasterNotRunningException {
synchronized (masterAndZKLock) {
- if (!isKeepAliveMasterConnectedAndRunning()) {
- if (keepAliveMaster != null) {
- HBaseRPC.stopProxy(keepAliveMaster);
- }
- keepAliveMaster = null;
- keepAliveMaster = createMasterWithRetries();
- }
- keepAliveMasterUserCount++;
- keepMasterAliveUntil = Long.MAX_VALUE;
-
- return (MasterKeepAliveConnection) Proxy.newProxyInstance(
- MasterKeepAliveConnection.class.getClassLoader(),
- new Class[]{MasterKeepAliveConnection.class},
- new MasterHandler(this, keepAliveMaster)
+ if (!isKeepAliveMasterConnectedAndRunning(protocolState)) {
+ if (protocolState.protocol != null) {
+ HBaseRPC.stopProxy(protocolState.protocol);
+ }
+ protocolState.protocol = null;
+ protocolState.protocol = createMasterWithRetries(protocolState);
+ }
+ protocolState.userCount++;
+ protocolState.keepAliveUntil = Long.MAX_VALUE;
+
+ return Proxy.newProxyInstance(
+ connectionClass.getClassLoader(),
+ new Class[]{connectionClass},
+ new MasterProtocolHandler(this, protocolState)
);
}
}
- private boolean isKeepAliveMasterConnectedAndRunning(){
- if (keepAliveMaster == null){
+ /**
+ * This function allows HBaseAdmin and potentially others
+ * to get a shared MasterAdminProtocol connection.
+ *
+ * @return The shared instance. Never returns null.
+ * @throws MasterNotRunningException
+ */
+ MasterAdminKeepAliveConnection getKeepAliveMasterAdmin() throws MasterNotRunningException {
+ return (MasterAdminKeepAliveConnection)
+ getKeepAliveMasterProtocol(masterAdminProtocol, MasterAdminKeepAliveConnection.class);
+ }
+
+ /**
+ * This function allows HBaseAdminProtocol and potentially others
+ * to get a shared MasterMonitor connection.
+ *
+ * @return The shared instance. Never returns null.
+ * @throws MasterNotRunningException
+ */
+ MasterMonitorKeepAliveConnection getKeepAliveMasterMonitor() throws MasterNotRunningException {
+ return (MasterMonitorKeepAliveConnection)
+ getKeepAliveMasterProtocol(masterMonitorProtocol, MasterMonitorKeepAliveConnection.class);
+ }
+
+ private boolean isKeepAliveMasterConnectedAndRunning(MasterProtocolState protocolState){
+ if (protocolState.protocol == null){
return false;
}
try {
- return keepAliveMaster.isMasterRunning(
+ return protocolState.protocol.isMasterRunning(
null, RequestConverter.buildIsMasterRunningRequest()).getIsMasterRunning();
}catch (UndeclaredThrowableException e){
// It's somehow messy, but we can receive exceptions such as
@@ -1644,35 +1659,39 @@ public class HConnectionManager {
}
}
- private void releaseMaster(HMasterInterface master) {
- if (master == null){
+ private void releaseMaster(MasterProtocolState protocolState) {
+ if (protocolState.protocol == null){
return;
}
synchronized (masterAndZKLock) {
- --keepAliveMasterUserCount;
- if (keepAliveMasterUserCount <= 0) {
- keepMasterAliveUntil =
+ --protocolState.userCount;
+ if (protocolState.userCount <= 0) {
+ protocolState.keepAliveUntil =
System.currentTimeMillis() + keepAlive;
}
}
}
+ private void closeMasterProtocol(MasterProtocolState protocolState) {
+ if (protocolState.protocol != null){
+ LOG.info("Closing master protocol: " + protocolState.protocolClass.getName());
+ HBaseRPC.stopProxy(protocolState.protocol);
+ protocolState.protocol = null;
+ }
+ protocolState.userCount = 0;
+ }
+
/**
* Immediate close of the shared master. Can be by the delayed close or
* when closing the connection itself.
*/
private void closeMaster() {
synchronized (masterAndZKLock) {
- if (keepAliveMaster != null ){
- LOG.info("Closing master connection");
- HBaseRPC.stopProxy(keepAliveMaster);
- keepAliveMaster = null;
- }
- keepAliveMasterUserCount = 0;
+ closeMasterProtocol(masterAdminProtocol);
+ closeMasterProtocol(masterMonitorProtocol);
}
}
-
@Override
public <T> T getRegionServerWithRetries(ServerCallable<T> callable)
throws IOException, RuntimeException {
@@ -2357,7 +2376,7 @@ public class HConnectionManager {
@Override
public HTableDescriptor[] listTables() throws IOException {
- MasterKeepAliveConnection master = getKeepAliveMaster();
+ MasterMonitorKeepAliveConnection master = getKeepAliveMasterMonitor();
try {
GetTableDescriptorsRequest req =
RequestConverter.buildGetTableDescriptorsRequest(null);
@@ -2372,7 +2391,7 @@ public class HConnectionManager {
@Override
public HTableDescriptor[] getHTableDescriptors(List<String> tableNames) throws IOException {
if (tableNames == null || tableNames.isEmpty()) return new HTableDescriptor[0];
- MasterKeepAliveConnection master = getKeepAliveMaster();
+ MasterMonitorKeepAliveConnection master = getKeepAliveMasterMonitor();
try {
GetTableDescriptorsRequest req =
RequestConverter.buildGetTableDescriptorsRequest(tableNames);
@@ -2401,7 +2420,7 @@ public class HConnectionManager {
if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) {
return HTableDescriptor.META_TABLEDESC;
}
- MasterKeepAliveConnection master = getKeepAliveMaster();
+ MasterMonitorKeepAliveConnection master = getKeepAliveMasterMonitor();
GetTableDescriptorsResponse htds;
try {
GetTableDescriptorsRequest req =
@@ -2441,3 +2460,4 @@ public class HConnectionManager {
log.debug("Set serverside HConnection retries=" + retries);
}
}
+
Added: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterAdminKeepAliveConnection.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterAdminKeepAliveConnection.java?rev=1356920&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterAdminKeepAliveConnection.java (added)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterAdminKeepAliveConnection.java Tue Jul 3 20:29:50 2012
@@ -0,0 +1,44 @@
+/**
+ * Copyright The Apache Software Foundation
+ *
+ * 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 org.apache.hadoop.hbase.MasterAdminProtocol;
+
+import java.io.Closeable;
+
+/**
+ * A KeepAlive connection is not physically closed immediately after the close,
+ * but rather kept alive for a few minutes. It makes sense only if it's shared.
+ *
+ * This interface is used by a dynamic proxy. It allows to have a #close
+ * function in a master client.
+ *
+ * This class is intended to be used internally by HBase classes that need to
+ * speak the MasterAdminProtocol; but not by * final user code. Hence it's
+ * package protected.
+ */
+interface MasterAdminKeepAliveConnection extends MasterAdminProtocol, Closeable {
+
+ @Override
+ public void close();
+}
+
Added: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterMonitorKeepAliveConnection.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterMonitorKeepAliveConnection.java?rev=1356920&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterMonitorKeepAliveConnection.java (added)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/client/MasterMonitorKeepAliveConnection.java Tue Jul 3 20:29:50 2012
@@ -0,0 +1,44 @@
+/**
+ * Copyright The Apache Software Foundation
+ *
+ * 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 org.apache.hadoop.hbase.MasterMonitorProtocol;
+
+import java.io.Closeable;
+
+/**
+ * A KeepAlive connection is not physically closed immediately after the close,
+ * but rather kept alive for a few minutes. It makes sense only if it's shared.
+ *
+ * This interface is used by a dynamic proxy. It allows to have a #close
+ * function in a master client.
+ *
+ * This class is intended to be used internally by HBase classes that need to
+ * speak the MasterMonitorProtocol; but not by final user code. Hence it's
+ * package protected.
+ */
+interface MasterMonitorKeepAliveConnection extends MasterMonitorProtocol, Closeable {
+
+ @Override
+ public void close();
+}
+
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java Tue Jul 3 20:29:50 2012
@@ -122,7 +122,7 @@ public class HbaseObjectWritable impleme
// Here we maintain two static maps of classes to code and vice versa.
// Add new classes+codes as wanted or figure way to auto-generate these
- // maps from the HMasterInterface.
+ // maps.
static final Map<Integer, Class<?>> CODE_TO_CLASS =
new HashMap<Integer, Class<?>>();
static final Map<Class<?>, Integer> CLASS_TO_CODE =
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java Tue Jul 3 20:29:50 2012
@@ -25,6 +25,8 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.ClientProtocol;
+import org.apache.hadoop.hbase.MasterMonitorProtocol;
+import org.apache.hadoop.hbase.MasterAdminProtocol;
import org.apache.hadoop.hbase.ipc.VersionedProtocol;
import org.apache.hadoop.metrics.MetricsContext;
import org.apache.hadoop.metrics.MetricsRecord;
@@ -66,7 +68,8 @@ public class HBaseRpcMetrics implements
context.registerUpdater(this);
- initMethods(HMasterInterface.class);
+ initMethods(MasterMonitorProtocol.class);
+ initMethods(MasterAdminProtocol.class);
initMethods(RegionServerStatusProtocol.class);
initMethods(ClientProtocol.class);
initMethods(AdminProtocol.class);
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/Invocation.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/Invocation.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/Invocation.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/Invocation.java Tue Jul 3 20:29:50 2012
@@ -34,6 +34,8 @@ import org.apache.hadoop.conf.Configurab
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.AdminProtocol;
import org.apache.hadoop.hbase.client.ClientProtocol;
+import org.apache.hadoop.hbase.MasterMonitorProtocol;
+import org.apache.hadoop.hbase.MasterAdminProtocol;
import org.apache.hadoop.hbase.io.HbaseObjectWritable;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
@@ -65,6 +67,8 @@ public class Invocation extends Versione
Long.valueOf(AdminProtocol.VERSION));
PROTOCOL_VERSION.put(RegionServerStatusService.BlockingInterface.class,
Long.valueOf(RegionServerStatusProtocol.VERSION));
+ PROTOCOL_VERSION.put(MasterMonitorProtocol.class,Long.valueOf(MasterMonitorProtocol.VERSION));
+ PROTOCOL_VERSION.put(MasterAdminProtocol.class,Long.valueOf(MasterAdminProtocol.VERSION));
}
// For protobuf protocols, which use ServiceException, instead of IOException
@@ -75,7 +79,8 @@ public class Invocation extends Versione
PROTOBUF_PROTOCOLS.add(ClientProtocol.class);
PROTOBUF_PROTOCOLS.add(AdminProtocol.class);
PROTOBUF_PROTOCOLS.add(RegionServerStatusProtocol.class);
- PROTOBUF_PROTOCOLS.add(HMasterInterface.class);
+ PROTOBUF_PROTOCOLS.add(MasterMonitorProtocol.class);
+ PROTOBUF_PROTOCOLS.add(MasterAdminProtocol.class);
}
private static byte RPC_VERSION = 1;
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Tue Jul 3 20:29:50 2012
@@ -76,7 +76,8 @@ import org.apache.hadoop.hbase.executor.
import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorType;
import org.apache.hadoop.hbase.ipc.HBaseRPC;
import org.apache.hadoop.hbase.ipc.HBaseServer;
-import org.apache.hadoop.hbase.ipc.HMasterInterface;
+import org.apache.hadoop.hbase.MasterMonitorProtocol;
+import org.apache.hadoop.hbase.MasterAdminProtocol;
import org.apache.hadoop.hbase.RegionServerStatusProtocol;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.RequestConverter;
@@ -124,52 +125,52 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
import com.google.protobuf.RpcController;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AddColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AddColumnResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AssignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AssignRegionResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateTableResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteColumnResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteTableResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DisableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DisableTableResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.EnableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.EnableTableResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.OfflineRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.OfflineRegionResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.UnassignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.UnassignRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerReportResponse;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorResponse;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;
import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.BalanceRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.BalanceResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceResponse;
import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ShutdownRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ShutdownResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.StopMasterResponse;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ShutdownRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ShutdownResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.StopMasterRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.StopMasterResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusResponse;
import com.google.protobuf.ServiceException;
/**
@@ -185,13 +186,14 @@ import com.google.protobuf.ServiceExcept
*
* <p>You can also shutdown just this master. Call {@link #stopMaster()}.
*
- * @see HMasterInterface
- * @see MasterRegionInterface
+ * @see MasterMonitorProtocol
+ * @see MasterAdminProtocol
+ * @see RegionServerStatusProtocol
* @see Watcher
*/
@InterfaceAudience.Private
public class HMaster extends HasThread
-implements HMasterInterface, RegionServerStatusProtocol, MasterServices,
+implements MasterMonitorProtocol, MasterAdminProtocol, RegionServerStatusProtocol, MasterServices,
Server {
private static final Log LOG = LogFactory.getLog(HMaster.class.getName());
@@ -315,7 +317,8 @@ Server {
int numHandlers = conf.getInt("hbase.master.handler.count",
conf.getInt("hbase.regionserver.handler.count", 25));
this.rpcServer = HBaseRPC.getServer(this,
- new Class<?>[]{HMasterInterface.class, RegionServerStatusProtocol.class},
+ new Class<?>[]{MasterMonitorProtocol.class,
+ MasterAdminProtocol.class, RegionServerStatusProtocol.class},
initialIsa.getHostName(), // BindAddress is IP we got for this server.
initialIsa.getPort(),
numHandlers,
@@ -893,8 +896,10 @@ Server {
public ProtocolSignature getProtocolSignature(
String protocol, long version, int clientMethodsHashCode)
throws IOException {
- if (HMasterInterface.class.getName().equals(protocol)) {
- return new ProtocolSignature(HMasterInterface.VERSION, null);
+ if (MasterMonitorProtocol.class.getName().equals(protocol)) {
+ return new ProtocolSignature(MasterMonitorProtocol.VERSION, null);
+ } else if (MasterAdminProtocol.class.getName().equals(protocol)) {
+ return new ProtocolSignature(MasterAdminProtocol.VERSION, null);
} else if (RegionServerStatusProtocol.class.getName().equals(protocol)) {
return new ProtocolSignature(RegionServerStatusProtocol.VERSION, null);
}
@@ -902,8 +907,10 @@ Server {
}
public long getProtocolVersion(String protocol, long clientVersion) {
- if (HMasterInterface.class.getName().equals(protocol)) {
- return HMasterInterface.VERSION;
+ if (MasterMonitorProtocol.class.getName().equals(protocol)) {
+ return MasterMonitorProtocol.VERSION;
+ } else if (MasterAdminProtocol.class.getName().equals(protocol)) {
+ return MasterAdminProtocol.VERSION;
} else if (RegionServerStatusProtocol.class.getName().equals(protocol)) {
return RegionServerStatusProtocol.VERSION;
}
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java Tue Jul 3 20:29:50 2012
@@ -106,8 +106,8 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionLoad;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.TableSchema;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsResponse;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsResponse;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java?rev=1356920&r1=1356919&r2=1356920&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java Tue Jul 3 20:29:50 2012
@@ -80,24 +80,24 @@ import org.apache.hadoop.hbase.protobuf.
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.UnlockRowRequest;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AddColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.AssignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DeleteTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.DisableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.EnableTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetSchemaAlterStatusRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetTableDescriptorsRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyColumnRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.ModifyTableRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.MoveRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.OfflineRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.UnassignRegionRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.BalanceRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceRequest;
import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.SetBalancerRunningRequest;
-import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.GetClusterStatusRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningRequest;
+import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusRequest;
import org.apache.hadoop.hbase.regionserver.wal.HLog;
import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;