HBASE-10354 Add an API for defining consistency per request
git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-10070@1565062 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d4b82224cc
commit
d8ea476bf1
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* 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.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consistency defines the expected consistency level for an operation.
|
||||||
|
*/
|
||||||
|
@InterfaceAudience.Public
|
||||||
|
@InterfaceStability.Evolving
|
||||||
|
public enum Consistency {
|
||||||
|
// developer note: Do not reorder. Client.proto#Consistency depends on this order
|
||||||
|
/**
|
||||||
|
* Strong consistency is the default consistency model in HBase,
|
||||||
|
* where reads and writes go through a single server which serializes
|
||||||
|
* the updates, and returns all data that was written and ack'd.
|
||||||
|
*/
|
||||||
|
STRONG,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timeline consistent reads might return values that may not see
|
||||||
|
* the most recent updates. Write transactions are always performed
|
||||||
|
* in strong consistency model in HBase which guarantees that transactions
|
||||||
|
* are ordered, and replayed in the same order by all copies of the data.
|
||||||
|
* In timeline consistency, the get and scan requests can be answered from data
|
||||||
|
* that may be stale.
|
||||||
|
* <br>
|
||||||
|
* The client may still observe transactions out of order if the requests are
|
||||||
|
* responded from different servers.
|
||||||
|
*/
|
||||||
|
TIMELINE,
|
||||||
|
}
|
|
@ -77,6 +77,7 @@ public class Get extends Query
|
||||||
private boolean closestRowBefore = false;
|
private boolean closestRowBefore = false;
|
||||||
private Map<byte [], NavigableSet<byte []>> familyMap =
|
private Map<byte [], NavigableSet<byte []>> familyMap =
|
||||||
new TreeMap<byte [], NavigableSet<byte []>>(Bytes.BYTES_COMPARATOR);
|
new TreeMap<byte [], NavigableSet<byte []>>(Bytes.BYTES_COMPARATOR);
|
||||||
|
private Consistency consistency = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Get operation for the specified row.
|
* Create a Get operation for the specified row.
|
||||||
|
@ -270,6 +271,7 @@ public class Get extends Query
|
||||||
* Method for retrieving the get's row
|
* Method for retrieving the get's row
|
||||||
* @return row
|
* @return row
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public byte [] getRow() {
|
public byte [] getRow() {
|
||||||
return this.row;
|
return this.row;
|
||||||
}
|
}
|
||||||
|
@ -340,6 +342,22 @@ public class Get extends Query
|
||||||
return this.familyMap;
|
return this.familyMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the consistency level for this operation
|
||||||
|
* @return the consistency level
|
||||||
|
*/
|
||||||
|
public Consistency getConsistency() {
|
||||||
|
return consistency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the consistency level for this operation
|
||||||
|
* @param consistency the consistency level
|
||||||
|
*/
|
||||||
|
public void setConsistency(Consistency consistency) {
|
||||||
|
this.consistency = consistency;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile the table and column family (i.e. schema) information
|
* Compile the table and column family (i.e. schema) information
|
||||||
* into a String. Useful for parsing and aggregation by debugging,
|
* into a String. Useful for parsing and aggregation by debugging,
|
||||||
|
@ -369,7 +387,7 @@ public class Get extends Query
|
||||||
public Map<String, Object> toMap(int maxCols) {
|
public Map<String, Object> toMap(int maxCols) {
|
||||||
// we start with the fingerprint map and build on top of it.
|
// we start with the fingerprint map and build on top of it.
|
||||||
Map<String, Object> map = getFingerprint();
|
Map<String, Object> map = getFingerprint();
|
||||||
// replace the fingerprint's simple list of families with a
|
// replace the fingerprint's simple list of families with a
|
||||||
// map from column families to lists of qualifiers and kv details
|
// map from column families to lists of qualifiers and kv details
|
||||||
Map<String, List<String>> columns = new HashMap<String, List<String>>();
|
Map<String, List<String>> columns = new HashMap<String, List<String>>();
|
||||||
map.put("families", columns);
|
map.put("families", columns);
|
||||||
|
@ -402,8 +420,8 @@ public class Get extends Query
|
||||||
}
|
}
|
||||||
familyList.add(Bytes.toStringBinary(column));
|
familyList.add(Bytes.toStringBinary(column));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
map.put("totalColumns", colCount);
|
map.put("totalColumns", colCount);
|
||||||
if (this.filter != null) {
|
if (this.filter != null) {
|
||||||
map.put("filter", this.filter.toString());
|
map.put("filter", this.filter.toString());
|
||||||
|
|
|
@ -74,6 +74,7 @@ import org.apache.hadoop.hbase.util.Bytes;
|
||||||
public class Result implements CellScannable {
|
public class Result implements CellScannable {
|
||||||
private Cell[] cells;
|
private Cell[] cells;
|
||||||
private Boolean exists; // if the query was just to check existence.
|
private Boolean exists; // if the query was just to check existence.
|
||||||
|
private boolean stale = false;
|
||||||
// We're not using java serialization. Transient here is just a marker to say
|
// We're not using java serialization. Transient here is just a marker to say
|
||||||
// that this is where we cache row if we're ever asked for it.
|
// that this is where we cache row if we're ever asked for it.
|
||||||
private transient byte [] row = null;
|
private transient byte [] row = null;
|
||||||
|
@ -109,7 +110,7 @@ public class Result implements CellScannable {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public Result(List<KeyValue> kvs) {
|
public Result(List<KeyValue> kvs) {
|
||||||
// TODO: Here we presume the passed in Cells are KVs. One day this won't always be so.
|
// TODO: Here we presume the passed in Cells are KVs. One day this won't always be so.
|
||||||
this(kvs.toArray(new Cell[kvs.size()]), null);
|
this(kvs.toArray(new Cell[kvs.size()]), null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -118,14 +119,18 @@ public class Result implements CellScannable {
|
||||||
* @param cells List of cells
|
* @param cells List of cells
|
||||||
*/
|
*/
|
||||||
public static Result create(List<Cell> cells) {
|
public static Result create(List<Cell> cells) {
|
||||||
return new Result(cells.toArray(new Cell[cells.size()]), null);
|
return new Result(cells.toArray(new Cell[cells.size()]), null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Result create(List<Cell> cells, Boolean exists) {
|
public static Result create(List<Cell> cells, Boolean exists) {
|
||||||
|
return create(cells, exists, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result create(List<Cell> cells, Boolean exists, boolean stale) {
|
||||||
if (exists != null){
|
if (exists != null){
|
||||||
return new Result(null, exists);
|
return new Result(null, exists, stale);
|
||||||
}
|
}
|
||||||
return new Result(cells.toArray(new Cell[cells.size()]), null);
|
return new Result(cells.toArray(new Cell[cells.size()]), null, stale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -134,13 +139,21 @@ public class Result implements CellScannable {
|
||||||
* @param cells array of cells
|
* @param cells array of cells
|
||||||
*/
|
*/
|
||||||
public static Result create(Cell[] cells) {
|
public static Result create(Cell[] cells) {
|
||||||
return new Result(cells, null);
|
return new Result(cells, null, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result create(Cell[] cells, Boolean exists, boolean stale) {
|
||||||
|
if (exists != null){
|
||||||
|
return new Result(null, exists, stale);
|
||||||
|
}
|
||||||
|
return new Result(cells, null, stale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Private ctor. Use {@link #create(Cell[])}. */
|
/** Private ctor. Use {@link #create(Cell[])}. */
|
||||||
private Result(Cell[] cells, Boolean exists) {
|
private Result(Cell[] cells, Boolean exists, boolean stale) {
|
||||||
this.cells = cells;
|
this.cells = cells;
|
||||||
this.exists = exists;
|
this.exists = exists;
|
||||||
|
this.stale = stale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -180,13 +193,13 @@ public class Result implements CellScannable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an cells of a Result as an array of KeyValues
|
* Return an cells of a Result as an array of KeyValues
|
||||||
*
|
*
|
||||||
* WARNING do not use, expensive. This does an arraycopy of the cell[]'s value.
|
* WARNING do not use, expensive. This does an arraycopy of the cell[]'s value.
|
||||||
*
|
*
|
||||||
* Added to ease transition from 0.94 -> 0.96.
|
* Added to ease transition from 0.94 -> 0.96.
|
||||||
*
|
*
|
||||||
* @deprecated as of 0.96, use {@link #rawCells()}
|
* @deprecated as of 0.96, use {@link #rawCells()}
|
||||||
* @return array of KeyValues, empty array if nothing in result.
|
* @return array of KeyValues, empty array if nothing in result.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -208,15 +221,15 @@ public class Result implements CellScannable {
|
||||||
public List<Cell> listCells() {
|
public List<Cell> listCells() {
|
||||||
return isEmpty()? null: Arrays.asList(rawCells());
|
return isEmpty()? null: Arrays.asList(rawCells());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an cells of a Result as an array of KeyValues
|
* Return an cells of a Result as an array of KeyValues
|
||||||
*
|
*
|
||||||
* WARNING do not use, expensive. This does an arraycopy of the cell[]'s value.
|
* WARNING do not use, expensive. This does an arraycopy of the cell[]'s value.
|
||||||
*
|
*
|
||||||
* Added to ease transition from 0.94 -> 0.96.
|
* Added to ease transition from 0.94 -> 0.96.
|
||||||
*
|
*
|
||||||
* @deprecated as of 0.96, use {@link #listCells()}
|
* @deprecated as of 0.96, use {@link #listCells()}
|
||||||
* @return all sorted List of KeyValues; can be null if no cells in the result
|
* @return all sorted List of KeyValues; can be null if no cells in the result
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -634,6 +647,7 @@ public class Result implements CellScannable {
|
||||||
NavigableMap<Long, byte[]> versionMap = columnMap.get(qualifier);
|
NavigableMap<Long, byte[]> versionMap = columnMap.get(qualifier);
|
||||||
if(versionMap == null) {
|
if(versionMap == null) {
|
||||||
versionMap = new TreeMap<Long, byte[]>(new Comparator<Long>() {
|
versionMap = new TreeMap<Long, byte[]>(new Comparator<Long>() {
|
||||||
|
@Override
|
||||||
public int compare(Long l1, Long l2) {
|
public int compare(Long l1, Long l2) {
|
||||||
return l2.compareTo(l1);
|
return l2.compareTo(l1);
|
||||||
}
|
}
|
||||||
|
@ -823,4 +837,14 @@ public class Result implements CellScannable {
|
||||||
public void setExists(Boolean exists) {
|
public void setExists(Boolean exists) {
|
||||||
this.exists = exists;
|
this.exists = exists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not the results are coming from possibly stale data. Stale results
|
||||||
|
* might be returned if {@link Consistency} is not STRONG for the query.
|
||||||
|
* @return Whether or not the results are coming from possibly stale data.
|
||||||
|
*/
|
||||||
|
public boolean isStale() {
|
||||||
|
return stale;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,12 +119,12 @@ public class Scan extends Query {
|
||||||
// call scan.setAttribute(SCAN_ATTRIBUTES_ENABLE, Bytes.toBytes(Boolean.TRUE))
|
// call scan.setAttribute(SCAN_ATTRIBUTES_ENABLE, Bytes.toBytes(Boolean.TRUE))
|
||||||
static public final String SCAN_ATTRIBUTES_METRICS_ENABLE = "scan.attributes.metrics.enable";
|
static public final String SCAN_ATTRIBUTES_METRICS_ENABLE = "scan.attributes.metrics.enable";
|
||||||
static public final String SCAN_ATTRIBUTES_METRICS_DATA = "scan.attributes.metrics.data";
|
static public final String SCAN_ATTRIBUTES_METRICS_DATA = "scan.attributes.metrics.data";
|
||||||
|
|
||||||
// If an application wants to use multiple scans over different tables each scan must
|
// If an application wants to use multiple scans over different tables each scan must
|
||||||
// define this attribute with the appropriate table name by calling
|
// define this attribute with the appropriate table name by calling
|
||||||
// scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes(tableName))
|
// scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes(tableName))
|
||||||
static public final String SCAN_ATTRIBUTES_TABLE_NAME = "scan.attributes.table.name";
|
static public final String SCAN_ATTRIBUTES_TABLE_NAME = "scan.attributes.table.name";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* -1 means no caching
|
* -1 means no caching
|
||||||
*/
|
*/
|
||||||
|
@ -136,22 +136,23 @@ public class Scan extends Query {
|
||||||
private Map<byte [], NavigableSet<byte []>> familyMap =
|
private Map<byte [], NavigableSet<byte []>> familyMap =
|
||||||
new TreeMap<byte [], NavigableSet<byte []>>(Bytes.BYTES_COMPARATOR);
|
new TreeMap<byte [], NavigableSet<byte []>>(Bytes.BYTES_COMPARATOR);
|
||||||
private Boolean loadColumnFamiliesOnDemand = null;
|
private Boolean loadColumnFamiliesOnDemand = null;
|
||||||
|
private Consistency consistency = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set it true for small scan to get better performance
|
* Set it true for small scan to get better performance
|
||||||
*
|
*
|
||||||
* Small scan should use pread and big scan can use seek + read
|
* Small scan should use pread and big scan can use seek + read
|
||||||
*
|
*
|
||||||
* seek + read is fast but can cause two problem (1) resource contention (2)
|
* seek + read is fast but can cause two problem (1) resource contention (2)
|
||||||
* cause too much network io
|
* cause too much network io
|
||||||
*
|
*
|
||||||
* [89-fb] Using pread for non-compaction read request
|
* [89-fb] Using pread for non-compaction read request
|
||||||
* https://issues.apache.org/jira/browse/HBASE-7266
|
* https://issues.apache.org/jira/browse/HBASE-7266
|
||||||
*
|
*
|
||||||
* On the other hand, if setting it true, we would do
|
* On the other hand, if setting it true, we would do
|
||||||
* openScanner,next,closeScanner in one RPC call. It means the better
|
* openScanner,next,closeScanner in one RPC call. It means the better
|
||||||
* performance for small scan. [HBASE-9488].
|
* performance for small scan. [HBASE-9488].
|
||||||
*
|
*
|
||||||
* Generally, if the scan range is within one data block(64KB), it could be
|
* Generally, if the scan range is within one data block(64KB), it could be
|
||||||
* considered as a small scan.
|
* considered as a small scan.
|
||||||
*/
|
*/
|
||||||
|
@ -209,6 +210,7 @@ public class Scan extends Query {
|
||||||
getScan = scan.isGetScan();
|
getScan = scan.isGetScan();
|
||||||
filter = scan.getFilter(); // clone?
|
filter = scan.getFilter(); // clone?
|
||||||
loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();
|
loadColumnFamiliesOnDemand = scan.getLoadColumnFamiliesOnDemandValue();
|
||||||
|
consistency = scan.getConsistency();
|
||||||
TimeRange ctr = scan.getTimeRange();
|
TimeRange ctr = scan.getTimeRange();
|
||||||
tr = new TimeRange(ctr.getMin(), ctr.getMax());
|
tr = new TimeRange(ctr.getMin(), ctr.getMax());
|
||||||
Map<byte[], NavigableSet<byte[]>> fams = scan.getFamilyMap();
|
Map<byte[], NavigableSet<byte[]>> fams = scan.getFamilyMap();
|
||||||
|
@ -243,6 +245,7 @@ public class Scan extends Query {
|
||||||
this.tr = get.getTimeRange();
|
this.tr = get.getTimeRange();
|
||||||
this.familyMap = get.getFamilyMap();
|
this.familyMap = get.getFamilyMap();
|
||||||
this.getScan = true;
|
this.getScan = true;
|
||||||
|
this.consistency = get.getConsistency();
|
||||||
for (Map.Entry<String, byte[]> attr : get.getAttributesMap().entrySet()) {
|
for (Map.Entry<String, byte[]> attr : get.getAttributesMap().entrySet()) {
|
||||||
setAttribute(attr.getKey(), attr.getValue());
|
setAttribute(attr.getKey(), attr.getValue());
|
||||||
}
|
}
|
||||||
|
@ -540,6 +543,7 @@ public class Scan extends Query {
|
||||||
/**
|
/**
|
||||||
* @return RowFilter
|
* @return RowFilter
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Filter getFilter() {
|
public Filter getFilter() {
|
||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
@ -578,7 +582,7 @@ public class Scan extends Query {
|
||||||
* Set whether this scan is a reversed one
|
* Set whether this scan is a reversed one
|
||||||
* <p>
|
* <p>
|
||||||
* This is false by default which means forward(normal) scan.
|
* This is false by default which means forward(normal) scan.
|
||||||
*
|
*
|
||||||
* @param reversed if true, scan will be backward order
|
* @param reversed if true, scan will be backward order
|
||||||
* @return this
|
* @return this
|
||||||
*/
|
*/
|
||||||
|
@ -630,6 +634,22 @@ public class Scan extends Query {
|
||||||
&& this.loadColumnFamiliesOnDemand.booleanValue();
|
&& this.loadColumnFamiliesOnDemand.booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the consistency level for this operation
|
||||||
|
* @return the consistency level
|
||||||
|
*/
|
||||||
|
public Consistency getConsistency() {
|
||||||
|
return consistency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the consistency level for this operation
|
||||||
|
* @param consistency the consistency level
|
||||||
|
*/
|
||||||
|
public void setConsistency(Consistency consistency) {
|
||||||
|
this.consistency = consistency;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile the table and column family (i.e. schema) information
|
* Compile the table and column family (i.e. schema) information
|
||||||
* into a String. Useful for parsing and aggregation by debugging,
|
* into a String. Useful for parsing and aggregation by debugging,
|
||||||
|
@ -695,15 +715,15 @@ public class Scan extends Query {
|
||||||
colCount += entry.getValue().size();
|
colCount += entry.getValue().size();
|
||||||
if (maxCols <= 0) {
|
if (maxCols <= 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (byte [] column : entry.getValue()) {
|
for (byte [] column : entry.getValue()) {
|
||||||
if (--maxCols <= 0) {
|
if (--maxCols <= 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
columns.add(Bytes.toStringBinary(column));
|
columns.add(Bytes.toStringBinary(column));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
map.put("totalColumns", colCount);
|
map.put("totalColumns", colCount);
|
||||||
if (this.filter != null) {
|
if (this.filter != null) {
|
||||||
map.put("filter", this.filter.toString());
|
map.put("filter", this.filter.toString());
|
||||||
|
@ -741,10 +761,10 @@ public class Scan extends Query {
|
||||||
* Set the isolation level for this scan. If the
|
* Set the isolation level for this scan. If the
|
||||||
* isolation level is set to READ_UNCOMMITTED, then
|
* isolation level is set to READ_UNCOMMITTED, then
|
||||||
* this scan will return data from committed and
|
* this scan will return data from committed and
|
||||||
* uncommitted transactions. If the isolation level
|
* uncommitted transactions. If the isolation level
|
||||||
* is set to READ_COMMITTED, then this scan will return
|
* is set to READ_COMMITTED, then this scan will return
|
||||||
* data from committed transactions only. If a isolation
|
* data from committed transactions only. If a isolation
|
||||||
* level is not explicitly set on a Scan, then it
|
* level is not explicitly set on a Scan, then it
|
||||||
* is assumed to be READ_COMMITTED.
|
* is assumed to be READ_COMMITTED.
|
||||||
* @param level IsolationLevel for this scan
|
* @param level IsolationLevel for this scan
|
||||||
*/
|
*/
|
||||||
|
@ -753,7 +773,7 @@ public class Scan extends Query {
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* @return The isolation level of this scan.
|
* @return The isolation level of this scan.
|
||||||
* If no isolation level was set for this scan object,
|
* If no isolation level was set for this scan object,
|
||||||
* then it returns READ_COMMITTED.
|
* then it returns READ_COMMITTED.
|
||||||
* @return The IsolationLevel for this scan
|
* @return The IsolationLevel for this scan
|
||||||
*/
|
*/
|
||||||
|
@ -767,20 +787,20 @@ public class Scan extends Query {
|
||||||
* Set whether this scan is a small scan
|
* Set whether this scan is a small scan
|
||||||
* <p>
|
* <p>
|
||||||
* Small scan should use pread and big scan can use seek + read
|
* Small scan should use pread and big scan can use seek + read
|
||||||
*
|
*
|
||||||
* seek + read is fast but can cause two problem (1) resource contention (2)
|
* seek + read is fast but can cause two problem (1) resource contention (2)
|
||||||
* cause too much network io
|
* cause too much network io
|
||||||
*
|
*
|
||||||
* [89-fb] Using pread for non-compaction read request
|
* [89-fb] Using pread for non-compaction read request
|
||||||
* https://issues.apache.org/jira/browse/HBASE-7266
|
* https://issues.apache.org/jira/browse/HBASE-7266
|
||||||
*
|
*
|
||||||
* On the other hand, if setting it true, we would do
|
* On the other hand, if setting it true, we would do
|
||||||
* openScanner,next,closeScanner in one RPC call. It means the better
|
* openScanner,next,closeScanner in one RPC call. It means the better
|
||||||
* performance for small scan. [HBASE-9488].
|
* performance for small scan. [HBASE-9488].
|
||||||
*
|
*
|
||||||
* Generally, if the scan range is within one data block(64KB), it could be
|
* Generally, if the scan range is within one data block(64KB), it could be
|
||||||
* considered as a small scan.
|
* considered as a small scan.
|
||||||
*
|
*
|
||||||
* @param small
|
* @param small
|
||||||
*/
|
*/
|
||||||
public void setSmall(boolean small) {
|
public void setSmall(boolean small) {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distr=ibuted on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
|
@ -36,7 +36,6 @@ import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.NavigableSet;
|
import java.util.NavigableSet;
|
||||||
|
|
||||||
import com.google.protobuf.HBaseZeroCopyByteString;
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.hbase.Cell;
|
import org.apache.hadoop.hbase.Cell;
|
||||||
|
@ -54,6 +53,7 @@ import org.apache.hadoop.hbase.ServerName;
|
||||||
import org.apache.hadoop.hbase.TableName;
|
import org.apache.hadoop.hbase.TableName;
|
||||||
import org.apache.hadoop.hbase.Tag;
|
import org.apache.hadoop.hbase.Tag;
|
||||||
import org.apache.hadoop.hbase.client.Append;
|
import org.apache.hadoop.hbase.client.Append;
|
||||||
|
import org.apache.hadoop.hbase.client.Consistency;
|
||||||
import org.apache.hadoop.hbase.client.Delete;
|
import org.apache.hadoop.hbase.client.Delete;
|
||||||
import org.apache.hadoop.hbase.client.Durability;
|
import org.apache.hadoop.hbase.client.Durability;
|
||||||
import org.apache.hadoop.hbase.client.Get;
|
import org.apache.hadoop.hbase.client.Get;
|
||||||
|
@ -136,6 +136,7 @@ import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.ListMultimap;
|
import com.google.common.collect.ListMultimap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
|
import com.google.protobuf.HBaseZeroCopyByteString;
|
||||||
import com.google.protobuf.InvalidProtocolBufferException;
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
import com.google.protobuf.Message;
|
import com.google.protobuf.Message;
|
||||||
import com.google.protobuf.Parser;
|
import com.google.protobuf.Parser;
|
||||||
|
@ -167,10 +168,19 @@ public final class ProtobufUtil {
|
||||||
private final static Result EMPTY_RESULT = Result.create(EMPTY_CELL_ARRAY);
|
private final static Result EMPTY_RESULT = Result.create(EMPTY_CELL_ARRAY);
|
||||||
private final static Result EMPTY_RESULT_EXISTS_TRUE = Result.create(null, true);
|
private final static Result EMPTY_RESULT_EXISTS_TRUE = Result.create(null, true);
|
||||||
private final static Result EMPTY_RESULT_EXISTS_FALSE = Result.create(null, false);
|
private final static Result EMPTY_RESULT_EXISTS_FALSE = Result.create(null, false);
|
||||||
|
private final static Result EMPTY_RESULT_STALE = Result.create(EMPTY_CELL_ARRAY, null, true);
|
||||||
|
private final static Result EMPTY_RESULT_EXISTS_TRUE_STALE
|
||||||
|
= Result.create((Cell[])null, true, true);
|
||||||
|
private final static Result EMPTY_RESULT_EXISTS_FALSE_STALE
|
||||||
|
= Result.create((Cell[])null, false, true);
|
||||||
|
|
||||||
private final static ClientProtos.Result EMPTY_RESULT_PB;
|
private final static ClientProtos.Result EMPTY_RESULT_PB;
|
||||||
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_TRUE;
|
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_TRUE;
|
||||||
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_FALSE;
|
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_FALSE;
|
||||||
|
private final static ClientProtos.Result EMPTY_RESULT_PB_STALE;
|
||||||
|
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_TRUE_STALE;
|
||||||
|
private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_FALSE_STALE;
|
||||||
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
||||||
|
@ -179,15 +189,21 @@ public final class ProtobufUtil {
|
||||||
builder.setAssociatedCellCount(0);
|
builder.setAssociatedCellCount(0);
|
||||||
EMPTY_RESULT_PB_EXISTS_TRUE = builder.build();
|
EMPTY_RESULT_PB_EXISTS_TRUE = builder.build();
|
||||||
|
|
||||||
|
builder.setStale(true);
|
||||||
|
EMPTY_RESULT_PB_EXISTS_TRUE_STALE = builder.build();
|
||||||
builder.clear();
|
builder.clear();
|
||||||
|
|
||||||
builder.setExists(false);
|
builder.setExists(false);
|
||||||
builder.setAssociatedCellCount(0);
|
builder.setAssociatedCellCount(0);
|
||||||
EMPTY_RESULT_PB_EXISTS_FALSE = builder.build();
|
EMPTY_RESULT_PB_EXISTS_FALSE = builder.build();
|
||||||
|
builder.setStale(true);
|
||||||
|
EMPTY_RESULT_PB_EXISTS_FALSE_STALE = builder.build();
|
||||||
|
|
||||||
builder.clear();
|
builder.clear();
|
||||||
builder.setAssociatedCellCount(0);
|
builder.setAssociatedCellCount(0);
|
||||||
EMPTY_RESULT_PB = builder.build();
|
EMPTY_RESULT_PB = builder.build();
|
||||||
|
builder.setStale(true);
|
||||||
|
EMPTY_RESULT_PB_STALE = builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -461,9 +477,28 @@ public final class ProtobufUtil {
|
||||||
if (proto.hasClosestRowBefore() && proto.getClosestRowBefore()){
|
if (proto.hasClosestRowBefore() && proto.getClosestRowBefore()){
|
||||||
get.setClosestRowBefore(true);
|
get.setClosestRowBefore(true);
|
||||||
}
|
}
|
||||||
|
if (proto.hasConsistency()) {
|
||||||
|
get.setConsistency(toConsistency(proto.getConsistency()));
|
||||||
|
}
|
||||||
return get;
|
return get;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Consistency toConsistency(ClientProtos.Consistency consistency) {
|
||||||
|
switch (consistency) {
|
||||||
|
case STRONG : return Consistency.STRONG;
|
||||||
|
case TIMELINE : return Consistency.TIMELINE;
|
||||||
|
default : return Consistency.STRONG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ClientProtos.Consistency toConsistency(Consistency consistency) {
|
||||||
|
switch (consistency) {
|
||||||
|
case STRONG : return ClientProtos.Consistency.STRONG;
|
||||||
|
case TIMELINE : return ClientProtos.Consistency.TIMELINE;
|
||||||
|
default : return ClientProtos.Consistency.STRONG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a protocol buffer Mutate to a Put.
|
* Convert a protocol buffer Mutate to a Put.
|
||||||
*
|
*
|
||||||
|
@ -1006,6 +1041,10 @@ public final class ProtobufUtil {
|
||||||
if (get.isClosestRowBefore()){
|
if (get.isClosestRowBefore()){
|
||||||
builder.setClosestRowBefore(true);
|
builder.setClosestRowBefore(true);
|
||||||
}
|
}
|
||||||
|
if (get.getConsistency() != null && get.getConsistency() != Consistency.STRONG) {
|
||||||
|
builder.setConsistency(toConsistency(get.getConsistency()));
|
||||||
|
}
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1198,7 +1237,7 @@ public final class ProtobufUtil {
|
||||||
|
|
||||||
Cell[] cells = result.rawCells();
|
Cell[] cells = result.rawCells();
|
||||||
if (cells == null || cells.length == 0) {
|
if (cells == null || cells.length == 0) {
|
||||||
return EMPTY_RESULT_PB;
|
return result.isStale() ? EMPTY_RESULT_PB_STALE : EMPTY_RESULT_PB;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
||||||
|
@ -1206,6 +1245,8 @@ public final class ProtobufUtil {
|
||||||
builder.addCell(toCell(c));
|
builder.addCell(toCell(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
builder.setStale(result.isStale());
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1229,9 +1270,10 @@ public final class ProtobufUtil {
|
||||||
public static ClientProtos.Result toResultNoData(final Result result) {
|
public static ClientProtos.Result toResultNoData(final Result result) {
|
||||||
if (result.getExists() != null) return toResult(result.getExists());
|
if (result.getExists() != null) return toResult(result.getExists());
|
||||||
int size = result.size();
|
int size = result.size();
|
||||||
if (size == 0) return EMPTY_RESULT_PB;
|
if (size == 0) return result.isStale() ? EMPTY_RESULT_PB_STALE : EMPTY_RESULT_PB;
|
||||||
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder();
|
||||||
builder.setAssociatedCellCount(size);
|
builder.setAssociatedCellCount(size);
|
||||||
|
builder.setStale(result.isStale());
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1243,19 +1285,22 @@ public final class ProtobufUtil {
|
||||||
*/
|
*/
|
||||||
public static Result toResult(final ClientProtos.Result proto) {
|
public static Result toResult(final ClientProtos.Result proto) {
|
||||||
if (proto.hasExists()) {
|
if (proto.hasExists()) {
|
||||||
|
if (proto.getStale()) {
|
||||||
|
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE_STALE :EMPTY_RESULT_EXISTS_FALSE_STALE;
|
||||||
|
}
|
||||||
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE;
|
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<CellProtos.Cell> values = proto.getCellList();
|
List<CellProtos.Cell> values = proto.getCellList();
|
||||||
if (values.isEmpty()){
|
if (values.isEmpty()){
|
||||||
return EMPTY_RESULT;
|
return proto.getStale() ? EMPTY_RESULT_STALE : EMPTY_RESULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Cell> cells = new ArrayList<Cell>(values.size());
|
List<Cell> cells = new ArrayList<Cell>(values.size());
|
||||||
for (CellProtos.Cell c : values) {
|
for (CellProtos.Cell c : values) {
|
||||||
cells.add(toCell(c));
|
cells.add(toCell(c));
|
||||||
}
|
}
|
||||||
return Result.create(cells, null);
|
return Result.create(cells, null, proto.getStale());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1275,6 +1320,9 @@ public final class ProtobufUtil {
|
||||||
(proto.hasAssociatedCellCount() && proto.getAssociatedCellCount() > 0)) {
|
(proto.hasAssociatedCellCount() && proto.getAssociatedCellCount() > 0)) {
|
||||||
throw new IllegalArgumentException("bad proto: exists with cells is no allowed " + proto);
|
throw new IllegalArgumentException("bad proto: exists with cells is no allowed " + proto);
|
||||||
}
|
}
|
||||||
|
if (proto.getStale()) {
|
||||||
|
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE_STALE :EMPTY_RESULT_EXISTS_FALSE_STALE;
|
||||||
|
}
|
||||||
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE;
|
return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1296,7 +1344,9 @@ public final class ProtobufUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (cells == null || cells.isEmpty()) ? EMPTY_RESULT : Result.create(cells, null);
|
return (cells == null || cells.isEmpty())
|
||||||
|
? (proto.getStale() ? EMPTY_RESULT_STALE : EMPTY_RESULT)
|
||||||
|
: Result.create(cells, null, proto.getStale());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,93 @@ public final class ClientProtos {
|
||||||
public static void registerAllExtensions(
|
public static void registerAllExtensions(
|
||||||
com.google.protobuf.ExtensionRegistry registry) {
|
com.google.protobuf.ExtensionRegistry registry) {
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Protobuf enum {@code Consistency}
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
**
|
||||||
|
* Consistency defines the expected consistency level for an operation.
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public enum Consistency
|
||||||
|
implements com.google.protobuf.ProtocolMessageEnum {
|
||||||
|
/**
|
||||||
|
* <code>STRONG = 0;</code>
|
||||||
|
*/
|
||||||
|
STRONG(0, 0),
|
||||||
|
/**
|
||||||
|
* <code>TIMELINE = 1;</code>
|
||||||
|
*/
|
||||||
|
TIMELINE(1, 1),
|
||||||
|
;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>STRONG = 0;</code>
|
||||||
|
*/
|
||||||
|
public static final int STRONG_VALUE = 0;
|
||||||
|
/**
|
||||||
|
* <code>TIMELINE = 1;</code>
|
||||||
|
*/
|
||||||
|
public static final int TIMELINE_VALUE = 1;
|
||||||
|
|
||||||
|
|
||||||
|
public final int getNumber() { return value; }
|
||||||
|
|
||||||
|
public static Consistency valueOf(int value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0: return STRONG;
|
||||||
|
case 1: return TIMELINE;
|
||||||
|
default: return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static com.google.protobuf.Internal.EnumLiteMap<Consistency>
|
||||||
|
internalGetValueMap() {
|
||||||
|
return internalValueMap;
|
||||||
|
}
|
||||||
|
private static com.google.protobuf.Internal.EnumLiteMap<Consistency>
|
||||||
|
internalValueMap =
|
||||||
|
new com.google.protobuf.Internal.EnumLiteMap<Consistency>() {
|
||||||
|
public Consistency findValueByNumber(int number) {
|
||||||
|
return Consistency.valueOf(number);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public final com.google.protobuf.Descriptors.EnumValueDescriptor
|
||||||
|
getValueDescriptor() {
|
||||||
|
return getDescriptor().getValues().get(index);
|
||||||
|
}
|
||||||
|
public final com.google.protobuf.Descriptors.EnumDescriptor
|
||||||
|
getDescriptorForType() {
|
||||||
|
return getDescriptor();
|
||||||
|
}
|
||||||
|
public static final com.google.protobuf.Descriptors.EnumDescriptor
|
||||||
|
getDescriptor() {
|
||||||
|
return org.apache.hadoop.hbase.protobuf.generated.ClientProtos.getDescriptor().getEnumTypes().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Consistency[] VALUES = values();
|
||||||
|
|
||||||
|
public static Consistency valueOf(
|
||||||
|
com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
|
||||||
|
if (desc.getType() != getDescriptor()) {
|
||||||
|
throw new java.lang.IllegalArgumentException(
|
||||||
|
"EnumValueDescriptor is not for this type.");
|
||||||
|
}
|
||||||
|
return VALUES[desc.getIndex()];
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int index;
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
private Consistency(int index, int value) {
|
||||||
|
this.index = index;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @@protoc_insertion_point(enum_scope:Consistency)
|
||||||
|
}
|
||||||
|
|
||||||
public interface AuthorizationsOrBuilder
|
public interface AuthorizationsOrBuilder
|
||||||
extends com.google.protobuf.MessageOrBuilder {
|
extends com.google.protobuf.MessageOrBuilder {
|
||||||
|
|
||||||
|
@ -1858,6 +1945,16 @@ public final class ClientProtos {
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
boolean getClosestRowBefore();
|
boolean getClosestRowBefore();
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 12 [default = STRONG];
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
boolean hasConsistency();
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code Get}
|
* Protobuf type {@code Get}
|
||||||
|
@ -1995,6 +2092,17 @@ public final class ClientProtos {
|
||||||
closestRowBefore_ = input.readBool();
|
closestRowBefore_ = input.readBool();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 96: {
|
||||||
|
int rawValue = input.readEnum();
|
||||||
|
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency value = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.valueOf(rawValue);
|
||||||
|
if (value == null) {
|
||||||
|
unknownFields.mergeVarintField(12, rawValue);
|
||||||
|
} else {
|
||||||
|
bitField0_ |= 0x00000200;
|
||||||
|
consistency_ = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
|
@ -2289,6 +2397,22 @@ public final class ClientProtos {
|
||||||
return closestRowBefore_;
|
return closestRowBefore_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 12 [default = STRONG];
|
||||||
|
public static final int CONSISTENCY_FIELD_NUMBER = 12;
|
||||||
|
private org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency consistency_;
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public boolean hasConsistency() {
|
||||||
|
return ((bitField0_ & 0x00000200) == 0x00000200);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency() {
|
||||||
|
return consistency_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
row_ = com.google.protobuf.ByteString.EMPTY;
|
row_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
column_ = java.util.Collections.emptyList();
|
column_ = java.util.Collections.emptyList();
|
||||||
|
@ -2301,6 +2425,7 @@ public final class ClientProtos {
|
||||||
storeOffset_ = 0;
|
storeOffset_ = 0;
|
||||||
existenceOnly_ = false;
|
existenceOnly_ = false;
|
||||||
closestRowBefore_ = false;
|
closestRowBefore_ = false;
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
|
@ -2369,6 +2494,9 @@ public final class ClientProtos {
|
||||||
if (((bitField0_ & 0x00000100) == 0x00000100)) {
|
if (((bitField0_ & 0x00000100) == 0x00000100)) {
|
||||||
output.writeBool(11, closestRowBefore_);
|
output.writeBool(11, closestRowBefore_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000200) == 0x00000200)) {
|
||||||
|
output.writeEnum(12, consistency_.getNumber());
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2422,6 +2550,10 @@ public final class ClientProtos {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBoolSize(11, closestRowBefore_);
|
.computeBoolSize(11, closestRowBefore_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000200) == 0x00000200)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeEnumSize(12, consistency_.getNumber());
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
|
@ -2494,6 +2626,11 @@ public final class ClientProtos {
|
||||||
result = result && (getClosestRowBefore()
|
result = result && (getClosestRowBefore()
|
||||||
== other.getClosestRowBefore());
|
== other.getClosestRowBefore());
|
||||||
}
|
}
|
||||||
|
result = result && (hasConsistency() == other.hasConsistency());
|
||||||
|
if (hasConsistency()) {
|
||||||
|
result = result &&
|
||||||
|
(getConsistency() == other.getConsistency());
|
||||||
|
}
|
||||||
result = result &&
|
result = result &&
|
||||||
getUnknownFields().equals(other.getUnknownFields());
|
getUnknownFields().equals(other.getUnknownFields());
|
||||||
return result;
|
return result;
|
||||||
|
@ -2551,6 +2688,10 @@ public final class ClientProtos {
|
||||||
hash = (37 * hash) + CLOSEST_ROW_BEFORE_FIELD_NUMBER;
|
hash = (37 * hash) + CLOSEST_ROW_BEFORE_FIELD_NUMBER;
|
||||||
hash = (53 * hash) + hashBoolean(getClosestRowBefore());
|
hash = (53 * hash) + hashBoolean(getClosestRowBefore());
|
||||||
}
|
}
|
||||||
|
if (hasConsistency()) {
|
||||||
|
hash = (37 * hash) + CONSISTENCY_FIELD_NUMBER;
|
||||||
|
hash = (53 * hash) + hashEnum(getConsistency());
|
||||||
|
}
|
||||||
hash = (29 * hash) + getUnknownFields().hashCode();
|
hash = (29 * hash) + getUnknownFields().hashCode();
|
||||||
memoizedHashCode = hash;
|
memoizedHashCode = hash;
|
||||||
return hash;
|
return hash;
|
||||||
|
@ -2710,6 +2851,8 @@ public final class ClientProtos {
|
||||||
bitField0_ = (bitField0_ & ~0x00000200);
|
bitField0_ = (bitField0_ & ~0x00000200);
|
||||||
closestRowBefore_ = false;
|
closestRowBefore_ = false;
|
||||||
bitField0_ = (bitField0_ & ~0x00000400);
|
bitField0_ = (bitField0_ & ~0x00000400);
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000800);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2800,6 +2943,10 @@ public final class ClientProtos {
|
||||||
to_bitField0_ |= 0x00000100;
|
to_bitField0_ |= 0x00000100;
|
||||||
}
|
}
|
||||||
result.closestRowBefore_ = closestRowBefore_;
|
result.closestRowBefore_ = closestRowBefore_;
|
||||||
|
if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
|
||||||
|
to_bitField0_ |= 0x00000200;
|
||||||
|
}
|
||||||
|
result.consistency_ = consistency_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
|
@ -2895,6 +3042,9 @@ public final class ClientProtos {
|
||||||
if (other.hasClosestRowBefore()) {
|
if (other.hasClosestRowBefore()) {
|
||||||
setClosestRowBefore(other.getClosestRowBefore());
|
setClosestRowBefore(other.getClosestRowBefore());
|
||||||
}
|
}
|
||||||
|
if (other.hasConsistency()) {
|
||||||
|
setConsistency(other.getConsistency());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -3932,6 +4082,42 @@ public final class ClientProtos {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 12 [default = STRONG];
|
||||||
|
private org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public boolean hasConsistency() {
|
||||||
|
return ((bitField0_ & 0x00000800) == 0x00000800);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency() {
|
||||||
|
return consistency_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public Builder setConsistency(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000800;
|
||||||
|
consistency_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 12 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public Builder clearConsistency() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000800);
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:Get)
|
// @@protoc_insertion_point(builder_scope:Get)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4043,6 +4229,24 @@ public final class ClientProtos {
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
boolean getExists();
|
boolean getExists();
|
||||||
|
|
||||||
|
// optional bool stale = 4 [default = false];
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
boolean hasStale();
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
boolean getStale();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code Result}
|
* Protobuf type {@code Result}
|
||||||
|
@ -4113,6 +4317,11 @@ public final class ClientProtos {
|
||||||
exists_ = input.readBool();
|
exists_ = input.readBool();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 32: {
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
stale_ = input.readBool();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
|
@ -4277,10 +4486,35 @@ public final class ClientProtos {
|
||||||
return exists_;
|
return exists_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional bool stale = 4 [default = false];
|
||||||
|
public static final int STALE_FIELD_NUMBER = 4;
|
||||||
|
private boolean stale_;
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public boolean hasStale() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public boolean getStale() {
|
||||||
|
return stale_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
cell_ = java.util.Collections.emptyList();
|
cell_ = java.util.Collections.emptyList();
|
||||||
associatedCellCount_ = 0;
|
associatedCellCount_ = 0;
|
||||||
exists_ = false;
|
exists_ = false;
|
||||||
|
stale_ = false;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
|
@ -4303,6 +4537,9 @@ public final class ClientProtos {
|
||||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
output.writeBool(3, exists_);
|
output.writeBool(3, exists_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
output.writeBool(4, stale_);
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4324,6 +4561,10 @@ public final class ClientProtos {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBoolSize(3, exists_);
|
.computeBoolSize(3, exists_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeBoolSize(4, stale_);
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
|
@ -4359,6 +4600,11 @@ public final class ClientProtos {
|
||||||
result = result && (getExists()
|
result = result && (getExists()
|
||||||
== other.getExists());
|
== other.getExists());
|
||||||
}
|
}
|
||||||
|
result = result && (hasStale() == other.hasStale());
|
||||||
|
if (hasStale()) {
|
||||||
|
result = result && (getStale()
|
||||||
|
== other.getStale());
|
||||||
|
}
|
||||||
result = result &&
|
result = result &&
|
||||||
getUnknownFields().equals(other.getUnknownFields());
|
getUnknownFields().equals(other.getUnknownFields());
|
||||||
return result;
|
return result;
|
||||||
|
@ -4384,6 +4630,10 @@ public final class ClientProtos {
|
||||||
hash = (37 * hash) + EXISTS_FIELD_NUMBER;
|
hash = (37 * hash) + EXISTS_FIELD_NUMBER;
|
||||||
hash = (53 * hash) + hashBoolean(getExists());
|
hash = (53 * hash) + hashBoolean(getExists());
|
||||||
}
|
}
|
||||||
|
if (hasStale()) {
|
||||||
|
hash = (37 * hash) + STALE_FIELD_NUMBER;
|
||||||
|
hash = (53 * hash) + hashBoolean(getStale());
|
||||||
|
}
|
||||||
hash = (29 * hash) + getUnknownFields().hashCode();
|
hash = (29 * hash) + getUnknownFields().hashCode();
|
||||||
memoizedHashCode = hash;
|
memoizedHashCode = hash;
|
||||||
return hash;
|
return hash;
|
||||||
|
@ -4504,6 +4754,8 @@ public final class ClientProtos {
|
||||||
bitField0_ = (bitField0_ & ~0x00000002);
|
bitField0_ = (bitField0_ & ~0x00000002);
|
||||||
exists_ = false;
|
exists_ = false;
|
||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
|
stale_ = false;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4549,6 +4801,10 @@ public final class ClientProtos {
|
||||||
to_bitField0_ |= 0x00000002;
|
to_bitField0_ |= 0x00000002;
|
||||||
}
|
}
|
||||||
result.exists_ = exists_;
|
result.exists_ = exists_;
|
||||||
|
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
|
to_bitField0_ |= 0x00000004;
|
||||||
|
}
|
||||||
|
result.stale_ = stale_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
|
@ -4597,6 +4853,9 @@ public final class ClientProtos {
|
||||||
if (other.hasExists()) {
|
if (other.hasExists()) {
|
||||||
setExists(other.getExists());
|
setExists(other.getExists());
|
||||||
}
|
}
|
||||||
|
if (other.hasStale()) {
|
||||||
|
setStale(other.getStale());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -5076,6 +5335,55 @@ public final class ClientProtos {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional bool stale = 4 [default = false];
|
||||||
|
private boolean stale_ ;
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public boolean hasStale() {
|
||||||
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public boolean getStale() {
|
||||||
|
return stale_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder setStale(boolean value) {
|
||||||
|
bitField0_ |= 0x00000008;
|
||||||
|
stale_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional bool stale = 4 [default = false];</code>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* Whether or not the results are coming from possibly stale data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public Builder clearStale() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
stale_ = false;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:Result)
|
// @@protoc_insertion_point(builder_scope:Result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13340,6 +13648,16 @@ public final class ClientProtos {
|
||||||
* <code>optional bool reversed = 15 [default = false];</code>
|
* <code>optional bool reversed = 15 [default = false];</code>
|
||||||
*/
|
*/
|
||||||
boolean getReversed();
|
boolean getReversed();
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 16 [default = STRONG];
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
boolean hasConsistency();
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code Scan}
|
* Protobuf type {@code Scan}
|
||||||
|
@ -13500,6 +13818,17 @@ public final class ClientProtos {
|
||||||
reversed_ = input.readBool();
|
reversed_ = input.readBool();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 128: {
|
||||||
|
int rawValue = input.readEnum();
|
||||||
|
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency value = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.valueOf(rawValue);
|
||||||
|
if (value == null) {
|
||||||
|
unknownFields.mergeVarintField(16, rawValue);
|
||||||
|
} else {
|
||||||
|
bitField0_ |= 0x00002000;
|
||||||
|
consistency_ = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
|
@ -13846,6 +14175,22 @@ public final class ClientProtos {
|
||||||
return reversed_;
|
return reversed_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 16 [default = STRONG];
|
||||||
|
public static final int CONSISTENCY_FIELD_NUMBER = 16;
|
||||||
|
private org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency consistency_;
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public boolean hasConsistency() {
|
||||||
|
return ((bitField0_ & 0x00002000) == 0x00002000);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency() {
|
||||||
|
return consistency_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
column_ = java.util.Collections.emptyList();
|
column_ = java.util.Collections.emptyList();
|
||||||
attribute_ = java.util.Collections.emptyList();
|
attribute_ = java.util.Collections.emptyList();
|
||||||
|
@ -13862,6 +14207,7 @@ public final class ClientProtos {
|
||||||
loadColumnFamiliesOnDemand_ = false;
|
loadColumnFamiliesOnDemand_ = false;
|
||||||
small_ = false;
|
small_ = false;
|
||||||
reversed_ = false;
|
reversed_ = false;
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
|
@ -13938,6 +14284,9 @@ public final class ClientProtos {
|
||||||
if (((bitField0_ & 0x00001000) == 0x00001000)) {
|
if (((bitField0_ & 0x00001000) == 0x00001000)) {
|
||||||
output.writeBool(15, reversed_);
|
output.writeBool(15, reversed_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00002000) == 0x00002000)) {
|
||||||
|
output.writeEnum(16, consistency_.getNumber());
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14007,6 +14356,10 @@ public final class ClientProtos {
|
||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBoolSize(15, reversed_);
|
.computeBoolSize(15, reversed_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00002000) == 0x00002000)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeEnumSize(16, consistency_.getNumber());
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
|
@ -14099,6 +14452,11 @@ public final class ClientProtos {
|
||||||
result = result && (getReversed()
|
result = result && (getReversed()
|
||||||
== other.getReversed());
|
== other.getReversed());
|
||||||
}
|
}
|
||||||
|
result = result && (hasConsistency() == other.hasConsistency());
|
||||||
|
if (hasConsistency()) {
|
||||||
|
result = result &&
|
||||||
|
(getConsistency() == other.getConsistency());
|
||||||
|
}
|
||||||
result = result &&
|
result = result &&
|
||||||
getUnknownFields().equals(other.getUnknownFields());
|
getUnknownFields().equals(other.getUnknownFields());
|
||||||
return result;
|
return result;
|
||||||
|
@ -14172,6 +14530,10 @@ public final class ClientProtos {
|
||||||
hash = (37 * hash) + REVERSED_FIELD_NUMBER;
|
hash = (37 * hash) + REVERSED_FIELD_NUMBER;
|
||||||
hash = (53 * hash) + hashBoolean(getReversed());
|
hash = (53 * hash) + hashBoolean(getReversed());
|
||||||
}
|
}
|
||||||
|
if (hasConsistency()) {
|
||||||
|
hash = (37 * hash) + CONSISTENCY_FIELD_NUMBER;
|
||||||
|
hash = (53 * hash) + hashEnum(getConsistency());
|
||||||
|
}
|
||||||
hash = (29 * hash) + getUnknownFields().hashCode();
|
hash = (29 * hash) + getUnknownFields().hashCode();
|
||||||
memoizedHashCode = hash;
|
memoizedHashCode = hash;
|
||||||
return hash;
|
return hash;
|
||||||
|
@ -14342,6 +14704,8 @@ public final class ClientProtos {
|
||||||
bitField0_ = (bitField0_ & ~0x00002000);
|
bitField0_ = (bitField0_ & ~0x00002000);
|
||||||
reversed_ = false;
|
reversed_ = false;
|
||||||
bitField0_ = (bitField0_ & ~0x00004000);
|
bitField0_ = (bitField0_ & ~0x00004000);
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00008000);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14448,6 +14812,10 @@ public final class ClientProtos {
|
||||||
to_bitField0_ |= 0x00001000;
|
to_bitField0_ |= 0x00001000;
|
||||||
}
|
}
|
||||||
result.reversed_ = reversed_;
|
result.reversed_ = reversed_;
|
||||||
|
if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
|
||||||
|
to_bitField0_ |= 0x00002000;
|
||||||
|
}
|
||||||
|
result.consistency_ = consistency_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
|
@ -14555,6 +14923,9 @@ public final class ClientProtos {
|
||||||
if (other.hasReversed()) {
|
if (other.hasReversed()) {
|
||||||
setReversed(other.getReversed());
|
setReversed(other.getReversed());
|
||||||
}
|
}
|
||||||
|
if (other.hasConsistency()) {
|
||||||
|
setConsistency(other.getConsistency());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -15699,6 +16070,42 @@ public final class ClientProtos {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .Consistency consistency = 16 [default = STRONG];
|
||||||
|
private org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public boolean hasConsistency() {
|
||||||
|
return ((bitField0_ & 0x00008000) == 0x00008000);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency getConsistency() {
|
||||||
|
return consistency_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public Builder setConsistency(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00008000;
|
||||||
|
consistency_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional .Consistency consistency = 16 [default = STRONG];</code>
|
||||||
|
*/
|
||||||
|
public Builder clearConsistency() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00008000);
|
||||||
|
consistency_ = org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Consistency.STRONG;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:Scan)
|
// @@protoc_insertion_point(builder_scope:Scan)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30103,7 +30510,7 @@ public final class ClientProtos {
|
||||||
"o\032\nCell.proto\032\020Comparator.proto\"\037\n\016Autho" +
|
"o\032\nCell.proto\032\020Comparator.proto\"\037\n\016Autho" +
|
||||||
"rizations\022\r\n\005label\030\001 \003(\t\"$\n\016CellVisibili" +
|
"rizations\022\r\n\005label\030\001 \003(\t\"$\n\016CellVisibili" +
|
||||||
"ty\022\022\n\nexpression\030\001 \002(\t\"+\n\006Column\022\016\n\006fami" +
|
"ty\022\022\n\nexpression\030\001 \002(\t\"+\n\006Column\022\016\n\006fami" +
|
||||||
"ly\030\001 \002(\014\022\021\n\tqualifier\030\002 \003(\014\"\251\002\n\003Get\022\013\n\003r" +
|
"ly\030\001 \002(\014\022\021\n\tqualifier\030\002 \003(\014\"\324\002\n\003Get\022\013\n\003r" +
|
||||||
"ow\030\001 \002(\014\022\027\n\006column\030\002 \003(\0132\007.Column\022!\n\tatt" +
|
"ow\030\001 \002(\014\022\027\n\006column\030\002 \003(\0132\007.Column\022!\n\tatt" +
|
||||||
"ribute\030\003 \003(\0132\016.NameBytesPair\022\027\n\006filter\030\004" +
|
"ribute\030\003 \003(\0132\016.NameBytesPair\022\027\n\006filter\030\004" +
|
||||||
" \001(\0132\007.Filter\022\036\n\ntime_range\030\005 \001(\0132\n.Time" +
|
" \001(\0132\007.Filter\022\036\n\ntime_range\030\005 \001(\0132\n.Time" +
|
||||||
|
@ -30111,96 +30518,100 @@ public final class ClientProtos {
|
||||||
"blocks\030\007 \001(\010:\004true\022\023\n\013store_limit\030\010 \001(\r\022",
|
"blocks\030\007 \001(\010:\004true\022\023\n\013store_limit\030\010 \001(\r\022",
|
||||||
"\024\n\014store_offset\030\t \001(\r\022\035\n\016existence_only\030" +
|
"\024\n\014store_offset\030\t \001(\r\022\035\n\016existence_only\030" +
|
||||||
"\n \001(\010:\005false\022!\n\022closest_row_before\030\013 \001(\010" +
|
"\n \001(\010:\005false\022!\n\022closest_row_before\030\013 \001(\010" +
|
||||||
":\005false\"L\n\006Result\022\023\n\004cell\030\001 \003(\0132\005.Cell\022\035" +
|
":\005false\022)\n\013consistency\030\014 \001(\0162\014.Consisten" +
|
||||||
"\n\025associated_cell_count\030\002 \001(\005\022\016\n\006exists\030" +
|
"cy:\006STRONG\"b\n\006Result\022\023\n\004cell\030\001 \003(\0132\005.Cel" +
|
||||||
"\003 \001(\010\"A\n\nGetRequest\022 \n\006region\030\001 \002(\0132\020.Re" +
|
"l\022\035\n\025associated_cell_count\030\002 \001(\005\022\016\n\006exis" +
|
||||||
"gionSpecifier\022\021\n\003get\030\002 \002(\0132\004.Get\"&\n\013GetR" +
|
"ts\030\003 \001(\010\022\024\n\005stale\030\004 \001(\010:\005false\"A\n\nGetReq" +
|
||||||
"esponse\022\027\n\006result\030\001 \001(\0132\007.Result\"\200\001\n\tCon" +
|
"uest\022 \n\006region\030\001 \002(\0132\020.RegionSpecifier\022\021" +
|
||||||
"dition\022\013\n\003row\030\001 \002(\014\022\016\n\006family\030\002 \002(\014\022\021\n\tq" +
|
"\n\003get\030\002 \002(\0132\004.Get\"&\n\013GetResponse\022\027\n\006resu" +
|
||||||
"ualifier\030\003 \002(\014\022\"\n\014compare_type\030\004 \002(\0162\014.C" +
|
"lt\030\001 \001(\0132\007.Result\"\200\001\n\tCondition\022\013\n\003row\030\001" +
|
||||||
"ompareType\022\037\n\ncomparator\030\005 \002(\0132\013.Compara",
|
" \002(\014\022\016\n\006family\030\002 \002(\014\022\021\n\tqualifier\030\003 \002(\014\022",
|
||||||
"tor\"\265\006\n\rMutationProto\022\013\n\003row\030\001 \001(\014\0220\n\013mu" +
|
"\"\n\014compare_type\030\004 \002(\0162\014.CompareType\022\037\n\nc" +
|
||||||
"tate_type\030\002 \001(\0162\033.MutationProto.Mutation" +
|
"omparator\030\005 \002(\0132\013.Comparator\"\265\006\n\rMutatio" +
|
||||||
"Type\0220\n\014column_value\030\003 \003(\0132\032.MutationPro" +
|
"nProto\022\013\n\003row\030\001 \001(\014\0220\n\013mutate_type\030\002 \001(\016" +
|
||||||
"to.ColumnValue\022\021\n\ttimestamp\030\004 \001(\004\022!\n\tatt" +
|
"2\033.MutationProto.MutationType\0220\n\014column_" +
|
||||||
"ribute\030\005 \003(\0132\016.NameBytesPair\022:\n\ndurabili" +
|
"value\030\003 \003(\0132\032.MutationProto.ColumnValue\022" +
|
||||||
"ty\030\006 \001(\0162\031.MutationProto.Durability:\013USE" +
|
"\021\n\ttimestamp\030\004 \001(\004\022!\n\tattribute\030\005 \003(\0132\016." +
|
||||||
"_DEFAULT\022\036\n\ntime_range\030\007 \001(\0132\n.TimeRange" +
|
"NameBytesPair\022:\n\ndurability\030\006 \001(\0162\031.Muta" +
|
||||||
"\022\035\n\025associated_cell_count\030\010 \001(\005\022\r\n\005nonce" +
|
"tionProto.Durability:\013USE_DEFAULT\022\036\n\ntim" +
|
||||||
"\030\t \001(\004\032\347\001\n\013ColumnValue\022\016\n\006family\030\001 \002(\014\022B" +
|
"e_range\030\007 \001(\0132\n.TimeRange\022\035\n\025associated_" +
|
||||||
"\n\017qualifier_value\030\002 \003(\0132).MutationProto.",
|
"cell_count\030\010 \001(\005\022\r\n\005nonce\030\t \001(\004\032\347\001\n\013Colu",
|
||||||
"ColumnValue.QualifierValue\032\203\001\n\016Qualifier" +
|
"mnValue\022\016\n\006family\030\001 \002(\014\022B\n\017qualifier_val" +
|
||||||
"Value\022\021\n\tqualifier\030\001 \001(\014\022\r\n\005value\030\002 \001(\014\022" +
|
"ue\030\002 \003(\0132).MutationProto.ColumnValue.Qua" +
|
||||||
"\021\n\ttimestamp\030\003 \001(\004\022.\n\013delete_type\030\004 \001(\0162" +
|
"lifierValue\032\203\001\n\016QualifierValue\022\021\n\tqualif" +
|
||||||
"\031.MutationProto.DeleteType\022\014\n\004tags\030\005 \001(\014" +
|
"ier\030\001 \001(\014\022\r\n\005value\030\002 \001(\014\022\021\n\ttimestamp\030\003 " +
|
||||||
"\"W\n\nDurability\022\017\n\013USE_DEFAULT\020\000\022\014\n\010SKIP_" +
|
"\001(\004\022.\n\013delete_type\030\004 \001(\0162\031.MutationProto" +
|
||||||
"WAL\020\001\022\r\n\tASYNC_WAL\020\002\022\014\n\010SYNC_WAL\020\003\022\r\n\tFS" +
|
".DeleteType\022\014\n\004tags\030\005 \001(\014\"W\n\nDurability\022" +
|
||||||
"YNC_WAL\020\004\">\n\014MutationType\022\n\n\006APPEND\020\000\022\r\n" +
|
"\017\n\013USE_DEFAULT\020\000\022\014\n\010SKIP_WAL\020\001\022\r\n\tASYNC_" +
|
||||||
"\tINCREMENT\020\001\022\007\n\003PUT\020\002\022\n\n\006DELETE\020\003\"p\n\nDel" +
|
"WAL\020\002\022\014\n\010SYNC_WAL\020\003\022\r\n\tFSYNC_WAL\020\004\">\n\014Mu" +
|
||||||
"eteType\022\026\n\022DELETE_ONE_VERSION\020\000\022\034\n\030DELET" +
|
"tationType\022\n\n\006APPEND\020\000\022\r\n\tINCREMENT\020\001\022\007\n" +
|
||||||
"E_MULTIPLE_VERSIONS\020\001\022\021\n\rDELETE_FAMILY\020\002",
|
"\003PUT\020\002\022\n\n\006DELETE\020\003\"p\n\nDeleteType\022\026\n\022DELE",
|
||||||
"\022\031\n\025DELETE_FAMILY_VERSION\020\003\"\207\001\n\rMutateRe" +
|
"TE_ONE_VERSION\020\000\022\034\n\030DELETE_MULTIPLE_VERS" +
|
||||||
"quest\022 \n\006region\030\001 \002(\0132\020.RegionSpecifier\022" +
|
"IONS\020\001\022\021\n\rDELETE_FAMILY\020\002\022\031\n\025DELETE_FAMI" +
|
||||||
" \n\010mutation\030\002 \002(\0132\016.MutationProto\022\035\n\tcon" +
|
"LY_VERSION\020\003\"\207\001\n\rMutateRequest\022 \n\006region" +
|
||||||
"dition\030\003 \001(\0132\n.Condition\022\023\n\013nonce_group\030" +
|
"\030\001 \002(\0132\020.RegionSpecifier\022 \n\010mutation\030\002 \002" +
|
||||||
"\004 \001(\004\"<\n\016MutateResponse\022\027\n\006result\030\001 \001(\0132" +
|
"(\0132\016.MutationProto\022\035\n\tcondition\030\003 \001(\0132\n." +
|
||||||
"\007.Result\022\021\n\tprocessed\030\002 \001(\010\"\375\002\n\004Scan\022\027\n\006" +
|
"Condition\022\023\n\013nonce_group\030\004 \001(\004\"<\n\016Mutate" +
|
||||||
"column\030\001 \003(\0132\007.Column\022!\n\tattribute\030\002 \003(\013" +
|
"Response\022\027\n\006result\030\001 \001(\0132\007.Result\022\021\n\tpro" +
|
||||||
"2\016.NameBytesPair\022\021\n\tstart_row\030\003 \001(\014\022\020\n\010s" +
|
"cessed\030\002 \001(\010\"\250\003\n\004Scan\022\027\n\006column\030\001 \003(\0132\007." +
|
||||||
"top_row\030\004 \001(\014\022\027\n\006filter\030\005 \001(\0132\007.Filter\022\036" +
|
"Column\022!\n\tattribute\030\002 \003(\0132\016.NameBytesPai" +
|
||||||
"\n\ntime_range\030\006 \001(\0132\n.TimeRange\022\027\n\014max_ve",
|
"r\022\021\n\tstart_row\030\003 \001(\014\022\020\n\010stop_row\030\004 \001(\014\022\027",
|
||||||
"rsions\030\007 \001(\r:\0011\022\032\n\014cache_blocks\030\010 \001(\010:\004t" +
|
"\n\006filter\030\005 \001(\0132\007.Filter\022\036\n\ntime_range\030\006 " +
|
||||||
"rue\022\022\n\nbatch_size\030\t \001(\r\022\027\n\017max_result_si" +
|
"\001(\0132\n.TimeRange\022\027\n\014max_versions\030\007 \001(\r:\0011" +
|
||||||
"ze\030\n \001(\004\022\023\n\013store_limit\030\013 \001(\r\022\024\n\014store_o" +
|
"\022\032\n\014cache_blocks\030\010 \001(\010:\004true\022\022\n\nbatch_si" +
|
||||||
"ffset\030\014 \001(\r\022&\n\036load_column_families_on_d" +
|
"ze\030\t \001(\r\022\027\n\017max_result_size\030\n \001(\004\022\023\n\013sto" +
|
||||||
"emand\030\r \001(\010\022\r\n\005small\030\016 \001(\010\022\027\n\010reversed\030\017" +
|
"re_limit\030\013 \001(\r\022\024\n\014store_offset\030\014 \001(\r\022&\n\036" +
|
||||||
" \001(\010:\005false\"\236\001\n\013ScanRequest\022 \n\006region\030\001 " +
|
"load_column_families_on_demand\030\r \001(\010\022\r\n\005" +
|
||||||
"\001(\0132\020.RegionSpecifier\022\023\n\004scan\030\002 \001(\0132\005.Sc" +
|
"small\030\016 \001(\010\022\027\n\010reversed\030\017 \001(\010:\005false\022)\n\013" +
|
||||||
"an\022\022\n\nscanner_id\030\003 \001(\004\022\026\n\016number_of_rows" +
|
"consistency\030\020 \001(\0162\014.Consistency:\006STRONG\"" +
|
||||||
"\030\004 \001(\r\022\025\n\rclose_scanner\030\005 \001(\010\022\025\n\rnext_ca" +
|
"\236\001\n\013ScanRequest\022 \n\006region\030\001 \001(\0132\020.Region" +
|
||||||
"ll_seq\030\006 \001(\004\"y\n\014ScanResponse\022\030\n\020cells_pe",
|
"Specifier\022\023\n\004scan\030\002 \001(\0132\005.Scan\022\022\n\nscanne",
|
||||||
"r_result\030\001 \003(\r\022\022\n\nscanner_id\030\002 \001(\004\022\024\n\014mo" +
|
"r_id\030\003 \001(\004\022\026\n\016number_of_rows\030\004 \001(\r\022\025\n\rcl" +
|
||||||
"re_results\030\003 \001(\010\022\013\n\003ttl\030\004 \001(\r\022\030\n\007results" +
|
"ose_scanner\030\005 \001(\010\022\025\n\rnext_call_seq\030\006 \001(\004" +
|
||||||
"\030\005 \003(\0132\007.Result\"\263\001\n\024BulkLoadHFileRequest" +
|
"\"y\n\014ScanResponse\022\030\n\020cells_per_result\030\001 \003" +
|
||||||
"\022 \n\006region\030\001 \002(\0132\020.RegionSpecifier\0225\n\013fa" +
|
"(\r\022\022\n\nscanner_id\030\002 \001(\004\022\024\n\014more_results\030\003" +
|
||||||
"mily_path\030\002 \003(\0132 .BulkLoadHFileRequest.F" +
|
" \001(\010\022\013\n\003ttl\030\004 \001(\r\022\030\n\007results\030\005 \003(\0132\007.Res" +
|
||||||
"amilyPath\022\026\n\016assign_seq_num\030\003 \001(\010\032*\n\nFam" +
|
"ult\"\263\001\n\024BulkLoadHFileRequest\022 \n\006region\030\001" +
|
||||||
"ilyPath\022\016\n\006family\030\001 \002(\014\022\014\n\004path\030\002 \002(\t\"\'\n" +
|
" \002(\0132\020.RegionSpecifier\0225\n\013family_path\030\002 " +
|
||||||
"\025BulkLoadHFileResponse\022\016\n\006loaded\030\001 \002(\010\"a" +
|
"\003(\0132 .BulkLoadHFileRequest.FamilyPath\022\026\n" +
|
||||||
"\n\026CoprocessorServiceCall\022\013\n\003row\030\001 \002(\014\022\024\n" +
|
"\016assign_seq_num\030\003 \001(\010\032*\n\nFamilyPath\022\016\n\006f" +
|
||||||
"\014service_name\030\002 \002(\t\022\023\n\013method_name\030\003 \002(\t",
|
"amily\030\001 \002(\014\022\014\n\004path\030\002 \002(\t\"\'\n\025BulkLoadHFi",
|
||||||
"\022\017\n\007request\030\004 \002(\014\"9\n\030CoprocessorServiceR" +
|
"leResponse\022\016\n\006loaded\030\001 \002(\010\"a\n\026Coprocesso" +
|
||||||
"esult\022\035\n\005value\030\001 \001(\0132\016.NameBytesPair\"d\n\031" +
|
"rServiceCall\022\013\n\003row\030\001 \002(\014\022\024\n\014service_nam" +
|
||||||
"CoprocessorServiceRequest\022 \n\006region\030\001 \002(" +
|
"e\030\002 \002(\t\022\023\n\013method_name\030\003 \002(\t\022\017\n\007request\030" +
|
||||||
"\0132\020.RegionSpecifier\022%\n\004call\030\002 \002(\0132\027.Copr" +
|
"\004 \002(\014\"9\n\030CoprocessorServiceResult\022\035\n\005val" +
|
||||||
"ocessorServiceCall\"]\n\032CoprocessorService" +
|
"ue\030\001 \001(\0132\016.NameBytesPair\"d\n\031CoprocessorS" +
|
||||||
"Response\022 \n\006region\030\001 \002(\0132\020.RegionSpecifi" +
|
"erviceRequest\022 \n\006region\030\001 \002(\0132\020.RegionSp" +
|
||||||
"er\022\035\n\005value\030\002 \002(\0132\016.NameBytesPair\"{\n\006Act" +
|
"ecifier\022%\n\004call\030\002 \002(\0132\027.CoprocessorServi" +
|
||||||
"ion\022\r\n\005index\030\001 \001(\r\022 \n\010mutation\030\002 \001(\0132\016.M" +
|
"ceCall\"]\n\032CoprocessorServiceResponse\022 \n\006" +
|
||||||
"utationProto\022\021\n\003get\030\003 \001(\0132\004.Get\022-\n\014servi" +
|
"region\030\001 \002(\0132\020.RegionSpecifier\022\035\n\005value\030" +
|
||||||
"ce_call\030\004 \001(\0132\027.CoprocessorServiceCall\"Y",
|
"\002 \002(\0132\016.NameBytesPair\"{\n\006Action\022\r\n\005index",
|
||||||
"\n\014RegionAction\022 \n\006region\030\001 \002(\0132\020.RegionS" +
|
"\030\001 \001(\r\022 \n\010mutation\030\002 \001(\0132\016.MutationProto" +
|
||||||
"pecifier\022\016\n\006atomic\030\002 \001(\010\022\027\n\006action\030\003 \003(\013" +
|
"\022\021\n\003get\030\003 \001(\0132\004.Get\022-\n\014service_call\030\004 \001(" +
|
||||||
"2\007.Action\"\221\001\n\021ResultOrException\022\r\n\005index" +
|
"\0132\027.CoprocessorServiceCall\"Y\n\014RegionActi" +
|
||||||
"\030\001 \001(\r\022\027\n\006result\030\002 \001(\0132\007.Result\022!\n\texcep" +
|
"on\022 \n\006region\030\001 \002(\0132\020.RegionSpecifier\022\016\n\006" +
|
||||||
"tion\030\003 \001(\0132\016.NameBytesPair\0221\n\016service_re" +
|
"atomic\030\002 \001(\010\022\027\n\006action\030\003 \003(\0132\007.Action\"\221\001" +
|
||||||
"sult\030\004 \001(\0132\031.CoprocessorServiceResult\"f\n" +
|
"\n\021ResultOrException\022\r\n\005index\030\001 \001(\r\022\027\n\006re" +
|
||||||
"\022RegionActionResult\022-\n\021resultOrException" +
|
"sult\030\002 \001(\0132\007.Result\022!\n\texception\030\003 \001(\0132\016" +
|
||||||
"\030\001 \003(\0132\022.ResultOrException\022!\n\texception\030" +
|
".NameBytesPair\0221\n\016service_result\030\004 \001(\0132\031" +
|
||||||
"\002 \001(\0132\016.NameBytesPair\"G\n\014MultiRequest\022#\n" +
|
".CoprocessorServiceResult\"f\n\022RegionActio" +
|
||||||
"\014regionAction\030\001 \003(\0132\r.RegionAction\022\022\n\nno",
|
"nResult\022-\n\021resultOrException\030\001 \003(\0132\022.Res",
|
||||||
"nceGroup\030\002 \001(\004\"@\n\rMultiResponse\022/\n\022regio" +
|
"ultOrException\022!\n\texception\030\002 \001(\0132\016.Name" +
|
||||||
"nActionResult\030\001 \003(\0132\023.RegionActionResult" +
|
"BytesPair\"G\n\014MultiRequest\022#\n\014regionActio" +
|
||||||
"2\261\002\n\rClientService\022 \n\003Get\022\013.GetRequest\032\014" +
|
"n\030\001 \003(\0132\r.RegionAction\022\022\n\nnonceGroup\030\002 \001" +
|
||||||
".GetResponse\022)\n\006Mutate\022\016.MutateRequest\032\017" +
|
"(\004\"@\n\rMultiResponse\022/\n\022regionActionResul" +
|
||||||
".MutateResponse\022#\n\004Scan\022\014.ScanRequest\032\r." +
|
"t\030\001 \003(\0132\023.RegionActionResult*\'\n\013Consiste" +
|
||||||
"ScanResponse\022>\n\rBulkLoadHFile\022\025.BulkLoad" +
|
"ncy\022\n\n\006STRONG\020\000\022\014\n\010TIMELINE\020\0012\261\002\n\rClient" +
|
||||||
"HFileRequest\032\026.BulkLoadHFileResponse\022F\n\013" +
|
"Service\022 \n\003Get\022\013.GetRequest\032\014.GetRespons" +
|
||||||
"ExecService\022\032.CoprocessorServiceRequest\032" +
|
"e\022)\n\006Mutate\022\016.MutateRequest\032\017.MutateResp" +
|
||||||
"\033.CoprocessorServiceResponse\022&\n\005Multi\022\r." +
|
"onse\022#\n\004Scan\022\014.ScanRequest\032\r.ScanRespons" +
|
||||||
"MultiRequest\032\016.MultiResponseBB\n*org.apac",
|
"e\022>\n\rBulkLoadHFile\022\025.BulkLoadHFileReques",
|
||||||
"he.hadoop.hbase.protobuf.generatedB\014Clie" +
|
"t\032\026.BulkLoadHFileResponse\022F\n\013ExecService" +
|
||||||
"ntProtosH\001\210\001\001\240\001\001"
|
"\022\032.CoprocessorServiceRequest\032\033.Coprocess" +
|
||||||
|
"orServiceResponse\022&\n\005Multi\022\r.MultiReques" +
|
||||||
|
"t\032\016.MultiResponseBB\n*org.apache.hadoop.h" +
|
||||||
|
"base.protobuf.generatedB\014ClientProtosH\001\210" +
|
||||||
|
"\001\001\240\001\001"
|
||||||
};
|
};
|
||||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
|
@ -30230,13 +30641,13 @@ public final class ClientProtos {
|
||||||
internal_static_Get_fieldAccessorTable = new
|
internal_static_Get_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_Get_descriptor,
|
internal_static_Get_descriptor,
|
||||||
new java.lang.String[] { "Row", "Column", "Attribute", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "StoreLimit", "StoreOffset", "ExistenceOnly", "ClosestRowBefore", });
|
new java.lang.String[] { "Row", "Column", "Attribute", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "StoreLimit", "StoreOffset", "ExistenceOnly", "ClosestRowBefore", "Consistency", });
|
||||||
internal_static_Result_descriptor =
|
internal_static_Result_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(4);
|
getDescriptor().getMessageTypes().get(4);
|
||||||
internal_static_Result_fieldAccessorTable = new
|
internal_static_Result_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_Result_descriptor,
|
internal_static_Result_descriptor,
|
||||||
new java.lang.String[] { "Cell", "AssociatedCellCount", "Exists", });
|
new java.lang.String[] { "Cell", "AssociatedCellCount", "Exists", "Stale", });
|
||||||
internal_static_GetRequest_descriptor =
|
internal_static_GetRequest_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(5);
|
getDescriptor().getMessageTypes().get(5);
|
||||||
internal_static_GetRequest_fieldAccessorTable = new
|
internal_static_GetRequest_fieldAccessorTable = new
|
||||||
|
@ -30290,7 +30701,7 @@ public final class ClientProtos {
|
||||||
internal_static_Scan_fieldAccessorTable = new
|
internal_static_Scan_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_Scan_descriptor,
|
internal_static_Scan_descriptor,
|
||||||
new java.lang.String[] { "Column", "Attribute", "StartRow", "StopRow", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "BatchSize", "MaxResultSize", "StoreLimit", "StoreOffset", "LoadColumnFamiliesOnDemand", "Small", "Reversed", });
|
new java.lang.String[] { "Column", "Attribute", "StartRow", "StopRow", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "BatchSize", "MaxResultSize", "StoreLimit", "StoreOffset", "LoadColumnFamiliesOnDemand", "Small", "Reversed", "Consistency", });
|
||||||
internal_static_ScanRequest_descriptor =
|
internal_static_ScanRequest_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(12);
|
getDescriptor().getMessageTypes().get(12);
|
||||||
internal_static_ScanRequest_fieldAccessorTable = new
|
internal_static_ScanRequest_fieldAccessorTable = new
|
||||||
|
|
|
@ -51,6 +51,14 @@ message Column {
|
||||||
repeated bytes qualifier = 2;
|
repeated bytes qualifier = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consistency defines the expected consistency level for an operation.
|
||||||
|
*/
|
||||||
|
enum Consistency {
|
||||||
|
STRONG = 0;
|
||||||
|
TIMELINE = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The protocol buffer version of Get.
|
* The protocol buffer version of Get.
|
||||||
* Unless existence_only is specified, return all the requested data
|
* Unless existence_only is specified, return all the requested data
|
||||||
|
@ -75,6 +83,8 @@ message Get {
|
||||||
// If the row to get doesn't exist, return the
|
// If the row to get doesn't exist, return the
|
||||||
// closest row before.
|
// closest row before.
|
||||||
optional bool closest_row_before = 11 [default = false];
|
optional bool closest_row_before = 11 [default = false];
|
||||||
|
|
||||||
|
optional Consistency consistency = 12 [default = STRONG];
|
||||||
}
|
}
|
||||||
|
|
||||||
message Result {
|
message Result {
|
||||||
|
@ -92,6 +102,9 @@ message Result {
|
||||||
// used for Get to check existence only. Not set if existence_only was not set to true
|
// used for Get to check existence only. Not set if existence_only was not set to true
|
||||||
// in the query.
|
// in the query.
|
||||||
optional bool exists = 3;
|
optional bool exists = 3;
|
||||||
|
|
||||||
|
// Whether or not the results are coming from possibly stale data
|
||||||
|
optional bool stale = 4 [default = false];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -233,6 +246,7 @@ message Scan {
|
||||||
optional bool load_column_families_on_demand = 13; /* DO NOT add defaults to load_column_families_on_demand. */
|
optional bool load_column_families_on_demand = 13; /* DO NOT add defaults to load_column_families_on_demand. */
|
||||||
optional bool small = 14;
|
optional bool small = 14;
|
||||||
optional bool reversed = 15 [default = false];
|
optional bool reversed = 15 [default = false];
|
||||||
|
optional Consistency consistency = 16 [default = STRONG];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -62,6 +62,7 @@ module HBaseConstants
|
||||||
VISIBILITY="VISIBILITY"
|
VISIBILITY="VISIBILITY"
|
||||||
AUTHORIZATIONS = "AUTHORIZATIONS"
|
AUTHORIZATIONS = "AUTHORIZATIONS"
|
||||||
SKIP_FLUSH = 'SKIP_FLUSH'
|
SKIP_FLUSH = 'SKIP_FLUSH'
|
||||||
|
CONSISTENCY = "CONSISTENCY"
|
||||||
|
|
||||||
# Load constants from hbase java API
|
# Load constants from hbase java API
|
||||||
def self.promote_constants(constants)
|
def self.promote_constants(constants)
|
||||||
|
|
|
@ -270,6 +270,7 @@ EOF
|
||||||
filter = args.delete(FILTER) if args[FILTER]
|
filter = args.delete(FILTER) if args[FILTER]
|
||||||
attributes = args[ATTRIBUTES]
|
attributes = args[ATTRIBUTES]
|
||||||
authorizations = args[AUTHORIZATIONS]
|
authorizations = args[AUTHORIZATIONS]
|
||||||
|
consistency = args.delete(CONSISTENCY) if args[CONSISTENCY]
|
||||||
unless args.empty?
|
unless args.empty?
|
||||||
columns = args[COLUMN] || args[COLUMNS]
|
columns = args[COLUMN] || args[COLUMNS]
|
||||||
if args[VERSIONS]
|
if args[VERSIONS]
|
||||||
|
@ -317,8 +318,8 @@ EOF
|
||||||
get.setTimeStamp(ts.to_i) if args[TIMESTAMP]
|
get.setTimeStamp(ts.to_i) if args[TIMESTAMP]
|
||||||
get.setTimeRange(args[TIMERANGE][0], args[TIMERANGE][1]) if args[TIMERANGE]
|
get.setTimeRange(args[TIMERANGE][0], args[TIMERANGE][1]) if args[TIMERANGE]
|
||||||
end
|
end
|
||||||
set_attributes(get, attributes) if attributes
|
set_attributes(get, attributes) if attributes
|
||||||
set_authorizations(get, authorizations) if authorizations
|
set_authorizations(get, authorizations) if authorizations
|
||||||
end
|
end
|
||||||
|
|
||||||
unless filter.class == String
|
unless filter.class == String
|
||||||
|
@ -327,6 +328,8 @@ EOF
|
||||||
get.setFilter(org.apache.hadoop.hbase.filter.ParseFilter.new.parseFilterString(filter))
|
get.setFilter(org.apache.hadoop.hbase.filter.ParseFilter.new.parseFilterString(filter))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
get.setConsistency(org.apache.hadoop.hbase.client.Consistency.valueOf(consistency)) if consistency
|
||||||
|
|
||||||
# Call hbase for the results
|
# Call hbase for the results
|
||||||
result = @table.get(get)
|
result = @table.get(get)
|
||||||
return nil if result.isEmpty
|
return nil if result.isEmpty
|
||||||
|
@ -385,6 +388,7 @@ EOF
|
||||||
raw = args["RAW"] || false
|
raw = args["RAW"] || false
|
||||||
attributes = args[ATTRIBUTES]
|
attributes = args[ATTRIBUTES]
|
||||||
authorizations = args[AUTHORIZATIONS]
|
authorizations = args[AUTHORIZATIONS]
|
||||||
|
consistency = args[CONSISTENCY]
|
||||||
# Normalize column names
|
# Normalize column names
|
||||||
columns = [columns] if columns.class == String
|
columns = [columns] if columns.class == String
|
||||||
unless columns.kind_of?(Array)
|
unless columns.kind_of?(Array)
|
||||||
|
@ -421,6 +425,7 @@ EOF
|
||||||
scan.setRaw(raw)
|
scan.setRaw(raw)
|
||||||
set_attributes(scan, attributes) if attributes
|
set_attributes(scan, attributes) if attributes
|
||||||
set_authorizations(scan, authorizations) if authorizations
|
set_authorizations(scan, authorizations) if authorizations
|
||||||
|
scan.setConsistency(org.apache.hadoop.hbase.client.Consistency.valueOf(consistency)) if consistency
|
||||||
else
|
else
|
||||||
scan = org.apache.hadoop.hbase.client.Scan.new
|
scan = org.apache.hadoop.hbase.client.Scan.new
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,8 +37,9 @@ a dictionary of column(s), timestamp, timerange and versions. Examples:
|
||||||
hbase> get 't1', 'r1', 'c1'
|
hbase> get 't1', 'r1', 'c1'
|
||||||
hbase> get 't1', 'r1', 'c1', 'c2'
|
hbase> get 't1', 'r1', 'c1', 'c2'
|
||||||
hbase> get 't1', 'r1', ['c1', 'c2']
|
hbase> get 't1', 'r1', ['c1', 'c2']
|
||||||
hbsase> get 't1','r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
|
hbase> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
|
||||||
hbsase> get 't1','r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}
|
hbase> get 't1', 'r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}
|
||||||
|
hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE'}
|
||||||
|
|
||||||
Besides the default 'toStringBinary' format, 'get' also supports custom formatting by
|
Besides the default 'toStringBinary' format, 'get' also supports custom formatting by
|
||||||
column. A user can define a FORMATTER by adding it to the column name in the get
|
column. A user can define a FORMATTER by adding it to the column name in the get
|
||||||
|
@ -69,6 +70,7 @@ would be:
|
||||||
hbase> t.get 'r1', 'c1'
|
hbase> t.get 'r1', 'c1'
|
||||||
hbase> t.get 'r1', 'c1', 'c2'
|
hbase> t.get 'r1', 'c1', 'c2'
|
||||||
hbase> t.get 'r1', ['c1', 'c2']
|
hbase> t.get 'r1', ['c1', 'c2']
|
||||||
|
hbase> t.get 'r1', {CONSISTENCY => 'TIMELINE'}
|
||||||
EOF
|
EOF
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ Some examples:
|
||||||
(QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))"}
|
(QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))"}
|
||||||
hbase> scan 't1', {FILTER =>
|
hbase> scan 't1', {FILTER =>
|
||||||
org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
|
org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
|
||||||
|
hbase> scan 't1', {CONSISTENCY => 'TIMELINE'}
|
||||||
For setting the Operation Attributes
|
For setting the Operation Attributes
|
||||||
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}
|
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}
|
||||||
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}
|
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}
|
||||||
|
|
Loading…
Reference in New Issue