This is an automated email from the ASF dual-hosted git repository.
jaanai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new b431a4e PHOENIX-5226 The format of VIEW_MODIFIED_PROPERTY_BYTES is
incorrect as a tag of the cell
b431a4e is described below
commit b431a4e733e35977ee3445c4c9f70d37c48cbdef
Author: jaanai <[email protected]>
AuthorDate: Thu Apr 4 10:21:44 2019 +0800
PHOENIX-5226 The format of VIEW_MODIFIED_PROPERTY_BYTES is incorrect as a
tag of the cell
---
.../phoenix/coprocessor/MetaDataEndpointImpl.java | 6 ++--
.../org/apache/phoenix/query/QueryConstants.java | 4 ++-
.../org/apache/phoenix/util/MetaDataUtilTest.java | 42 ++++++++++++++++++++++
3 files changed, 49 insertions(+), 3 deletions(-)
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index e7910cf..dd47a7d 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -76,6 +76,7 @@ import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_INDEX_ID_DATA
import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_STATEMENT_BYTES;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.VIEW_TYPE_BYTES;
import static
org.apache.phoenix.query.QueryConstants.DIVERGED_VIEW_BASE_COLUMN_COUNT;
+import static
org.apache.phoenix.query.QueryConstants.VIEW_MODIFIED_PROPERTY_TAG_TYPE;
import static org.apache.phoenix.schema.PTableType.INDEX;
import static org.apache.phoenix.schema.PTableType.TABLE;
import static org.apache.phoenix.schema.PTableImpl.getColumnsToClone;
@@ -102,6 +103,7 @@ import java.util.Properties;
import java.util.Set;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ArrayBackedTag;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellComparatorImpl;
import org.apache.hadoop.hbase.CellUtil;
@@ -113,6 +115,7 @@ import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.KeyValue.Type;
import org.apache.hadoop.hbase.KeyValueUtil;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.TagUtil;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
@@ -469,8 +472,7 @@ public class MetaDataEndpointImpl extends MetaDataProtocol
implements RegionCopr
private static final int LINK_TYPE_INDEX = 0;
// Used to add a tag to a cell when a view modifies a table property to
indicate that this
// property should not be derived from the base table
- private static final byte[] VIEW_MODIFIED_PROPERTY_BYTES =
Bytes.toBytes(1);
-
+ public static final byte[] VIEW_MODIFIED_PROPERTY_BYTES =
TagUtil.fromList(ImmutableList.<Tag>of(new
ArrayBackedTag(VIEW_MODIFIED_PROPERTY_TAG_TYPE, Bytes.toBytes(1))));
private static final Cell CLASS_NAME_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES,
CLASS_NAME_BYTES);
private static final Cell JAR_PATH_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, JAR_PATH_BYTES);
private static final Cell RETURN_TYPE_KV =
createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES,
RETURN_TYPE_BYTES);
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
index a8f332c..7584705 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryConstants.java
@@ -162,7 +162,9 @@ public interface QueryConstants {
public static final int NANOS_IN_SECOND = BigDecimal.valueOf(Math.pow(10,
9)).intValue();
public static final int DIVERGED_VIEW_BASE_COLUMN_COUNT = -100;
public static final int BASE_TABLE_BASE_COLUMN_COUNT = -1;
-
+
+ // custom TagType
+ public static final byte VIEW_MODIFIED_PROPERTY_TAG_TYPE = (byte) 70;
/**
* We mark counter values 0 to 10 as reserved. Value 0 is used by {@link
#ENCODED_EMPTY_COLUMN_NAME}. Values 1-10
* are reserved for special column qualifiers returned by Phoenix
co-processors.
diff --git
a/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
b/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
index 7c8e021..52df041 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
@@ -17,6 +17,8 @@
*/
package org.apache.phoenix.util;
+import static
org.apache.phoenix.coprocessor.MetaDataEndpointImpl.VIEW_MODIFIED_PROPERTY_BYTES;
+import static
org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.UPDATE_CACHE_FREQUENCY_BYTES;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
@@ -27,6 +29,9 @@ import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.ExtendedCell;
import org.apache.hadoop.hbase.ExtendedCellBuilder;
import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.PrivateCellUtil;
+import org.apache.hadoop.hbase.RawCellBuilderFactory;
+import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.TagUtil;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
@@ -38,10 +43,15 @@ import org.apache.phoenix.hbase.index.util.KeyValueBuilder;
import org.apache.phoenix.hbase.index.util.VersionUtil;
import org.apache.phoenix.query.HBaseFactoryProvider;
import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PLong;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
+import java.util.Iterator;
+import java.util.List;
+
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -256,5 +266,37 @@ public class MetaDataUtilTest {
return put;
}
+ @Test
+ public void testConditionallyAddTagsToPutCells( ) {
+ List<Tag> tags = TagUtil.asList(VIEW_MODIFIED_PROPERTY_BYTES, 0,
VIEW_MODIFIED_PROPERTY_BYTES.length);
+ assertEquals(tags.size(), 1);
+ Tag expectedTag = tags.get(0);
+
+ String version = VersionInfo.getVersion();
+ KeyValueBuilder builder = KeyValueBuilder.get(version);
+ KeyValue kv = builder.buildPut(wrap(ROW), wrap(TABLE_FAMILY_BYTES),
wrap(UPDATE_CACHE_FREQUENCY_BYTES), wrap(
+ PLong.INSTANCE.toBytes(0)));
+ Put put = new Put(ROW);
+ KeyValueBuilder.addQuietly(put, kv);
+
+ ExtendedCellBuilder cellBuilder = (ExtendedCellBuilder)
RawCellBuilderFactory.create();
+ MetaDataUtil.conditionallyAddTagsToPutCells(put, TABLE_FAMILY_BYTES,
UPDATE_CACHE_FREQUENCY_BYTES, cellBuilder,
+ PInteger.INSTANCE.toBytes(1), VIEW_MODIFIED_PROPERTY_BYTES);
+
+ Cell cell = put.getFamilyCellMap().get(TABLE_FAMILY_BYTES).get(0);
+
+ // To check the cell tag whether view has modified this property
+ assertTrue(Bytes.compareTo(expectedTag.getValueArray(),
TagUtil.concatTags(EMPTY_BYTE_ARRAY, cell)) == 0);
+ assertTrue(Bytes.contains(TagUtil.concatTags(EMPTY_BYTE_ARRAY, cell),
expectedTag.getValueArray()));
+
+ // To check tag data can be correctly deserialized
+ Iterator<Tag> tagIterator = PrivateCellUtil.tagsIterator(cell);
+ assertTrue(tagIterator.hasNext());
+ Tag actualTag = tagIterator.next();
+ assertTrue(Bytes.compareTo(actualTag.getValueArray(),
actualTag.getValueOffset(), actualTag.getValueLength(),
+ expectedTag.getValueArray(), expectedTag.getValueOffset(),
expectedTag.getValueLength()) == 0);
+ assertFalse(tagIterator.hasNext());
+ }
+
}