commit 88c6086bfde36cb66b1caf2d386861cbf19dbf4c Author: Dan Burkert Date: Mon Oct 9 15:13:24 2017 -0700 HIVE-17747: HMS DropTableMessage should include the full table object diff --git a/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java b/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java index c36b632fd1..308ab0d36a 100644 --- a/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java +++ b/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java @@ -519,6 +519,12 @@ public void dropTable() throws Exception { assertEquals(defaultDbName, dropTblMsg.getDB()); assertEquals(tblName, dropTblMsg.getTable()); assertEquals(TableType.MANAGED_TABLE.toString(), dropTblMsg.getTableType()); + Table tableObj = dropTblMsg.getTableObj(); + assertEquals(table.getDbName(), tableObj.getDbName()); + assertEquals(table.getTableName(), tableObj.getTableName()); + assertEquals(table.getOwner(), tableObj.getOwner()); + assertEquals(table.getParameters(), tableObj.getParameters()); + assertEquals(TableType.MANAGED_TABLE.toString(), tableObj.getTableType()); // Verify the eventID was passed to the non-transactional listener MockMetaStoreEventListener.popAndVerifyLastEventId(EventType.DROP_TABLE, firstEventId + 2); diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/DropTableMessage.java b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/DropTableMessage.java index 03f73f180b..7aed21b488 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/DropTableMessage.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/DropTableMessage.java @@ -19,6 +19,8 @@ package org.apache.hadoop.hive.metastore.messaging; +import org.apache.hadoop.hive.metastore.api.Table; + public abstract class DropTableMessage extends EventMessage { protected DropTableMessage() { @@ -33,6 +35,8 @@ protected DropTableMessage() { public abstract String getTableType(); + public abstract Table getTableObj() throws Exception; + @Override public EventMessage checkValid() { if (getTable() == null) diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropTableMessage.java b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropTableMessage.java index 17f38ba123..4334f732fd 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropTableMessage.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropTableMessage.java @@ -19,7 +19,9 @@ package org.apache.hadoop.hive.metastore.messaging.json; +import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.metastore.messaging.DropTableMessage; +import org.apache.thrift.TException; import org.codehaus.jackson.annotate.JsonProperty; /** @@ -28,7 +30,7 @@ public class JSONDropTableMessage extends DropTableMessage { @JsonProperty - String server, servicePrincipal, db, table, tableType; + String server, servicePrincipal, db, table, tableType, tableObjJson; @JsonProperty Long timestamp; @@ -55,6 +57,18 @@ public JSONDropTableMessage(String server, String servicePrincipal, String db, S checkValid(); } + public JSONDropTableMessage(String server, String servicePrincipal, Table tableObj, + Long timestamp) { + this(server, servicePrincipal, tableObj.getDbName(), tableObj.getTableName(), + tableObj.getTableType(), timestamp); + try { + this.tableObjJson = JSONMessageFactory.createTableObjJson(tableObj); + } catch (TException e) { + throw new IllegalArgumentException("Could not serialize: ", e); + } + checkValid(); + } + @Override public String getTable() { return table; @@ -65,6 +79,11 @@ public String getTableType() { if (tableType != null) return tableType; else return ""; } + @Override + public Table getTableObj() throws Exception { + return (Table) JSONMessageFactory.getTObj(tableObjJson,Table.class); + } + @Override public String getServer() { return server; diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java index f53b14b7ab..c7877ee7cc 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java @@ -118,8 +118,7 @@ public AlterTableMessage buildAlterTableMessage(Table before, Table after, boole @Override public DropTableMessage buildDropTableMessage(Table table) { - return new JSONDropTableMessage(MS_SERVER_URL, MS_SERVICE_PRINCIPAL, table.getDbName(), - table.getTableName(), table.getTableType(), now()); + return new JSONDropTableMessage(MS_SERVER_URL, MS_SERVICE_PRINCIPAL, table, now()); } @Override