From 0b6930628715ffe70932f4a65b0398911dbef465 Mon Sep 17 00:00:00 2001 From: Swaroopa Kadam Date: Tue, 1 Dec 2020 21:06:51 -0800 Subject: [PATCH] PHOENIX-6239: NullPointerException when index table does not use COLUMN_ENCODED_BYTES (#994) Co-authored-by: Swaroopa Kadam --- .../org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java | 7 +++---- .../java/org/apache/phoenix/schema/MetaDataClient.java | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java index 5a02c2ef83c..def4814d8ed 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterAddCascadeIndexIT.java @@ -52,7 +52,6 @@ import java.util.Collection; import java.util.Properties; -import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -74,10 +73,10 @@ public class AlterAddCascadeIndexIT extends ParallelStatsDisabledIT { public AlterAddCascadeIndexIT(boolean isViewIndex, boolean mutable) { this.isViewIndex = isViewIndex; - StringBuilder optionBuilder = new StringBuilder(); + StringBuilder optionBuilder = new StringBuilder("COLUMN_ENCODED_BYTES=0"); if (!mutable) { - optionBuilder.append(" IMMUTABLE_ROWS=true"); + optionBuilder.append(", IMMUTABLE_ROWS=true, IMMUTABLE_STORAGE_SCHEME='ONE_CELL_PER_COLUMN'"); } this.mutable = mutable; this.tableDDLOptions = optionBuilder.toString(); @@ -160,7 +159,7 @@ public void testAlterDBOAddCascadeIndexAllUpsert() throws Exception { assertNumberOfHBaseCells( "_IDX_"+fullTableName,6); } else { - assertNumberOfHBaseCells( "_IDX_"+fullTableName,4); + assertNumberOfHBaseCells( "_IDX_"+fullTableName,6); } } else { assertDBODefinition(conn, phoenixObjectName, PTableType.TABLE, 4, columnArray, false); diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java index e9200494e16..69cf59402e6 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java @@ -4201,7 +4201,9 @@ private HashMap getPTablePColumnHashMapForCascade(List for (PTable index : indexesPTable) { int iPos = indexToColumnSizeMap.get(index); EncodedCQCounter cqCounterToUse = index.getEncodedCQCounter(); - Integer encodedCQ = index.isAppendOnlySchema() ? Integer.valueOf(ENCODED_CQ_COUNTER_INITIAL_VALUE + iPos) : cqCounterToUse.getNextQualifier(familyName) + iPos; + int baseCount = 0; + baseCount = (cqCounterToUse != null && cqCounterToUse.getNextQualifier(familyName)!=null) ? cqCounterToUse.getNextQualifier(familyName) : 0 ; + Integer encodedCQ = index.isAppendOnlySchema() ? Integer.valueOf(ENCODED_CQ_COUNTER_INITIAL_VALUE + iPos) : baseCount + iPos; byte[] columnQualifierBytes = EncodedColumnsUtil.getColumnQualifierBytes(indexColDef.getColumnDefName().getColumnName(), encodedCQ, index, indexColDef.isPK()); PColumn iColumn = newColumn(iPos, indexColDef, null, index.getDefaultFamilyName() == null ? null : index.getDefaultFamilyName().getString(), false, columnQualifierBytes, willBeImmutableRows); indexColumn.put(index, iColumn);