This is an automated email from the ASF dual-hosted git repository.
skadam pushed a commit to branch 4.x-HBase-1.5
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/4.x-HBase-1.5 by this push:
new 1622ef9 PHOENIX-5723 PhoenixIndexImportDirectReducer cleanup method
updates index state to active
1622ef9 is described below
commit 1622ef974ccd7d4ecd5d73058a6ff91a18b900c3
Author: Tanuj Khurana <[email protected]>
AuthorDate: Wed Feb 12 13:34:35 2020 -0800
PHOENIX-5723 PhoenixIndexImportDirectReducer cleanup method updates index
state to active
Signed-off-by: s.kadam <[email protected]>
---
.../apache/phoenix/end2end/IndexExtendedIT.java | 52 ++++++++++++++++++++++
.../index/PhoenixIndexImportDirectReducer.java | 11 +++--
2 files changed, 60 insertions(+), 3 deletions(-)
diff --git
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
index fd830c2..bf78cef 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/IndexExtendedIT.java
@@ -36,6 +36,7 @@ import java.util.Properties;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.phoenix.hbase.index.IndexRegionObserver;
import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.mapreduce.index.IndexTool;
import org.apache.phoenix.query.BaseTest;
@@ -314,4 +315,55 @@ public class IndexExtendedIT extends BaseTest {
conn.close();
}
}
+
+ @Test
+ public void testIndexStateOnException() throws Exception {
+ if (localIndex || useSnapshot || useViewIndex) {
+ return;
+ }
+
+ String schemaName = generateUniqueName();
+ String dataTableName = generateUniqueName();
+ String dataTableFullName = SchemaUtil.getTableName(schemaName,
dataTableName);
+ String indexTableName = generateUniqueName();
+ String indexFullName = SchemaUtil.getTableName(schemaName,
indexTableName);
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ try (Connection conn = DriverManager.getConnection(getUrl(), props)){
+ Statement stmt = conn.createStatement();
+ stmt.execute(String.format(
+ "CREATE TABLE %s (ID INTEGER NOT NULL PRIMARY KEY, NAME
VARCHAR, ZIP INTEGER) %s",
+ dataTableFullName, tableDDLOptions));
+
+ stmt.execute(String.format(
+ "UPSERT INTO %s VALUES(1, 'Phoenix', 12345)",
dataTableFullName));
+
+ conn.commit();
+
+ // Configure IndexRegionObserver to fail the first write phase.
This should not
+ // lead to any change on index and thus index verify during index
rebuild should fail
+ IndexRegionObserver.setIgnoreIndexRebuildForTesting(true);
+ stmt.execute(String.format(
+ "CREATE INDEX %s ON %s (NAME) INCLUDE (ZIP) ASYNC",
+ indexTableName, dataTableFullName));
+
+ // Verify that the index table is not in the ACTIVE state
+ assertFalse(checkIndexState(conn, indexFullName,
PIndexState.ACTIVE, 0L));
+
+ // Run the index MR job and verify that the index table rebuild
fails
+ IndexToolIT.runIndexTool(true, false, schemaName, dataTableName,
+ indexTableName, null, -1, IndexTool.IndexVerifyType.AFTER);
+
+ IndexRegionObserver.setIgnoreIndexRebuildForTesting(false);
+
+ // job failed, verify that the index table is still not in the
ACTIVE state
+ assertFalse(checkIndexState(conn, indexFullName,
PIndexState.ACTIVE, 0L));
+
+ // Run the index MR job and verify that the index table rebuild
succeeds
+ IndexToolIT.runIndexTool(true, false, schemaName, dataTableName,
+ indexTableName, null, 0, IndexTool.IndexVerifyType.AFTER);
+
+ // job passed, verify that the index table is in the ACTIVE state
+ assertTrue(checkIndexState(conn, indexFullName,
PIndexState.ACTIVE, 0L));
+ }
+ }
}
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 46fb9ec..98000f7 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
@@ -111,16 +111,21 @@ public class PhoenixIndexImportDirectReducer extends
if (verifyType != IndexTool.IndexVerifyType.NONE) {
updateCounters(verifyType, context);
}
+
+ try {
+ IndexToolUtil.updateIndexState(context.getConfiguration(),
PIndexState.ACTIVE);
+ } catch (SQLException e) {
+ LOGGER.error(" Failed to update the status to Active");
+ throw new RuntimeException(e.getMessage());
+ }
}
@Override
protected void cleanup(Context context) throws IOException,
InterruptedException{
try {
- IndexToolUtil.updateIndexState(context.getConfiguration(),
PIndexState.ACTIVE);
-
updateTasksTable(context);
} catch (SQLException e) {
- LOGGER.error(" Failed to update the status to Active");
+ LOGGER.error(" Failed to update the tasks table");
throw new RuntimeException(e.getMessage());
}
}