commit 3dff63eb546f50aed46c67e5891c0ad2dd04d765 Author: Bharath Krishna Date: Mon Apr 1 14:55:07 2019 -0700 HIVE-21526 : JSONDropDatabaseMessage needs to have the full database object diff --git itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java index 61ca74364f5ff203094f2abee3e09d5a6c553a3d..37b2bd847a6f555dfc8472f0f3c7f5c081584a78 100644 --- itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java +++ itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java @@ -380,8 +380,11 @@ public void dropDatabase() throws Exception { String dbName2 = "dropdb2"; String dbLocationUri = "file:/tmp"; String dbDescription = "no description"; - Database db = new Database(dbName, dbDescription, dbLocationUri, emptyParameters); - msClient.createDatabase(db); + msClient.createDatabase(new Database(dbName, dbDescription, dbLocationUri, emptyParameters)); + + // Get the DB for comparison below since it may include additional parameters + Database db = msClient.getDatabase(dbName); + // Drop the database msClient.dropDatabase(dbName); // Read notification from metastore @@ -401,6 +404,7 @@ public void dropDatabase() throws Exception { // Parse the message field DropDatabaseMessage dropDbMsg = md.getDropDatabaseMessage(event.getMessage()); assertEquals(dbName, dropDbMsg.getDB()); + assertEquals(db, dropDbMsg.getDatabaseObject()); // Verify the eventID was passed to the non-transactional listener MockMetaStoreEventListener.popAndVerifyLastEventId(EventType.DROP_DATABASE, firstEventId + 2); @@ -408,8 +412,7 @@ public void dropDatabase() throws Exception { // When hive.metastore.transactional.event.listeners is set, // a failed event should not create a new notification - db = new Database(dbName2, dbDescription, dbLocationUri, emptyParameters); - msClient.createDatabase(db); + msClient.createDatabase(new Database(dbName2, dbDescription, dbLocationUri, emptyParameters)); DummyRawStoreFailEvent.setEventSucceed(false); try { msClient.dropDatabase(dbName2); diff --git standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/DropDatabaseMessage.java standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/DropDatabaseMessage.java index a450d476998430d0671356e0eab5945dd7423bfb..f8a567da8f7e39539b46d24c3ec049c752ef76d9 100644 --- standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/DropDatabaseMessage.java +++ standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/DropDatabaseMessage.java @@ -19,9 +19,13 @@ package org.apache.hadoop.hive.metastore.messaging; +import org.apache.hadoop.hive.metastore.api.Database; + public abstract class DropDatabaseMessage extends EventMessage { protected DropDatabaseMessage() { super(EventType.DROP_DATABASE); } + + public abstract Database getDatabaseObject() throws Exception; } diff --git standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropDatabaseMessage.java standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropDatabaseMessage.java index cd8bcdc81284ededdb2e49ce378fab03ea802b59..640d0b992353b818816805ce5978c2d37d75e329 100644 --- standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropDatabaseMessage.java +++ standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONDropDatabaseMessage.java @@ -19,7 +19,9 @@ package org.apache.hadoop.hive.metastore.messaging.json; +import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.metastore.messaging.DropDatabaseMessage; +import org.apache.thrift.TException; import org.codehaus.jackson.annotate.JsonProperty; /** @@ -28,7 +30,7 @@ public class JSONDropDatabaseMessage extends DropDatabaseMessage { @JsonProperty - String server, servicePrincipal, db; + String server, servicePrincipal, db, dbJson; @JsonProperty Long timestamp; @@ -38,11 +40,16 @@ */ public JSONDropDatabaseMessage() {} - public JSONDropDatabaseMessage(String server, String servicePrincipal, String db, Long timestamp) { + public JSONDropDatabaseMessage(String server, String servicePrincipal, Database db, Long timestamp) { this.server = server; this.servicePrincipal = servicePrincipal; - this.db = db; + this.db = db.getName(); this.timestamp = timestamp; + try { + this.dbJson = JSONMessageFactory.createDatabaseObjJson(db); + } catch (TException ex) { + throw new IllegalArgumentException("Could not serialize database object", ex); + } checkValid(); } @@ -59,6 +66,11 @@ public JSONDropDatabaseMessage(String server, String servicePrincipal, String db @Override public Long getTimestamp() { return timestamp; } + @Override + public Database getDatabaseObject() throws Exception { + return (Database) JSONMessageFactory.getTObj(dbJson, Database.class); + } + @Override public String toString() { try { diff --git standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java index 07f51f0a8a1769a7d53e2a88bde5089bdda186af..b192dc958b0f9e73d59d37fcb320935da7d16113 100644 --- standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java +++ standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageFactory.java @@ -117,7 +117,7 @@ public AlterDatabaseMessage buildAlterDatabaseMessage(Database beforeDb, Databas @Override public DropDatabaseMessage buildDropDatabaseMessage(Database db) { - return new JSONDropDatabaseMessage(MS_SERVER_URL, MS_SERVICE_PRINCIPAL, db.getName(), now()); + return new JSONDropDatabaseMessage(MS_SERVER_URL, MS_SERVICE_PRINCIPAL, db, now()); } @Override