diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/Abortable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/Abortable.java index c2785a0..8233071 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/Abortable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/Abortable.java @@ -19,7 +19,6 @@ package org.apache.hadoop.hbase; import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; /** * Interface to support the aborting of a given server or client. @@ -29,8 +28,7 @@ import org.apache.yetus.audience.InterfaceStability; *

* Implemented by the Master, RegionServer, and TableServers (client). */ -@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC, HBaseInterfaceAudience.PHOENIX}) -@InterfaceStability.Evolving +@InterfaceAudience.Private public interface Abortable { /** * Abort the server or client. diff --git a/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java b/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java index f24583d..54956d6 100644 --- a/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java +++ b/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java @@ -42,6 +42,7 @@ import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.Re import org.apache.hadoop.hbase.protobuf.generated.SecureBulkLoadProtos.SecureBulkLoadHFilesRequest; import org.apache.hadoop.hbase.protobuf.generated.SecureBulkLoadProtos.SecureBulkLoadHFilesResponse; import org.apache.hadoop.hbase.protobuf.generated.SecureBulkLoadProtos.SecureBulkLoadService; +import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager; import com.google.protobuf.RpcCallback; @@ -62,10 +63,13 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService private static final Log LOG = LogFactory.getLog(SecureBulkLoadEndpoint.class); private RegionCoprocessorEnvironment env; + private RegionServerServices rsServices; @Override public void start(CoprocessorEnvironment env) { this.env = (RegionCoprocessorEnvironment)env; + assert this.env.getCoprocessorRegionServerServices() instanceof RegionServerServices; + rsServices = (RegionServerServices) this.env.getCoprocessorRegionServerServices(); LOG.warn("SecureBulkLoadEndpoint is deprecated. It will be removed in future releases."); LOG.warn("Secure bulk load has been integrated into HBase core."); } @@ -78,8 +82,7 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService public void prepareBulkLoad(RpcController controller, PrepareBulkLoadRequest request, RpcCallback done) { try { - SecureBulkLoadManager secureBulkLoadManager = - this.env.getRegionServerServices().getSecureBulkLoadManager(); + SecureBulkLoadManager secureBulkLoadManager = this.rsServices.getSecureBulkLoadManager(); String bulkToken = secureBulkLoadManager.prepareBulkLoad(this.env.getRegion(), convert(request)); done.run(PrepareBulkLoadResponse.newBuilder().setBulkToken(bulkToken).build()); @@ -105,8 +108,7 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService public void cleanupBulkLoad(RpcController controller, CleanupBulkLoadRequest request, RpcCallback done) { try { - SecureBulkLoadManager secureBulkLoadManager = - this.env.getRegionServerServices().getSecureBulkLoadManager(); + SecureBulkLoadManager secureBulkLoadManager = this.rsServices.getSecureBulkLoadManager(); secureBulkLoadManager.cleanupBulkLoad(this.env.getRegion(), convert(request)); done.run(CleanupBulkLoadResponse.newBuilder().build()); } catch (IOException e) { @@ -133,8 +135,7 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService boolean loaded = false; Map> map = null; try { - SecureBulkLoadManager secureBulkLoadManager = - this.env.getRegionServerServices().getSecureBulkLoadManager(); + SecureBulkLoadManager secureBulkLoadManager = this.rsServices.getSecureBulkLoadManager(); BulkLoadHFileRequest bulkLoadHFileRequest = ConvertSecureBulkLoadHFilesRequest(request); map = secureBulkLoadManager.secureBulkLoadHFiles(this.env.getRegion(), convert(bulkLoadHFileRequest)); diff --git a/hbase-examples/src/main/java/org/apache/hadoop/hbase/coprocessor/example/ZooKeeperScanPolicyObserver.java b/hbase-examples/src/main/java/org/apache/hadoop/hbase/coprocessor/example/ZooKeeperScanPolicyObserver.java index 6b31664..62b8d9d 100644 --- a/hbase-examples/src/main/java/org/apache/hadoop/hbase/coprocessor/example/ZooKeeperScanPolicyObserver.java +++ b/hbase-examples/src/main/java/org/apache/hadoop/hbase/coprocessor/example/ZooKeeperScanPolicyObserver.java @@ -40,7 +40,6 @@ import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.regionserver.Store; import org.apache.hadoop.hbase.regionserver.StoreScanner; import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker; -import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.zookeeper.KeeperException; @@ -66,6 +65,11 @@ import org.apache.zookeeper.ZooKeeper; * listeners registered with ZooKeeperWatcher cannot be removed. */ public class ZooKeeperScanPolicyObserver implements RegionObserver { + // The zk ensemble info is put in hbase config xml with given custom key. + public static final String ZK_ENSEMBLE_KEY = "ZooKeeperScanPolicyObserver.zookeeper.ensemble"; + public static final String ZK_SESSION_TIMEOUT_KEY = + "ZooKeeperScanPolicyObserver.zookeeper.session.timeout"; + public static final int ZK_SESSION_TIMEOUT_DEFAULT = 30 * 1000; // 30 secs public static final String node = "/backup/example/lastbackup"; public static final String zkkey = "ZK"; private static final Log LOG = LogFactory.getLog(ZooKeeperScanPolicyObserver.class); @@ -166,10 +170,11 @@ public class ZooKeeperScanPolicyObserver implements RegionObserver { if (!re.getSharedData().containsKey(zkkey)) { // there is a short race here // in the worst case we create a watcher that will be notified once - re.getSharedData().putIfAbsent( - zkkey, - new ZKWatcher(re.getRegionServerServices().getZooKeeper() - .getRecoverableZooKeeper().getZooKeeper())); + String ensemble = re.getConfiguration().get(ZK_ENSEMBLE_KEY); + int sessionTimeout = re.getConfiguration().getInt(ZK_SESSION_TIMEOUT_KEY, + ZK_SESSION_TIMEOUT_DEFAULT); + ZooKeeper zk = new ZooKeeper(ensemble, sessionTimeout, null); + re.getSharedData().putIfAbsent(zkkey, new ZKWatcher(zk)); } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java index d6492eb..f9cb3be 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java @@ -19,19 +19,17 @@ package org.apache.hadoop.hbase; import org.apache.hadoop.conf.Configuration; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; +import org.apache.yetus.audience.InterfaceAudience; /** * Defines the set of shared functions implemented by HBase servers (Masters * and RegionServers). */ -@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) -@InterfaceStability.Evolving +@InterfaceAudience.Private public interface Server extends Abortable, Stoppable { /** * Gets the configuration object for this server. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java index 519d5f0..c87c56e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/CoprocessorHConnection.java @@ -25,8 +25,8 @@ import org.apache.hadoop.hbase.ServerName; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; +import org.apache.hadoop.hbase.regionserver.CoprocessorRegionServerServices; import org.apache.hadoop.hbase.regionserver.HRegionServer; -import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.security.UserProvider; /** @@ -54,7 +54,7 @@ public class CoprocessorHConnection extends ConnectionImplementation { // this bit is a little hacky - just trying to get it going for the moment if (env instanceof RegionCoprocessorEnvironment) { RegionCoprocessorEnvironment e = (RegionCoprocessorEnvironment) env; - RegionServerServices services = e.getRegionServerServices(); + CoprocessorRegionServerServices services = e.getCoprocessorRegionServerServices(); if (services instanceof HRegionServer) { return new CoprocessorHConnection((HRegionServer) services); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.java index 2a3d62c..dceb3d4 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.java @@ -25,8 +25,8 @@ import org.apache.hadoop.hbase.CoprocessorEnvironment; import org.apache.hadoop.hbase.HBaseInterfaceAudience; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.metrics.MetricRegistry; +import org.apache.hadoop.hbase.regionserver.CoprocessorRegionServerServices; import org.apache.hadoop.hbase.regionserver.Region; -import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; @@ -40,7 +40,7 @@ public interface RegionCoprocessorEnvironment extends CoprocessorEnvironment { RegionInfo getRegionInfo(); /** @return reference to the region server services */ - RegionServerServices getRegionServerServices(); + CoprocessorRegionServerServices getCoprocessorRegionServerServices(); /** @return shared data between all instances of this coprocessor */ ConcurrentMap getSharedData(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessorEnvironment.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessorEnvironment.java index f42556a..da3189f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessorEnvironment.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessorEnvironment.java @@ -19,16 +19,21 @@ package org.apache.hadoop.hbase.coprocessor; import org.apache.hadoop.hbase.CoprocessorEnvironment; +import org.apache.hadoop.hbase.HBaseInterfaceAudience; import org.apache.hadoop.hbase.metrics.MetricRegistry; -import org.apache.hadoop.hbase.regionserver.RegionServerServices; +import org.apache.hadoop.hbase.regionserver.CoprocessorRegionServerServices; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; +@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) +@InterfaceStability.Evolving public interface RegionServerCoprocessorEnvironment extends CoprocessorEnvironment { /** * Gets the region server services. * * @return the region server services */ - RegionServerServices getRegionServerServices(); + CoprocessorRegionServerServices getCoprocessorRegionServerServices(); /** * Returns a MetricRegistry that can be used to track metrics at the region server level. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CoprocessorRegionServerServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CoprocessorRegionServerServices.java new file mode 100644 index 0000000..3d70793 --- /dev/null +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CoprocessorRegionServerServices.java @@ -0,0 +1,64 @@ +/** + * 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.regionserver; + +import java.util.Set; + +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.hbase.HBaseInterfaceAudience; +import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.Connection; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; + +/** + * Services exposed to CPs by {@link HRegionServer} + */ +@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) +@InterfaceStability.Evolving +public interface CoprocessorRegionServerServices extends ImmutableOnlineRegions { + + /** + * @return True if this regionserver is stopping. + */ + boolean isStopping(); + + /** + * @return Return the FileSystem object used by the regionserver + */ + FileSystem getFileSystem(); + + /** + * @return all the online tables in this RS + */ + Set getOnlineTables(); + + /** + * Returns a reference to the servers' connection. + * + * Important note: this method returns a reference to Connection which is managed + * by Server itself, so callers must NOT attempt to close connection obtained. + */ + Connection getConnection(); + + /** + * @return The unique server name for this server. + */ + ServerName getServerName(); +} \ No newline at end of file diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java index 72e0383..e34a9d0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java @@ -19,19 +19,16 @@ package org.apache.hadoop.hbase.regionserver; import java.net.InetSocketAddress; -import java.util.List; +import java.util.List; -import org.apache.hadoop.hbase.HBaseInterfaceAudience; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName; +import org.apache.yetus.audience.InterfaceAudience; /** * Abstraction that allows different modules in RegionServer to update/get * the favored nodes information for regions. */ -@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) -@InterfaceStability.Evolving +@InterfaceAudience.Private public interface FavoredNodesForRegion { /** * Used to update the favored nodes mapping when required. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ImmutableOnlineRegions.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ImmutableOnlineRegions.java new file mode 100644 index 0000000..c9c7848 --- /dev/null +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ImmutableOnlineRegions.java @@ -0,0 +1,60 @@ +/** + * + * 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.regionserver; + +import java.io.IOException; +import java.util.List; + +import org.apache.hadoop.hbase.HBaseInterfaceAudience; +import org.apache.hadoop.hbase.TableName; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; + +/** + * Interface to Map of online regions. In the Map, the key is the region's + * encoded name and the value is an {@link Region} instance. + */ +@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) +@InterfaceStability.Evolving +public interface ImmutableOnlineRegions { + + /** + * Return {@link Region} instance. + * Only works if caller is in same context, in same JVM. Region is not + * serializable. + * @param encodedRegionName + * @return Region for the passed encoded encodedRegionName or + * null if named region is not member of the online regions. + */ + Region getFromOnlineRegions(String encodedRegionName); + + /** + * Get all online regions of a table in this RS. + * @param tableName + * @return List of Region + * @throws java.io.IOException + */ + List getOnlineRegions(TableName tableName) throws IOException; + + /** + * Get all online regions in this RS. + * @return List of online Region + */ + List getOnlineRegions(); +} diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OnlineRegions.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OnlineRegions.java index 40a3088..ebb986d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OnlineRegions.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OnlineRegions.java @@ -18,23 +18,16 @@ */ package org.apache.hadoop.hbase.regionserver; -import java.io.IOException; -import java.util.List; - -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; -import org.apache.hadoop.hbase.HBaseInterfaceAudience; -import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.yetus.audience.InterfaceAudience; /** * Interface to Map of online regions. In the Map, the key is the region's * encoded name and the value is an {@link Region} instance. */ -@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) -@InterfaceStability.Evolving -public interface OnlineRegions extends Server { +@InterfaceAudience.Private +public interface OnlineRegions extends ImmutableOnlineRegions { + /** * Add to online regions. * @param r @@ -49,28 +42,4 @@ public interface OnlineRegions extends Server { * @return True if we removed a region from online list. */ boolean removeFromOnlineRegions(final Region r, ServerName destination); - - /** - * Return {@link Region} instance. - * Only works if caller is in same context, in same JVM. Region is not - * serializable. - * @param encodedRegionName - * @return Region for the passed encoded encodedRegionName or - * null if named region is not member of the online regions. - */ - Region getFromOnlineRegions(String encodedRegionName); - - /** - * Get all online regions of a table in this RS. - * @param tableName - * @return List of Region - * @throws java.io.IOException - */ - List getOnlineRegions(TableName tableName) throws IOException; - - /** - * Get all online regions in this RS. - * @return List of online Region - */ - List getOnlineRegions(); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java index 044c4dc..25d8a34 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java @@ -138,7 +138,7 @@ public class RegionCoprocessorHost /** @return reference to the region server services */ @Override - public RegionServerServices getRegionServerServices() { + public CoprocessorRegionServerServices getCoprocessorRegionServerServices() { return rsServices; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java index 563e4a7..e324894 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java @@ -311,7 +311,7 @@ public class RegionServerCoprocessorHost extends } @Override - public RegionServerServices getRegionServerServices() { + public CoprocessorRegionServerServices getCoprocessorRegionServerServices() { return regionServerServices; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java index 209fce8..1d31d5a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java @@ -21,24 +21,21 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentMap; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hbase.Abortable; -import org.apache.hadoop.hbase.HBaseInterfaceAudience; import org.apache.hadoop.hbase.HRegionInfo; -import org.apache.hadoop.hbase.TableName; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; +import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.client.locking.EntityLock; import org.apache.hadoop.hbase.executor.ExecutorService; import org.apache.hadoop.hbase.ipc.RpcServerInterface; -import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController; +import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.wal.WAL; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; import com.google.protobuf.Service; @@ -46,13 +43,9 @@ import com.google.protobuf.Service; /** * Services provided by {@link HRegionServer} */ -@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) -@InterfaceStability.Evolving -public interface RegionServerServices extends OnlineRegions, FavoredNodesForRegion { - /** - * @return True if this regionserver is stopping. - */ - boolean isStopping(); +@InterfaceAudience.Private +public interface RegionServerServices + extends Server, OnlineRegions, FavoredNodesForRegion, CoprocessorRegionServerServices { /** @return the WAL for a particular region. Pass null for getting the * default (common) WAL */ @@ -189,11 +182,6 @@ public interface RegionServerServices extends OnlineRegions, FavoredNodesForRegi ConcurrentMap getRegionsInTransitionInRS(); /** - * @return Return the FileSystem object used by the regionserver - */ - FileSystem getFileSystem(); - - /** * @return The RegionServer's "Leases" service */ Leases getLeases(); @@ -215,12 +203,6 @@ public interface RegionServerServices extends OnlineRegions, FavoredNodesForRegi public ServerNonceManager getNonceManager(); /** - * @return all the online tables in this RS - */ - Set getOnlineTables(); - - - /** * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to be * available for handling * @param service the {@code Service} subclass instance to expose as a coprocessor endpoint diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java index d0d6181..fdb951b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java @@ -55,7 +55,7 @@ public class ReplicationObserver implements RegionObserver { + "data replication."); return; } - HRegionServer rs = (HRegionServer) env.getRegionServerServices(); + HRegionServer rs = (HRegionServer) env.getCoprocessorRegionServerServices(); Replication rep = (Replication) rs.getReplicationSourceService(); rep.addHFileRefsToQueue(env.getRegionInfo().getTable(), family, pairs); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java index e9bed7e..58a4d3a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java @@ -102,6 +102,7 @@ import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress; import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.RegionScanner; +import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.regionserver.ScanType; import org.apache.hadoop.hbase.regionserver.ScannerContext; import org.apache.hadoop.hbase.regionserver.Store; @@ -950,12 +951,14 @@ public class AccessController implements MasterObserver, RegionObserver, RegionS zk = mEnv.getMasterServices().getZooKeeper(); } else if (env instanceof RegionServerCoprocessorEnvironment) { RegionServerCoprocessorEnvironment rsEnv = (RegionServerCoprocessorEnvironment) env; - zk = rsEnv.getRegionServerServices().getZooKeeper(); + assert rsEnv.getCoprocessorRegionServerServices() instanceof RegionServerServices; + zk = ((RegionServerServices) rsEnv.getCoprocessorRegionServerServices()).getZooKeeper(); } else if (env instanceof RegionCoprocessorEnvironment) { // if running at region regionEnv = (RegionCoprocessorEnvironment) env; conf.addBytesMap(regionEnv.getRegion().getTableDescriptor().getValues()); - zk = regionEnv.getRegionServerServices().getZooKeeper(); + assert regionEnv.getCoprocessorRegionServerServices() instanceof RegionServerServices; + zk = ((RegionServerServices) regionEnv.getCoprocessorRegionServerServices()).getZooKeeper(); compatibleEarlyTermination = conf.getBoolean(AccessControlConstants.CF_ATTRIBUTE_EARLY_OUT, AccessControlConstants.DEFAULT_ATTRIBUTE_EARLY_OUT); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/TokenProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/TokenProvider.java index 9d46085..50b8765 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/TokenProvider.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/TokenProvider.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils; import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.ipc.RpcServerInterface; import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos; +import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.security.AccessDeniedException; import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.security.UserGroupInformation; @@ -61,7 +62,9 @@ public class TokenProvider implements AuthenticationProtos.AuthenticationService if (env instanceof RegionCoprocessorEnvironment) { RegionCoprocessorEnvironment regionEnv = (RegionCoprocessorEnvironment)env; - RpcServerInterface server = regionEnv.getRegionServerServices().getRpcServer(); + assert regionEnv.getCoprocessorRegionServerServices() instanceof RegionServerServices; + RpcServerInterface server = ((RegionServerServices) regionEnv + .getCoprocessorRegionServerServices()).getRpcServer(); SecretManager mgr = ((RpcServer)server).getSecretManager(); if (mgr instanceof AuthenticationTokenSecretManager) { secretManager = (AuthenticationTokenSecretManager)mgr; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java index 8e19a64..26620c1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java @@ -62,6 +62,7 @@ import org.apache.hadoop.hbase.io.util.StreamUtils; import org.apache.hadoop.hbase.regionserver.OperationStatus; import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.RegionScanner; +import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.security.Superusers; import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.util.Bytes; @@ -111,7 +112,9 @@ public class DefaultVisibilityLabelServiceImpl implements VisibilityLabelService @Override public void init(RegionCoprocessorEnvironment e) throws IOException { - ZooKeeperWatcher zk = e.getRegionServerServices().getZooKeeper(); + assert e.getCoprocessorRegionServerServices() instanceof RegionServerServices; + ZooKeeperWatcher zk = ((RegionServerServices) e.getCoprocessorRegionServerServices()) + .getZooKeeper(); try { labelsCache = VisibilityLabelsCache.createAndGet(zk, this.conf); } catch (IOException ioe) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicaWithCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicaWithCluster.java index 7661ed4..264c646 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicaWithCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicaWithCluster.java @@ -134,7 +134,7 @@ public class TestReplicaWithCluster { if (e.getEnvironment().getRegion().getRegionInfo().getReplicaId() <= 1) { LOG.info("Throw Region Server Stopped Exceptoin for replica id " + replicaId); throw new RegionServerStoppedException("Server " + - e.getEnvironment().getRegionServerServices().getServerName() + e.getEnvironment().getCoprocessorRegionServerServices().getServerName() + " not running"); } else { LOG.info("We're replica region " + replicaId); @@ -151,7 +151,7 @@ public class TestReplicaWithCluster { if (e.getEnvironment().getRegion().getRegionInfo().getReplicaId() <= 1) { LOG.info("Throw Region Server Stopped Exceptoin for replica id " + replicaId); throw new RegionServerStoppedException("Server " + - e.getEnvironment().getRegionServerServices().getServerName() + e.getEnvironment().getCoprocessorRegionServerServices().getServerName() + " not running"); } else { LOG.info("We're replica region " + replicaId); @@ -179,8 +179,9 @@ public class TestReplicaWithCluster { if (!e.getEnvironment().getRegion().getRegionInfo().isMetaRegion() && (replicaId == 0)) { LOG.info("Get, throw Region Server Stopped Exceptoin for region " + e.getEnvironment() .getRegion().getRegionInfo()); - throw new RegionServerStoppedException("Server " + - e.getEnvironment().getRegionServerServices().getServerName() + " not running"); + throw new RegionServerStoppedException( + "Server " + e.getEnvironment().getCoprocessorRegionServerServices().getServerName() + + " not running"); } } else { LOG.info("Get, We're replica region " + replicaId); @@ -209,8 +210,9 @@ public class TestReplicaWithCluster { LOG.info("Scan, throw Region Server Stopped Exceptoin for replica " + e.getEnvironment() .getRegion().getRegionInfo()); - throw new RegionServerStoppedException("Server " + - e.getEnvironment().getRegionServerServices().getServerName() + " not running"); + throw new RegionServerStoppedException( + "Server " + e.getEnvironment().getCoprocessorRegionServerServices().getServerName() + + " not running"); } else { LOG.info("Scan, We're replica region " + replicaId); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java index 9938c18..970a545 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java @@ -48,7 +48,6 @@ import org.apache.hadoop.hbase.io.Reference; import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.KeyValueScanner; -import org.apache.hadoop.hbase.regionserver.Leases; import org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress; import org.apache.hadoop.hbase.regionserver.Region.Operation; import org.apache.hadoop.hbase.regionserver.RegionScanner; @@ -136,12 +135,6 @@ public class SimpleRegionObserver implements RegionObserver { @Override public void start(CoprocessorEnvironment e) throws IOException { - // this only makes sure that leases and locks are available to coprocessors - // from external packages - RegionCoprocessorEnvironment re = (RegionCoprocessorEnvironment)e; - Leases leases = re.getRegionServerServices().getLeases(); - leases.createLease(re.getRegion().getRegionInfo().getRegionNameAsString(), 2000, null); - leases.cancelLease(re.getRegion().getRegionInfo().getRegionNameAsString()); } @Override diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java index 8b4afac..9928a77 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java @@ -168,7 +168,7 @@ public class TestRegionServerAbort { public void prePut(ObserverContext c, Put put, WALEdit edit, Durability durability) throws IOException { if (put.getAttribute(DO_ABORT) != null) { - HRegionServer rs = (HRegionServer) c.getEnvironment().getRegionServerServices(); + HRegionServer rs = (HRegionServer) c.getEnvironment().getCoprocessorRegionServerServices(); LOG.info("Triggering abort for regionserver " + rs.getServerName()); rs.abort("Aborting for test"); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java index 012236c..780a8e0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java @@ -60,6 +60,7 @@ import org.apache.hadoop.hbase.ipc.ServerRpcController; import org.apache.hadoop.hbase.ipc.SimpleRpcServer; import org.apache.hadoop.hbase.metrics.MetricRegistry; import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos; +import org.apache.hadoop.hbase.regionserver.CoprocessorRegionServerServices; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.security.SecurityInfo; @@ -265,7 +266,7 @@ public class TestTokenAuthentication { public HRegion getRegion() { return null; } @Override - public RegionServerServices getRegionServerServices() { + public CoprocessorRegionServerServices getCoprocessorRegionServerServices() { return mockServices; } diff --git a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java index fcd80d0..b988a58 100644 --- a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java +++ b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java @@ -62,7 +62,7 @@ public class ErrorThrowingGetObserver implements RegionObserver { throw new NotServingRegionException("Failing for test"); case REGION_MOVED: throw new RegionMovedException( - e.getEnvironment().getRegionServerServices().getServerName(), 1); + e.getEnvironment().getCoprocessorRegionServerServices().getServerName(), 1); case SCANNER_RESET: throw new ScannerResetException("Failing for test"); case UNKNOWN_SCANNER: