pvary commented on a change in pull request #2089:
URL: https://github.com/apache/hive/pull/2089#discussion_r608627251
##########
File path: ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
##########
@@ -3239,4 +3247,72 @@ public void testFullTableReadLock() throws Exception {
checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "tab_acid",
null, locks);
checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default",
"tab_not_acid", null, locks);
}
-}
+
+ @Test
+ public void testNonBlockingDropAndReCreateTable() throws Exception {
+ dropTable(new String[] {"tab_acid"});
+
+ conf.setBoolVar(HiveConf.ConfVars.HIVE_TXN_NON_BLOCKING_DROP_TABLE, true);
+ driver2.getConf().setBoolVar(
HiveConf.ConfVars.HIVE_TXN_NON_BLOCKING_DROP_TABLE, true);
+
+ driver.run("create table if not exists tab_acid (a int, b int) partitioned
by (p string) " +
+ "stored as orc TBLPROPERTIES ('transactional'='true')");
+ driver.run("insert into tab_acid partition(p) (a,b,p)
values(1,2,'foo'),(3,4,'bar')");
+
+ driver.compileAndRespond("select * from tab_acid");
+
+ DbTxnManager txnMgr2 = (DbTxnManager)
TxnManagerFactory.getTxnManagerFactory().getTxnManager(conf);
+ swapTxnManager(txnMgr2);
+ driver2.run("drop table if exists tab_acid");
+
+ swapTxnManager(txnMgr);
+ driver.run();
+
+ FileSystem fs = FileSystem.get(conf);
+ FileStatus[] stat = fs.listStatus(new
Path(Paths.get("target/warehouse").toUri()),
+ p -> p.getName().startsWith("tab_acid_v"));
+ if (1 == stat.length) {
+ Assert.fail("Table data was not removed from FS");
+ }
+
+ List res = new ArrayList();
+ driver.getFetchTask().fetch(res);
+ Assert.assertEquals("Non-empty resultset", 0, res.size());
+
+ try {
+ driver.run("select * from tab_acid");
+ } catch (CommandProcessorException ex) {
+ Assert.assertEquals(ErrorMsg.INVALID_TABLE.getErrorCode(),
ex.getResponseCode());
+
Assert.assertTrue(ex.getMessage().contains(ErrorMsg.INVALID_TABLE.getMsg("'tab_acid'")));
+ }
+
+ //re-create table with the same name
+ driver.compileAndRespond("create table if not exists tab_acid (a int, b
int) partitioned by (p string) " +
+ "stored as orc TBLPROPERTIES ('transactional'='true')");
+ long txnId = txnMgr.getCurrentTxnId();
+ driver.run();
+ driver.run("insert into tab_acid partition(p) (a,b,p)
values(1,2,'foo'),(3,4,'bar')");
+
+ driver.run("select * from tab_acid ");
+ res = new ArrayList();
+ driver.getFetchTask().fetch(res);
+ Assert.assertEquals("No records found", 2, res.size());
Review comment:
nit: The message can be a little bit misleading, since we do not check
for empty table
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]