HBASE-19077 Have Region*CoprocessorEnvironment provide an ImmutableOnlineRegions
Change name of Interface OnlineRegions to MutableOnlineRegions. Change name of Interface ImmutableOnlineRegions to OnlineRegions. Did this since OnlineRegions is for consumer other than internals. Add a getOnlineRegions to the RegionCoprocessorEnvironment and to RegionServerCoprocessorEnvironment so CPs can 'access' local Regions directly.
This commit is contained in:
parent
f6ba8185ea
commit
1b49081ed2
|
@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.ServerName;
|
|||
import org.apache.hadoop.hbase.client.Connection;
|
||||
import org.apache.hadoop.hbase.client.RegionInfo;
|
||||
import org.apache.hadoop.hbase.metrics.MetricRegistry;
|
||||
import org.apache.hadoop.hbase.regionserver.OnlineRegions;
|
||||
import org.apache.hadoop.hbase.regionserver.Region;
|
||||
import org.apache.yetus.audience.InterfaceAudience;
|
||||
import org.apache.yetus.audience.InterfaceStability;
|
||||
|
@ -40,6 +41,11 @@ public interface RegionCoprocessorEnvironment extends CoprocessorEnvironment<Reg
|
|||
/** @return region information for the region this coprocessor is running on */
|
||||
RegionInfo getRegionInfo();
|
||||
|
||||
/**
|
||||
* @return Interface to Map of regions online on this RegionServer {@link #getServerName()}}.
|
||||
*/
|
||||
OnlineRegions getOnlineRegions();
|
||||
|
||||
/** @return shared data between all instances of this coprocessor */
|
||||
ConcurrentMap<String, Object> getSharedData();
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.hadoop.hbase.HBaseInterfaceAudience;
|
|||
import org.apache.hadoop.hbase.ServerName;
|
||||
import org.apache.hadoop.hbase.client.Connection;
|
||||
import org.apache.hadoop.hbase.metrics.MetricRegistry;
|
||||
import org.apache.hadoop.hbase.regionserver.OnlineRegions;
|
||||
import org.apache.yetus.audience.InterfaceAudience;
|
||||
import org.apache.yetus.audience.InterfaceStability;
|
||||
|
||||
|
@ -35,6 +36,11 @@ public interface RegionServerCoprocessorEnvironment
|
|||
*/
|
||||
ServerName getServerName();
|
||||
|
||||
/**
|
||||
* @return Interface to Map of regions online on this RegionServer {@link #getServerName()}}.
|
||||
*/
|
||||
OnlineRegions getOnlineRegions();
|
||||
|
||||
/**
|
||||
* Be careful RPC'ing from a Coprocessor context.
|
||||
* RPC's will fail, stall, retry, and/or crawl because the remote side is not online, is
|
||||
|
|
|
@ -18,43 +18,27 @@
|
|||
*/
|
||||
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.hadoop.hbase.ServerName;
|
||||
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 {
|
||||
@InterfaceAudience.Private
|
||||
public interface MutableOnlineRegions extends OnlineRegions {
|
||||
|
||||
/**
|
||||
* 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 <code>encodedRegionName</code> or
|
||||
* null if named region is not member of the online regions.
|
||||
* Add to online regions.
|
||||
* @param r
|
||||
*/
|
||||
Region getRegion(String encodedRegionName);
|
||||
void addRegion(final HRegion r);
|
||||
|
||||
/**
|
||||
* Get all online regions of a table in this RS.
|
||||
* @param tableName
|
||||
* @return List of Region
|
||||
* @throws java.io.IOException
|
||||
* Removes the given Region from the list of onlineRegions.
|
||||
* @param r Region to remove.
|
||||
* @param destination Destination, if any, null otherwise.
|
||||
* @return True if we removed a region from online list.
|
||||
*/
|
||||
List<? extends Region> getRegions(TableName tableName) throws IOException;
|
||||
|
||||
/**
|
||||
* Get all online regions in this RS.
|
||||
* @return List of online Region
|
||||
*/
|
||||
List<? extends Region> getRegions();
|
||||
boolean removeRegion(final HRegion r, ServerName destination);
|
||||
}
|
|
@ -18,28 +18,43 @@
|
|||
*/
|
||||
package org.apache.hadoop.hbase.regionserver;
|
||||
|
||||
import org.apache.hadoop.hbase.ServerName;
|
||||
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.
|
||||
* Provides read-only access to the Regions presently online on the
|
||||
* current RegionServer
|
||||
*/
|
||||
@InterfaceAudience.Private
|
||||
public interface OnlineRegions extends ImmutableOnlineRegions {
|
||||
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)
|
||||
@InterfaceStability.Evolving
|
||||
public interface OnlineRegions {
|
||||
|
||||
/**
|
||||
* Add to online regions.
|
||||
* @param r
|
||||
* 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 <code>encodedRegionName</code> or
|
||||
* null if named region is not member of the online regions.
|
||||
*/
|
||||
void addRegion(final HRegion r);
|
||||
Region getRegion(String encodedRegionName);
|
||||
|
||||
/**
|
||||
* This method removes Region corresponding to hri from the Map of onlineRegions.
|
||||
*
|
||||
* @param r Region to remove.
|
||||
* @param destination Destination, if any, null otherwise.
|
||||
* @return True if we removed a region from online list.
|
||||
* Get all online regions of a table in this RS.
|
||||
* @param tableName
|
||||
* @return List of Region
|
||||
* @throws java.io.IOException
|
||||
*/
|
||||
boolean removeRegion(final HRegion r, ServerName destination);
|
||||
List<? extends Region> getRegions(TableName tableName) throws IOException;
|
||||
|
||||
/**
|
||||
* Get all online regions in this RS.
|
||||
* @return List of online Region
|
||||
*/
|
||||
List<? extends Region> getRegions();
|
||||
}
|
||||
|
|
|
@ -117,6 +117,7 @@ public class RegionCoprocessorHost
|
|||
private final MetricRegistry metricRegistry;
|
||||
private final Connection connection;
|
||||
private final ServerName serverName;
|
||||
private final OnlineRegions onlineRegions;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -132,6 +133,7 @@ public class RegionCoprocessorHost
|
|||
this.connection = services != null? services.getConnection(): null;
|
||||
this.serverName = services != null? services.getServerName(): null;
|
||||
this.sharedData = sharedData;
|
||||
this.onlineRegions = services;
|
||||
this.metricRegistry =
|
||||
MetricsCoprocessor.createRegistryForRegionCoprocessor(impl.getClass().getName());
|
||||
}
|
||||
|
@ -142,6 +144,10 @@ public class RegionCoprocessorHost
|
|||
return region;
|
||||
}
|
||||
|
||||
public OnlineRegions getOnlineRegions() {
|
||||
return this.onlineRegions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Connection getConnection() {
|
||||
return this.connection;
|
||||
|
|
|
@ -206,6 +206,7 @@ public class RegionServerCoprocessorHost extends
|
|||
private final MetricRegistry metricRegistry;
|
||||
private final Connection connection;
|
||||
private final ServerName serverName;
|
||||
private final OnlineRegions onlineRegions;
|
||||
|
||||
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="BC_UNCONFIRMED_CAST",
|
||||
justification="Intentional; FB has trouble detecting isAssignableFrom")
|
||||
|
@ -216,12 +217,18 @@ public class RegionServerCoprocessorHost extends
|
|||
for (Service service : impl.getServices()) {
|
||||
services.registerService(service);
|
||||
}
|
||||
this.onlineRegions = services;
|
||||
this.connection = services.getConnection();
|
||||
this.serverName = services.getServerName();
|
||||
this.metricRegistry =
|
||||
MetricsCoprocessor.createRegistryForRSCoprocessor(impl.getClass().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineRegions getOnlineRegions() {
|
||||
return this.onlineRegions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerName getServerName() {
|
||||
return this.serverName;
|
||||
|
|
|
@ -48,7 +48,7 @@ import com.google.protobuf.Service;
|
|||
* the code base.
|
||||
*/
|
||||
@InterfaceAudience.Private
|
||||
public interface RegionServerServices extends Server, OnlineRegions, FavoredNodesForRegion {
|
||||
public interface RegionServerServices extends Server, MutableOnlineRegions, FavoredNodesForRegion {
|
||||
|
||||
/** @return the WAL for a particular region. Pass null for getting the
|
||||
* default (common) WAL */
|
||||
|
|
|
@ -121,7 +121,7 @@ public class OpenRegionHandler extends EventHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
// Successful region open, and add it to OnlineRegions
|
||||
// Successful region open, and add it to MutableOnlineRegions
|
||||
this.rsServices.addRegion(region);
|
||||
openSuccessful = true;
|
||||
|
||||
|
|
|
@ -59,6 +59,7 @@ 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.HRegion;
|
||||
import org.apache.hadoop.hbase.regionserver.OnlineRegions;
|
||||
import org.apache.hadoop.hbase.regionserver.RegionServerServices;
|
||||
import org.apache.hadoop.hbase.security.SecurityInfo;
|
||||
import org.apache.hadoop.hbase.security.User;
|
||||
|
@ -272,6 +273,11 @@ public class TestTokenAuthentication {
|
|||
@Override
|
||||
public HRegion getRegion() { return null; }
|
||||
|
||||
@Override
|
||||
public OnlineRegions getOnlineRegions() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startup() throws IOException {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue