HBASE-11424 Avoid usage of CellUtil#getTagArray(Cell cell) within server. (Anoop)
This commit is contained in:
parent
cac468f33f
commit
7c1135b3e3
|
@ -1108,7 +1108,8 @@ public final class ProtobufUtil {
|
|||
kv.getValueArray(), kv.getValueOffset(), kv.getValueLength()));
|
||||
valueBuilder.setTimestamp(kv.getTimestamp());
|
||||
if(cell.getTagsLength() > 0) {
|
||||
valueBuilder.setTags(ByteString.copyFrom(CellUtil.getTagArray(kv)));
|
||||
valueBuilder.setTags(HBaseZeroCopyByteString.wrap(kv.getTagsArray(), kv.getTagsOffset(),
|
||||
kv.getTagsLength()));
|
||||
}
|
||||
if (type == MutationType.DELETE) {
|
||||
KeyValue.Type keyValueType = KeyValue.Type.codeToType(kv.getType());
|
||||
|
|
|
@ -83,6 +83,13 @@ public final class CellUtil {
|
|||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns tag value in a new byte array. If server-side, use
|
||||
* {@link Tag#getBuffer()} with appropriate {@link Tag#getTagOffset()} and
|
||||
* {@link Tag#getTagLength()} instead to save on allocations.
|
||||
* @param cell
|
||||
* @return tag value in a new byte array.
|
||||
*/
|
||||
public static byte[] getTagArray(Cell cell){
|
||||
byte[] output = new byte[cell.getTagsLength()];
|
||||
copyTagTo(cell, output, 0);
|
||||
|
|
|
@ -130,6 +130,13 @@ public class Tag {
|
|||
return this.offset + INFRASTRUCTURE_SIZE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns tag value in a new byte array.
|
||||
* Primarily for use client-side. If server-side, use
|
||||
* {@link #getBuffer()} with appropriate {@link #getTagOffset()} and {@link #getTagLength()}
|
||||
* instead to save on allocations.
|
||||
* @return tag value in a new byte array.
|
||||
*/
|
||||
public byte[] getValue() {
|
||||
int tagLength = getTagLength();
|
||||
byte[] tag = new byte[tagLength];
|
||||
|
|
|
@ -685,8 +685,8 @@ public class AccessControlLists {
|
|||
public static List<Permission> getCellPermissionsForUser(User user, Cell cell)
|
||||
throws IOException {
|
||||
List<Permission> results = Lists.newArrayList();
|
||||
byte[] tags = CellUtil.getTagArray(cell);
|
||||
Iterator<Tag> tagsIterator = CellUtil.tagsIterator(tags, 0, tags.length);
|
||||
Iterator<Tag> tagsIterator = CellUtil.tagsIterator(cell.getTagsArray(), cell.getTagsOffset(),
|
||||
cell.getTagsLength());
|
||||
while (tagsIterator.hasNext()) {
|
||||
Tag tag = tagsIterator.next();
|
||||
if (tag.getType() == ACL_TAG_TYPE) {
|
||||
|
|
|
@ -88,7 +88,6 @@ import org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress;
|
|||
import org.apache.hadoop.hbase.regionserver.RegionScanner;
|
||||
import org.apache.hadoop.hbase.regionserver.ScanType;
|
||||
import org.apache.hadoop.hbase.regionserver.Store;
|
||||
import org.apache.hadoop.hbase.regionserver.StoreFile;
|
||||
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
|
||||
import org.apache.hadoop.hbase.security.AccessDeniedException;
|
||||
import org.apache.hadoop.hbase.security.User;
|
||||
|
@ -753,8 +752,8 @@ public class AccessController extends BaseRegionObserver
|
|||
List<Cell> newCells = Lists.newArrayList();
|
||||
for (Cell cell: e.getValue()) {
|
||||
List<Tag> tags = Lists.newArrayList(new Tag(AccessControlLists.ACL_TAG_TYPE, perms));
|
||||
byte[] tagBytes = CellUtil.getTagArray(cell);
|
||||
Iterator<Tag> tagIterator = CellUtil.tagsIterator(tagBytes, 0, tagBytes.length);
|
||||
Iterator<Tag> tagIterator = CellUtil.tagsIterator(cell.getTagsArray(),
|
||||
cell.getTagsOffset(), cell.getTagsLength());
|
||||
while (tagIterator.hasNext()) {
|
||||
tags.add(tagIterator.next());
|
||||
}
|
||||
|
@ -1808,14 +1807,14 @@ public class AccessController extends BaseRegionObserver
|
|||
List<Tag> tags = Lists.newArrayList();
|
||||
ListMultimap<String,Permission> perms = ArrayListMultimap.create();
|
||||
if (oldCell != null) {
|
||||
byte[] tagBytes = CellUtil.getTagArray(oldCell);
|
||||
Iterator<Tag> tagIterator = CellUtil.tagsIterator(tagBytes, 0, tagBytes.length);
|
||||
Iterator<Tag> tagIterator = CellUtil.tagsIterator(oldCell.getTagsArray(),
|
||||
oldCell.getTagsOffset(), oldCell.getTagsLength());
|
||||
while (tagIterator.hasNext()) {
|
||||
Tag tag = tagIterator.next();
|
||||
if (tag.getType() != AccessControlLists.ACL_TAG_TYPE) {
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace("Carrying forward tag from " + oldCell + ": type " + tag.getType() +
|
||||
" length " + tag.getValue().length);
|
||||
" length " + tag.getTagLength());
|
||||
}
|
||||
tags.add(tag);
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue