@InterfaceAudience.Private public class MetaBrowser extends Object
Support class for the "Meta Entries" section in resources/hbase-webapps/master/table.jsp
.
Interface. This class's intended consumer is table.jsp
. As such, it's primary
interface is the active HttpServletRequest
, from which it uses the scan_*
request
parameters. This class supports paging through an optionally filtered view of the contents of
hbase:meta
. Those filters and the pagination offset are specified via these request
parameters. It provides helper methods for constructing pagination links.
hbase:meta
; any other value is effectively ignored by the giant conditional in the
jsp.RegionReplicaInfo
objects produced by MetaBrowser.Results.iterator()
. When a value for
scan_limit
is invalid or not specified, the default value of 10
is used. In order to avoid excessive resource consumption, a maximum value of
10000 is enforced.RegionState
.Scan
, so in effect it can be used for simple namespace and multi-table matches.
Pagination. A single page of results are made available via getResults()
/ an
instance of MetaBrowser.Results
. Callers use its Iterator
consume the page of
RegionReplicaInfo
instances, each of which represents a region or region replica. Helper
methods are provided for building page navigation controls preserving the user's selected filter
set: buildFirstPageUrl()
, buildNextPageUrl(byte[])
. Pagination is implemented
using a simple offset + limit system. Offset is provided by the "scan_start", limit
via "scan_limit". Under the hood, the Scan
is constructed with
Scan.setMaxResultSize(long)
set to ("scan_limit" +1), while the
MetaBrowser.Results
Iterator
honors "scan_limit". The +1 allows the caller to
know if a "next page" is available via MetaBrowser.Results.hasMoreResults()
. Note that this
pagination strategy is incomplete when it comes to region replicas and can potentially omit
rendering replicas that fall between the last rowkey offset and replicaCount % page size
.
Error Messages. Any time there's an error parsing user input, a message will be populated
in getErrorMessages()
. Any fields which produce an error will have their filter values
set to the default, except for a value of "scan_limit" that exceeds
10000, in which case 10000 is used.
Modifier and Type | Class and Description |
---|---|
class |
MetaBrowser.Results
Encapsulates the results produced by this
MetaBrowser instance. |
Modifier and Type | Field and Description |
---|---|
private AsyncConnection |
connection |
private List<String> |
errorMessages |
private String |
name |
static String |
NAME_PARAM |
private javax.servlet.http.HttpServletRequest |
request |
static int |
SCAN_LIMIT_DEFAULT |
static int |
SCAN_LIMIT_MAX |
static String |
SCAN_LIMIT_PARAM |
static String |
SCAN_REGION_STATE_PARAM |
static String |
SCAN_START_PARAM |
static String |
SCAN_TABLE_PARAM |
private Integer |
scanLimit |
private RegionState.State |
scanRegionState |
private byte[] |
scanStart |
private TableName |
scanTable |
Constructor and Description |
---|
MetaBrowser(AsyncConnection connection,
javax.servlet.http.HttpServletRequest request) |
Modifier and Type | Method and Description |
---|---|
private void |
addParam(org.apache.hbase.thirdparty.io.netty.handler.codec.http.QueryStringEncoder encoder,
String paramName,
Object value)
Adds
value to encoder under paramName when value is non-null. |
private org.apache.hbase.thirdparty.io.netty.handler.codec.http.QueryStringEncoder |
buildFirstPageEncoder() |
String |
buildFirstPageUrl() |
String |
buildNextPageUrl(byte[] lastRow) |
private Scan |
buildScan() |
private Filter |
buildScanFilter() |
private static String |
buildScanLimitExceededErrorMessage(int requestValue) |
private static String |
buildScanLimitLTEQZero(int requestValue) |
private static String |
buildScanLimitMalformedErrorMessage(String requestValue) |
private static Filter |
buildScanRegionStateFilter(RegionState.State state) |
private static String |
buildScanRegionStateMalformedErrorMessage(String requestValue) |
(package private) static String |
buildStartParamFrom(byte[] lastRow) |
private static Filter |
buildTableFilter(TableName tableName) |
List<String> |
getErrorMessages() |
String |
getName() |
MetaBrowser.Results |
getResults() |
Integer |
getScanLimit() |
RegionState.State |
getScanRegionState() |
byte[] |
getScanStart() |
TableName |
getScanTable() |
private static String |
resolveName(javax.servlet.http.HttpServletRequest request) |
private static String |
resolveRequestParameter(javax.servlet.http.HttpServletRequest request,
String param) |
private Integer |
resolveScanLimit(javax.servlet.http.HttpServletRequest request) |
private RegionState.State |
resolveScanRegionState(javax.servlet.http.HttpServletRequest request) |
private static byte[] |
resolveScanStart(javax.servlet.http.HttpServletRequest request) |
private static TableName |
resolveScanTable(javax.servlet.http.HttpServletRequest request) |
String |
toString() |
private static Integer |
tryParseInt(String val) |
private static <T extends Enum<T>> |
tryValueOf(Class<T> clazz,
String value) |
private static String |
urlDecode(String val) |
private static String |
urlEncode(String val) |
public static final String NAME_PARAM
public static final String SCAN_LIMIT_PARAM
public static final String SCAN_REGION_STATE_PARAM
public static final String SCAN_START_PARAM
public static final String SCAN_TABLE_PARAM
public static final int SCAN_LIMIT_DEFAULT
public static final int SCAN_LIMIT_MAX
private final AsyncConnection connection
private final javax.servlet.http.HttpServletRequest request
private final List<String> errorMessages
private final RegionState.State scanRegionState
private final byte[] scanStart
public MetaBrowser(AsyncConnection connection, javax.servlet.http.HttpServletRequest request)
public List<String> getErrorMessages()
public Integer getScanLimit()
public byte[] getScanStart()
public RegionState.State getScanRegionState()
public TableName getScanTable()
public MetaBrowser.Results getResults()
private static String resolveName(javax.servlet.http.HttpServletRequest request)
private Integer resolveScanLimit(javax.servlet.http.HttpServletRequest request)
private RegionState.State resolveScanRegionState(javax.servlet.http.HttpServletRequest request)
private static byte[] resolveScanStart(javax.servlet.http.HttpServletRequest request)
private static TableName resolveScanTable(javax.servlet.http.HttpServletRequest request)
private static String resolveRequestParameter(javax.servlet.http.HttpServletRequest request, String param)
private static Filter buildTableFilter(TableName tableName)
private static Filter buildScanRegionStateFilter(RegionState.State state)
private Filter buildScanFilter()
private void addParam(org.apache.hbase.thirdparty.io.netty.handler.codec.http.QueryStringEncoder encoder, String paramName, Object value)
value
to encoder
under paramName
when value
is non-null.private org.apache.hbase.thirdparty.io.netty.handler.codec.http.QueryStringEncoder buildFirstPageEncoder()
public String buildFirstPageUrl()
static String buildStartParamFrom(byte[] lastRow)
public String buildNextPageUrl(byte[] lastRow)
private static Integer tryParseInt(String val)
private static <T extends Enum<T>> T tryValueOf(Class<T> clazz, String value)
private static String buildScanLimitExceededErrorMessage(int requestValue)
private static String buildScanLimitMalformedErrorMessage(String requestValue)
private static String buildScanLimitLTEQZero(int requestValue)
private static String buildScanRegionStateMalformedErrorMessage(String requestValue)
Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.