http://git-wip-us.apache.org/repos/asf/hbase/blob/a9b671b3/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java index 104cb5b..e601af7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java @@ -40,7 +40,9 @@ import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.HConstants.OperationStatusCode; import org.apache.hadoop.hbase.Tag; +import org.apache.hadoop.hbase.ArrayBackedTag; import org.apache.hadoop.hbase.TagType; +import org.apache.hadoop.hbase.TagUtil; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; @@ -58,6 +60,7 @@ import org.apache.hadoop.hbase.security.visibility.expression.ExpressionNode; import org.apache.hadoop.hbase.security.visibility.expression.LeafExpressionNode; import org.apache.hadoop.hbase.security.visibility.expression.NonLeafExpressionNode; import org.apache.hadoop.hbase.security.visibility.expression.Operator; +import org.apache.hadoop.hbase.util.ByteBufferUtils; import org.apache.hadoop.hbase.util.Bytes; /** @@ -73,7 +76,7 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer private static final byte[] DUMMY_VALUE = new byte[0]; private static final byte STRING_SERIALIZATION_FORMAT = 2; - private static final Tag STRING_SERIALIZATION_FORMAT_TAG = new Tag( + private static final Tag STRING_SERIALIZATION_FORMAT_TAG = new ArrayBackedTag( TagType.VISIBILITY_EXP_SERIALIZATION_FORMAT_TAG_TYPE, new byte[] { STRING_SERIALIZATION_FORMAT }); private final ExpressionParser expressionParser = new ExpressionParser(); @@ -281,28 +284,27 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer boolean visibilityTagPresent = false; // Save an object allocation where we can if (cell.getTagsLength() > 0) { - Iterator<Tag> tagsItr = CellUtil.tagsIterator(cell.getTagsArray(), cell.getTagsOffset(), - cell.getTagsLength()); + Iterator<Tag> tagsItr = CellUtil.tagsIterator(cell); while (tagsItr.hasNext()) { boolean includeKV = true; Tag tag = tagsItr.next(); if (tag.getType() == VISIBILITY_TAG_TYPE) { visibilityTagPresent = true; - int offset = tag.getTagOffset(); - int endOffset = offset + tag.getTagLength(); + int offset = tag.getValueOffset(); + int endOffset = offset + tag.getValueLength(); while (offset < endOffset) { - short len = Bytes.toShort(tag.getBuffer(), offset); + short len = getTagValuePartAsShort(tag, offset); offset += 2; if (len < 0) { // This is a NOT label. len = (short) (-1 * len); - String label = Bytes.toString(tag.getBuffer(), offset, len); + String label = Bytes.toString(tag.getValueArray(), offset, len); if (authLabelsFinal.contains(label)) { includeKV = false; break; } } else { - String label = Bytes.toString(tag.getBuffer(), offset, len); + String label = Bytes.toString(tag.getValueArray(), offset, len); if (!authLabelsFinal.contains(label)) { includeKV = false; break; @@ -353,7 +355,7 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer dos.writeShort(bLabel.length); dos.write(bLabel); } - return new Tag(VISIBILITY_TAG_TYPE, baos.toByteArray()); + return new ArrayBackedTag(VISIBILITY_TAG_TYPE, baos.toByteArray()); } private void extractLabels(ExpressionNode node, List<String> labels, List<String> notLabels) { @@ -423,8 +425,7 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer for (Tag tag : deleteVisTags) { matchFound = false; for (Tag givenTag : putVisTags) { - if (Bytes.equals(tag.getBuffer(), tag.getTagOffset(), tag.getTagLength(), - givenTag.getBuffer(), givenTag.getTagOffset(), givenTag.getTagLength())) { + if (TagUtil.matchingValue(tag, givenTag)) { matchFound = true; break; } @@ -459,15 +460,15 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer visibilityString.append(VisibilityConstants.CLOSED_PARAN + VisibilityConstants.OR_OPERATOR); } - int offset = tag.getTagOffset(); - int endOffset = offset + tag.getTagLength(); + int offset = tag.getValueOffset(); + int endOffset = offset + tag.getValueLength(); boolean expressionStart = true; while (offset < endOffset) { - short len = Bytes.toShort(tag.getBuffer(), offset); + short len = getTagValuePartAsShort(tag, offset); offset += 2; if (len < 0) { len = (short) (-1 * len); - String label = Bytes.toString(tag.getBuffer(), offset, len); + String label = getTagValuePartAsString(tag, offset, len); if (expressionStart) { visibilityString.append(VisibilityConstants.OPEN_PARAN + VisibilityConstants.NOT_OPERATOR + CellVisibility.quote(label)); @@ -476,7 +477,7 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer + VisibilityConstants.NOT_OPERATOR + CellVisibility.quote(label)); } } else { - String label = Bytes.toString(tag.getBuffer(), offset, len); + String label = getTagValuePartAsString(tag, offset, len); if (expressionStart) { visibilityString.append(VisibilityConstants.OPEN_PARAN + CellVisibility.quote(label)); } else { @@ -496,4 +497,20 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer } return null; } + + private static short getTagValuePartAsShort(Tag t, int offset) { + if (t.hasArray()) { + return Bytes.toShort(t.getValueArray(), offset); + } + return ByteBufferUtils.toShort(t.getValueByteBuffer(), offset); + } + + private static String getTagValuePartAsString(Tag t, int offset, int length) { + if (t.hasArray()) { + return Bytes.toString(t.getValueArray(), offset, length); + } + byte[] b = new byte[length]; + ByteBufferUtils.copyFromBufferToArray(b, t.getValueByteBuffer(), offset, 0, length); + return Bytes.toString(b); + } }
http://git-wip-us.apache.org/repos/asf/hbase/blob/a9b671b3/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelReplicationWithExpAsString.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelReplicationWithExpAsString.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelReplicationWithExpAsString.java index fecff07..2140a5c 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelReplicationWithExpAsString.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelReplicationWithExpAsString.java @@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.Tag; +import org.apache.hadoop.hbase.TagUtil; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; @@ -183,7 +184,7 @@ public class TestVisibilityLabelReplicationWithExpAsString extends TestVisibilit boolean foundNonVisTag = false; for(Tag t : TestCoprocessorForTagsAtSink.tags) { if(t.getType() == NON_VIS_TAG_TYPE) { - assertEquals(TEMP, Bytes.toString(t.getValue())); + assertEquals(TEMP, Bytes.toString(TagUtil.cloneValue(t))); foundNonVisTag = true; break; } http://git-wip-us.apache.org/repos/asf/hbase/blob/a9b671b3/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java index 8414813..b3b3b43 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java @@ -43,8 +43,10 @@ import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValueUtil; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.Tag; +import org.apache.hadoop.hbase.ArrayBackedTag; import org.apache.hadoop.hbase.TagRewriteCell; import org.apache.hadoop.hbase.TagType; +import org.apache.hadoop.hbase.TagUtil; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; @@ -284,11 +286,11 @@ public class TestVisibilityLabelsReplication { for (Cell cell : cells) { if ((Bytes.equals(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), row, 0, row.length))) { - List<Tag> tags = Tag - .asList(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength()); + List<Tag> tags = TagUtil.asList(cell.getTagsArray(), cell.getTagsOffset(), + cell.getTagsLength()); for (Tag tag : tags) { if (tag.getType() == TagType.STRING_VIS_TAG_TYPE) { - assertEquals(visTag, Bytes.toString(tag.getValue())); + assertEquals(visTag, TagUtil.getValueAsString(tag)); tagFound = true; break; } @@ -330,7 +332,7 @@ public class TestVisibilityLabelsReplication { boolean foundNonVisTag = false; for (Tag t : TestCoprocessorForTagsAtSink.tags) { if (t.getType() == NON_VIS_TAG_TYPE) { - assertEquals(TEMP, Bytes.toString(t.getValue())); + assertEquals(TEMP, TagUtil.getValueAsString(t)); foundNonVisTag = true; break; } @@ -407,11 +409,11 @@ public class TestVisibilityLabelsReplication { if (cf == null) { cf = CellUtil.cloneFamily(kv); } - Tag tag = new Tag((byte) NON_VIS_TAG_TYPE, attribute); + Tag tag = new ArrayBackedTag((byte) NON_VIS_TAG_TYPE, attribute); List<Tag> tagList = new ArrayList<Tag>(); tagList.add(tag); tagList.addAll(kv.getTags()); - byte[] fromList = Tag.fromList(tagList); + byte[] fromList = TagUtil.fromList(tagList); TagRewriteCell newcell = new TagRewriteCell(kv, fromList); ((List<Cell>) updatedCells).add(newcell); } @@ -433,7 +435,7 @@ public class TestVisibilityLabelsReplication { // Check tag presence in the 1st cell in 1st Result if (!results.isEmpty()) { Cell cell = results.get(0); - tags = Tag.asList(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength()); + tags = TagUtil.asList(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength()); } } } http://git-wip-us.apache.org/repos/asf/hbase/blob/a9b671b3/hbase-server/src/test/java/org/apache/hadoop/hbase/util/HFileTestUtil.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/HFileTestUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/HFileTestUtil.java index fdf4fd9..964d6ed 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/HFileTestUtil.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/HFileTestUtil.java @@ -21,10 +21,13 @@ package org.apache.hadoop.hbase.util; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.ArrayBackedTag; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.Tag; import org.apache.hadoop.hbase.TagType; +import org.apache.hadoop.hbase.TagUtil; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; @@ -98,14 +101,11 @@ public class HFileTestUtil { KeyValue kv = new KeyValue(key, family, qualifier, now, key); if (withTag) { // add a tag. Arbitrarily chose mob tag since we have a helper already. - Tag tableNameTag = new Tag(TagType.MOB_TABLE_NAME_TAG_TYPE, key); + Tag tableNameTag = new ArrayBackedTag(TagType.MOB_TABLE_NAME_TAG_TYPE, key); kv = MobUtils.createMobRefKeyValue(kv, key, tableNameTag); // verify that the kv has the tag. - byte[] ta = kv.getTagsArray(); - int toff = kv.getTagsOffset(); - int tlen = kv.getTagsLength(); - Tag t = Tag.getTag(ta, toff, tlen, TagType.MOB_TABLE_NAME_TAG_TYPE); + Tag t = CellUtil.getTag(kv, TagType.MOB_TABLE_NAME_TAG_TYPE); if (t == null) { throw new IllegalStateException("Tag didn't stick to KV " + kv.toString()); } @@ -130,15 +130,12 @@ public class HFileTestUtil { ResultScanner s = table.getScanner(new Scan()); for (Result r : s) { for (Cell c : r.listCells()) { - byte[] ta = c.getTagsArray(); - int toff = c.getTagsOffset(); - int tlen = c.getTagsLength(); - Tag t = Tag.getTag(ta, toff, tlen, TagType.MOB_TABLE_NAME_TAG_TYPE); + Tag t = CellUtil.getTag(c, TagType.MOB_TABLE_NAME_TAG_TYPE); if (t == null) { fail(c.toString() + " has null tag"); continue; } - byte[] tval = t.getValue(); + byte[] tval = TagUtil.cloneValue(t); assertArrayEquals(c.toString() + " has tag" + Bytes.toString(tval), r.getRow(), tval); } http://git-wip-us.apache.org/repos/asf/hbase/blob/a9b671b3/hbase-server/src/test/java/org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java index 70d6d9d..87cb070 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValue.Type; import org.apache.hadoop.hbase.Tag; +import org.apache.hadoop.hbase.ArrayBackedTag; import org.apache.hadoop.hbase.client.Mutation; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.MultiThreadedAction.DefaultDataGenerator; @@ -77,7 +78,7 @@ public class LoadTestDataGeneratorWithTags extends DefaultDataGenerator { minTagLength + random.nextInt(maxTagLength - minTagLength)); tags = new ArrayList<Tag>(); for (int n = 0; n < numTags; n++) { - tags.add(new Tag((byte) 127, tag)); + tags.add(new ArrayBackedTag((byte) 127, tag)); } Cell updatedCell = new KeyValue(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(),