commit bc8df320f4c46632bbd0b5c30c55edc5a2049bfd Author: Vihang Karajgaonkar Date: Wed Nov 14 11:41:58 2018 -0800 HIVE-20916 : Fix typo in JSONCreateDatabaseMessage and add test for alter database 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 3e404df7c388809b3b5b252ae7dc37260cc8b8da..d4b7b02139429374215d6a65b41f6529e9774e20 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 @@ -81,6 +81,7 @@ import org.apache.hadoop.hive.metastore.events.AllocWriteIdEvent; import org.apache.hadoop.hive.metastore.events.AcidWriteEvent; import org.apache.hadoop.hive.metastore.messaging.AddPartitionMessage; +import org.apache.hadoop.hive.metastore.messaging.AlterDatabaseMessage; import org.apache.hadoop.hive.metastore.messaging.AlterPartitionMessage; import org.apache.hadoop.hive.metastore.messaging.AlterTableMessage; import org.apache.hadoop.hive.metastore.messaging.CreateDatabaseMessage; @@ -341,6 +342,7 @@ public void createDatabase() throws Exception { // Parse the message field CreateDatabaseMessage createDbMsg = md.getCreateDatabaseMessage(event.getMessage()); assertEquals(dbName, createDbMsg.getDB()); + assertEquals(db, createDbMsg.getDatabaseObject()); // Verify the eventID was passed to the non-transactional listener MockMetaStoreEventListener.popAndVerifyLastEventId(EventType.CREATE_DATABASE, firstEventId + 1); @@ -364,6 +366,39 @@ public void createDatabase() throws Exception { } @Test + public void alterDatabase() throws Exception { + String dbName = "alterdb"; + String dbLocationUri = testTempDir; + String dbDescription = "no description"; + msClient.createDatabase(new Database(dbName, dbDescription, dbLocationUri, emptyParameters)); + // get the db for comparison below since it may include additional parameters + Database dbBefore = msClient.getDatabase(dbName); + // create alter database notification + String newDesc = "test database"; + Database dbAfter = dbBefore.deepCopy(); + dbAfter.setDescription(newDesc); + msClient.alterDatabase(dbName, dbAfter); + dbAfter = msClient.getDatabase(dbName); + + // Read notification from metastore + NotificationEventResponse rsp = msClient.getNextNotification(firstEventId, 0, null); + assertEquals(2, rsp.getEventsSize()); + // check the contents of alter database notification + NotificationEvent event = rsp.getEvents().get(1); + assertEquals(firstEventId + 2, event.getEventId()); + assertTrue(event.getEventTime() >= startTime); + assertEquals(EventType.ALTER_DATABASE.toString(), event.getEventType()); + assertEquals(dbName, event.getDbName()); + assertNull(event.getTableName()); + + // Parse the message field + AlterDatabaseMessage alterDatabaseMessage = md.getAlterDatabaseMessage(event.getMessage()); + assertEquals(dbName, alterDatabaseMessage.getDB()); + assertEquals(dbBefore, alterDatabaseMessage.getDbObjBefore()); + assertEquals(dbAfter, alterDatabaseMessage.getDbObjAfter()); + } + + @Test public void dropDatabase() throws Exception { String dbName = "dropdb"; String dbName2 = "dropdb2"; diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONCreateDatabaseMessage.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONCreateDatabaseMessage.java index 1f5c9e837494cff260f7894eedb2bd4610ce796a..4ee854adb3c69390e0219783e1dec51bb4d7aaa8 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONCreateDatabaseMessage.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/messaging/json/JSONCreateDatabaseMessage.java @@ -51,7 +51,7 @@ public JSONCreateDatabaseMessage(String server, String servicePrincipal, Databas try { this.dbJson = MessageBuilder.createDatabaseObjJson(db); } catch (TException ex) { - throw new IllegalArgumentException("Could not serialize Function object", ex); + throw new IllegalArgumentException("Could not serialize database object", ex); } checkValid(); }