You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ka...@apache.org on 2020/05/22 20:02:27 UTC
[phoenix] branch 4.x updated: PHOENIX-5910 IndexTool
verification-only runs should have counters for unverified rows
This is an automated email from the ASF dual-hosted git repository.
kadir pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/4.x by this push:
new b8250cb PHOENIX-5910 IndexTool verification-only runs should have counters for unverified rows
b8250cb is described below
commit b8250cb7368d5bd5783323702ebecc60c5155ab9
Author: Kadir <ko...@salesforce.com>
AuthorDate: Thu May 21 14:23:34 2020 -0700
PHOENIX-5910 IndexTool verification-only runs should have counters for unverified rows
---
.../end2end/IndexToolForNonTxGlobalIndexIT.java | 6 ++
.../end2end/index/GlobalIndexCheckerIT.java | 25 ++++++++
.../coprocessor/IndexRebuildRegionScanner.java | 55 ++++++++++++++++++
.../coprocessor/IndexToolVerificationResult.java | 66 ++++++++++++++++++++++
.../index/IndexVerificationResultRepository.java | 15 +++++
.../index/PhoenixIndexImportDirectReducer.java | 6 ++
.../index/PhoenixIndexToolJobCounters.java | 3 +
7 files changed, 176 insertions(+)
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolForNonTxGlobalIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolForNonTxGlobalIndexIT.java
index aca88b3..1880a31 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolForNonTxGlobalIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexToolForNonTxGlobalIndexIT.java
@@ -90,6 +90,9 @@ import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEF
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_EXPIRED_INDEX_ROW_COUNT;
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT;
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_MISSING_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_OLD_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT;
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_VALID_INDEX_ROW_COUNT;
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.REBUILT_INDEX_ROW_COUNT;
import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.SCANNED_DATA_ROW_COUNT;
@@ -385,6 +388,9 @@ public class IndexToolForNonTxGlobalIndexIT extends BaseUniqueNamesOwnClusterIT
assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_MISSING_INDEX_ROW_COUNT).getValue());
assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_BEYOND_MAXLOOKBACK_MISSING_INDEX_ROW_COUNT).getValue());
assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_BEYOND_MAXLOOKBACK_INVALID_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_OLD_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT).getValue());
assertEquals(0, indexTool.getJob().getCounters().findCounter(AFTER_REBUILD_VALID_INDEX_ROW_COUNT).getValue());
assertEquals(0, indexTool.getJob().getCounters().findCounter(AFTER_REBUILD_EXPIRED_INDEX_ROW_COUNT).getValue());
assertEquals(0, indexTool.getJob().getCounters().findCounter(AFTER_REBUILD_INVALID_INDEX_ROW_COUNT).getValue());
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexCheckerIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexCheckerIT.java
index 56d4614..5c358c7 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexCheckerIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexCheckerIT.java
@@ -17,6 +17,18 @@
*/
package org.apache.phoenix.end2end.index;
+import static org.apache.phoenix.mapreduce.PhoenixJobCounters.INPUT_RECORDS;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_BEYOND_MAXLOOKBACK_INVALID_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_BEYOND_MAXLOOKBACK_MISSING_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_EXPIRED_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_MISSING_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_OLD_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.BEFORE_REBUILD_VALID_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.REBUILT_INDEX_ROW_COUNT;
+import static org.apache.phoenix.mapreduce.index.PhoenixIndexToolJobCounters.SCANNED_DATA_ROW_COUNT;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -446,6 +458,19 @@ public class GlobalIndexCheckerIT extends BaseUniqueNamesOwnClusterIT {
conn.commit();
conn.createStatement().execute("upsert into " + dataTableName + " (id, val1, val2) values ('c', 'cd','cde')");
conn.commit();
+ IndexTool indexTool = IndexToolIT.runIndexTool(true, false, "", dataTableName, indexTableName, null, 0, IndexTool.IndexVerifyType.ONLY);
+ assertEquals(3, indexTool.getJob().getCounters().findCounter(INPUT_RECORDS).getValue());
+ assertEquals(3, indexTool.getJob().getCounters().findCounter(SCANNED_DATA_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(REBUILT_INDEX_ROW_COUNT).getValue());
+ assertEquals(3, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_VALID_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_EXPIRED_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_MISSING_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_BEYOND_MAXLOOKBACK_MISSING_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_BEYOND_MAXLOOKBACK_INVALID_INDEX_ROW_COUNT).getValue());
+ assertEquals(2, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_OLD_INDEX_ROW_COUNT).getValue());
+ assertEquals(0, indexTool.getJob().getCounters().findCounter(BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT).getValue());
IndexRegionObserver.setFailPostIndexUpdatesForTesting(false);
String selectSql = "SELECT val2, val3 from " + dataTableName + " WHERE val1 = 'ab' and val2 = 'abcc'";
// Verify that we will read from the index table
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexRebuildRegionScanner.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexRebuildRegionScanner.java
index a5a4ec1..1442b3d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexRebuildRegionScanner.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexRebuildRegionScanner.java
@@ -17,6 +17,7 @@
*/
package org.apache.phoenix.coprocessor;
+import static org.apache.phoenix.hbase.index.IndexRegionObserver.UNVERIFIED_BYTES;
import static org.apache.phoenix.hbase.index.IndexRegionObserver.VERIFIED_BYTES;
import static org.apache.phoenix.hbase.index.IndexRegionObserver.removeEmptyColumn;
import static org.apache.phoenix.hbase.index.write.AbstractParallelWriterIndexCommitter.INDEX_WRITER_KEEP_ALIVE_TIME_CONF_KEY;
@@ -504,6 +505,55 @@ public class IndexRebuildRegionScanner extends GlobalIndexRegionScanner {
}
return getMutationsWithSameTS(put, del);
}
+
+ private void updateUnverifiedIndexRowCounters(Put actual,
+ IndexToolVerificationResult.PhaseResult verificationPhaseResult) {
+ // We are given an index row and need to check if this index row is unverified. However, before doing
+ // that we need to check if this index row is the most recent version. To do that, we need to check its data
+ // table row first.
+ // Get the data row key from the index row key
+ byte[] dataKey = indexMaintainer.buildDataRowKey(new ImmutableBytesWritable(actual.getRow()), viewConstants);
+ // Get the data table row mutations using the data row key
+ Pair<Put, Delete> putDeletePair = dataKeyToMutationMap.get(dataKey);
+ Put put = putDeletePair.getFirst();
+ if (put == null) {
+ // The data table row does not exist, so there is nothing to do
+ return;
+ }
+ Delete del = putDeletePair.getSecond();
+ if (del != null && getMaxTimestamp(del) >= getTimestamp(put)) {
+ // The data table row is deleted, i.e., the most recent mutation is delete. So there is nothing to do
+ return;
+ }
+ // Get the index row key from the data table row and check if the given index row has the same row key
+ byte[] indexRowKey = getIndexRowKey(indexMaintainer, put);
+ if (Bytes.compareTo(actual.getRow(), 0, actual.getRow().length,
+ indexRowKey, 0, indexRowKey.length) != 0) {
+ return;
+ }
+ // Get the empty column of the given index row
+ List<Cell> cellList = actual.get(indexMaintainer.getEmptyKeyValueFamily().copyBytesIfNecessary(),
+ indexMaintainer.getEmptyKeyValueQualifier());
+ Cell cell = (cellList != null && !cellList.isEmpty()) ? cellList.get(0) : null;
+ if (cell == null) {
+ // There is no empty column on the given index row. We do not know if this is a row generated by the new
+ // or the old design
+ verificationPhaseResult.setUnknownIndexRowCount(verificationPhaseResult.getUnknownIndexRowCount() + 1);
+ return;
+ }
+ if (Bytes.compareTo(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength(),
+ VERIFIED_BYTES, 0, VERIFIED_BYTES.length) == 0) {
+ // This is a verified index row, so nothing to do here
+ return;
+ } else if (Bytes.compareTo(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength(),
+ UNVERIFIED_BYTES, 0, UNVERIFIED_BYTES.length) == 0) {
+ verificationPhaseResult.setUnverifiedIndexRowCount(verificationPhaseResult.getUnverifiedIndexRowCount() + 1);
+ return;
+ }
+ // The empty column value is neither "verified" or "unverified". This must be a row from the old design
+ verificationPhaseResult.setOldIndexRowCount(verificationPhaseResult.getOldIndexRowCount() + 1);
+ }
+
/**
* In this method, the actual list is repaired in memory using the expected list which is actually the output of
* rebuilding the index table row. The result of this repair is used only for verification.
@@ -650,6 +700,11 @@ public class IndexRebuildRegionScanner extends GlobalIndexRegionScanner {
Collections.sort(expectedMutationList, MUTATION_TS_DESC_COMPARATOR);
Collections.sort(actualMutationList, MUTATION_TS_DESC_COMPARATOR);
if (verifyType == IndexTool.IndexVerifyType.ONLY) {
+ if (actualMutationList.get(0) instanceof Put) {
+ // We do check here only the latest version as older versions will always be unverified before
+ // newer versions are inserted.
+ updateUnverifiedIndexRowCounters((Put) actualMutationList.get(0), verificationPhaseResult);
+ }
repairActualMutationList(actualMutationList, expectedMutationList);
}
cleanUpActualMutationList(actualMutationList);
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexToolVerificationResult.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexToolVerificationResult.java
index 06b8ff4..2e02263 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexToolVerificationResult.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/IndexToolVerificationResult.java
@@ -37,6 +37,9 @@ import static org.apache.phoenix.mapreduce.index.IndexVerificationResultReposito
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_EXTRA_CELLS_BYTES;
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_MISSING_CELLS_BYTES;
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_MISSING_INDEX_ROW_COUNT_BYTES;
+import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_OLD_INDEX_ROW_COUNT_BYTES;
+import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT_BYTES;
+import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT_BYTES;
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.BEFORE_REBUILD_VALID_INDEX_ROW_COUNT_BYTES;
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.REBUILT_INDEX_ROW_COUNT_BYTES;
import static org.apache.phoenix.mapreduce.index.IndexVerificationResultRepository.RESULT_TABLE_COLUMN_FAMILY;
@@ -117,6 +120,9 @@ public class IndexToolVerificationResult {
private long beyondMaxLookBackInvalidIndexRowCount = 0;
private long indexHasExtraCellsCount = 0;
private long indexHasMissingCellsCount = 0;
+ private long unverifiedIndexRowCount = 0;
+ private long oldIndexRowCount = 0;
+ private long unknownIndexRowCount = 0;
public void add(PhaseResult phaseResult) {
setBeyondMaxLookBackMissingIndexRowCount(getBeyondMaxLookBackMissingIndexRowCount() +
@@ -129,6 +135,9 @@ public class IndexToolVerificationResult {
setInvalidIndexRowCount(getInvalidIndexRowCount() + phaseResult.getInvalidIndexRowCount());
setIndexHasExtraCellsCount(getIndexHasExtraCellsCount() + phaseResult.getIndexHasExtraCellsCount());
setIndexHasMissingCellsCount(getIndexHasMissingCellsCount() + phaseResult.getIndexHasMissingCellsCount());
+ setUnverifiedIndexRowCount(getUnverifiedIndexRowCount() + phaseResult.getUnverifiedIndexRowCount());
+ setUnknownIndexRowCount(getUnknownIndexRowCount() + phaseResult.getUnknownIndexRowCount());
+ setOldIndexRowCount(getOldIndexRowCount() + phaseResult.getOldIndexRowCount());
}
public PhaseResult() {
@@ -209,6 +218,9 @@ public class IndexToolVerificationResult {
result = 31 * result + getBeyondMaxLookBackInvalidIndexRowCount();
result = 31 * result + getIndexHasMissingCellsCount();
result = 31 * result + getIndexHasExtraCellsCount();
+ result = 31 * result + getUnverifiedIndexRowCount();
+ result = 31 * result + getOldIndexRowCount();
+ result = 31 * result + getUnknownIndexRowCount();
return (int) result;
}
@@ -267,6 +279,30 @@ public class IndexToolVerificationResult {
public void setIndexHasExtraCellsCount(long indexHasExtraCellsCount) {
this.indexHasExtraCellsCount = indexHasExtraCellsCount;
}
+
+ public long getUnverifiedIndexRowCount() {
+ return unverifiedIndexRowCount;
+ }
+
+ public void setUnverifiedIndexRowCount(long unverifiedIndexRowCount) {
+ this.unverifiedIndexRowCount = unverifiedIndexRowCount;
+ }
+
+ public long getOldIndexRowCount() {
+ return oldIndexRowCount;
+ }
+
+ public void setOldIndexRowCount(long oldIndexRowCount) {
+ this.oldIndexRowCount = oldIndexRowCount;
+ }
+
+ public long getUnknownIndexRowCount() {
+ return unknownIndexRowCount;
+ }
+
+ public void setUnknownIndexRowCount(long unknownIndexRowCount) {
+ this.unknownIndexRowCount = unknownIndexRowCount;
+ }
}
private long scannedDataRowCount = 0;
@@ -308,6 +344,18 @@ public class IndexToolVerificationResult {
return getBefore().getInvalidIndexRowCount();
}
+ public long getBeforeRebuildUnverifiedIndexRowCount() {
+ return getBefore().getUnverifiedIndexRowCount();
+ }
+
+ public long getBeforeRebuildOldIndexRowCount() {
+ return getBefore().getOldIndexRowCount();
+ }
+
+ public long getBeforeRebuildUnknownIndexRowCount() {
+ return getBefore().getUnknownIndexRowCount();
+ }
+
public long getBeforeRebuildBeyondMaxLookBackMissingIndexRowCount() {
return before.getBeyondMaxLookBackMissingIndexRowCount();
}
@@ -391,6 +439,18 @@ public class IndexToolVerificationResult {
getBefore().setIndexHasExtraCellsCount(getBefore().getIndexHasExtraCellsCount() + count);
}
+ public void addBeforeUnverifiedIndexRowCount(long count) {
+ getBefore().setUnverifiedIndexRowCount(getBefore().getUnverifiedIndexRowCount() + count);
+ }
+
+ public void addBeforeOldIndexRowCount(long count) {
+ getBefore().setOldIndexRowCount(getBefore().getOldIndexRowCount() + count);
+ }
+
+ public void addBeforeUnknownIndexRowCount(long count) {
+ getBefore().setUnknownIndexRowCount(getBefore().getUnknownIndexRowCount() + count);
+ }
+
private void addAfterRebuildValidIndexRowCount(long count) {
getAfter().setValidIndexRowCount(getAfter().getValidIndexRowCount() + count);
}
@@ -459,6 +519,12 @@ public class IndexToolVerificationResult {
addBeforeIndexHasExtraCellsCount(getValue(cell));
} else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_MISSING_CELLS_BYTES)) {
addBeforeIndexHasMissingCellsCount(getValue(cell));
+ } else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT_BYTES)) {
+ addBeforeUnverifiedIndexRowCount(getValue(cell));
+ } else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_OLD_INDEX_ROW_COUNT_BYTES)) {
+ addBeforeOldIndexRowCount(getValue(cell));
+ } else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT_BYTES)) {
+ addBeforeUnknownIndexRowCount(getValue(cell));
} else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, AFTER_REBUILD_VALID_INDEX_ROW_COUNT_BYTES)) {
addAfterRebuildValidIndexRowCount(getValue(cell));
} else if (CellUtil.matchingColumn(cell, RESULT_TABLE_COLUMN_FAMILY, AFTER_REBUILD_EXPIRED_INDEX_ROW_COUNT_BYTES)) {
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexVerificationResultRepository.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexVerificationResultRepository.java
index d6cb2cf..50f36c6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexVerificationResultRepository.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexVerificationResultRepository.java
@@ -73,6 +73,15 @@ public class IndexVerificationResultRepository implements AutoCloseable {
public final static String BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT =
"BeforeRebuildInvalidIndexRowCount";
public final static byte[] BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_BYTES = Bytes.toBytes(BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT);
+ public final static String BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT =
+ "BeforeRebuildUnverifiedIndexRowCount";
+ public final static byte[] BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT_BYTES = Bytes.toBytes(BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT);
+ public final static String BEFORE_REBUILD_OLD_INDEX_ROW_COUNT =
+ "BeforeRebuildOldIndexRowCount";
+ public final static byte[] BEFORE_REBUILD_OLD_INDEX_ROW_COUNT_BYTES = Bytes.toBytes(BEFORE_REBUILD_OLD_INDEX_ROW_COUNT);
+ public final static String BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT =
+ "BeforeRebuildUnknownIndexRowCount";
+ public final static byte[] BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT_BYTES = Bytes.toBytes(BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT);
public final static String AFTER_REBUILD_VALID_INDEX_ROW_COUNT =
"AfterValidExpiredIndexRowCount";
public final static byte[] AFTER_REBUILD_VALID_INDEX_ROW_COUNT_BYTES = Bytes.toBytes(AFTER_REBUILD_VALID_INDEX_ROW_COUNT);
@@ -211,6 +220,12 @@ public class IndexVerificationResultRepository implements AutoCloseable {
Bytes.toBytes(Long.toString(verificationResult.getBeforeIndexHasExtraCellsCount())));
put.addColumn(RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_MISSING_CELLS_BYTES,
Bytes.toBytes(Long.toString(verificationResult.getBeforeIndexHasMissingCellsCount())));
+ put.addColumn(RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT_BYTES,
+ Bytes.toBytes(Long.toString(verificationResult.getBeforeRebuildUnverifiedIndexRowCount())));
+ put.addColumn(RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_OLD_INDEX_ROW_COUNT_BYTES,
+ Bytes.toBytes(Long.toString(verificationResult.getBeforeRebuildOldIndexRowCount())));
+ put.addColumn(RESULT_TABLE_COLUMN_FAMILY, BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT_BYTES,
+ Bytes.toBytes(Long.toString(verificationResult.getBeforeRebuildUnknownIndexRowCount())));
}
if (verifyType == IndexTool.IndexVerifyType.AFTER || verifyType == IndexTool.IndexVerifyType.BOTH) {
put.addColumn(RESULT_TABLE_COLUMN_FAMILY, AFTER_REBUILD_VALID_INDEX_ROW_COUNT_BYTES,
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexImportDirectReducer.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexImportDirectReducer.java
index 169608a..10a6768 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexImportDirectReducer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexImportDirectReducer.java
@@ -85,6 +85,12 @@ public class PhoenixIndexImportDirectReducer extends
setValue(verificationResult.getBeforeIndexHasExtraCellsCount());
context.getCounter(PhoenixIndexToolJobCounters.BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_MISSING_CELLS).
setValue(verificationResult.getBeforeIndexHasMissingCellsCount());
+ context.getCounter(PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT).
+ setValue(verificationResult.getBeforeRebuildUnverifiedIndexRowCount());
+ context.getCounter(PhoenixIndexToolJobCounters.BEFORE_REBUILD_OLD_INDEX_ROW_COUNT).
+ setValue(verificationResult.getBeforeRebuildOldIndexRowCount());
+ context.getCounter(PhoenixIndexToolJobCounters.BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT).
+ setValue(verificationResult.getBeforeRebuildUnknownIndexRowCount());
}
if (verifyType == IndexTool.IndexVerifyType.BOTH || verifyType == IndexTool.IndexVerifyType.AFTER) {
context.getCounter(PhoenixIndexToolJobCounters.AFTER_REBUILD_VALID_INDEX_ROW_COUNT).
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexToolJobCounters.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexToolJobCounters.java
index a5a3fae..c6c6ec7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexToolJobCounters.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/PhoenixIndexToolJobCounters.java
@@ -32,6 +32,9 @@ public enum PhoenixIndexToolJobCounters {
BEFORE_REBUILD_BEYOND_MAXLOOKBACK_INVALID_INDEX_ROW_COUNT,
BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_EXTRA_CELLS,
BEFORE_REBUILD_INVALID_INDEX_ROW_COUNT_COZ_MISSING_CELLS,
+ BEFORE_REBUILD_UNVERIFIED_INDEX_ROW_COUNT,
+ BEFORE_REBUILD_OLD_INDEX_ROW_COUNT,
+ BEFORE_REBUILD_UNKNOWN_INDEX_ROW_COUNT,
AFTER_REBUILD_VALID_INDEX_ROW_COUNT,
AFTER_REBUILD_EXPIRED_INDEX_ROW_COUNT,
AFTER_REBUILD_MISSING_INDEX_ROW_COUNT,