@Test public void testFindPotentialCompactions() throws Exception { // Test that committing unlocks long txnid = openTxn(); LockComponent comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); comp.setTablename("mytable"); comp.setOperationType(DataOperationType.UPDATE); List<LockComponent> components = new ArrayList<LockComponent>(1); components.add(comp); comp = new LockComponent(LockType.SHARED_WRITE, LockLevel.DB, "mydb"); comp.setTablename("yourtable"); comp.setPartitionname("mypartition"); comp.setOperationType(DataOperationType.UPDATE); components.add(comp); LockRequest req = new LockRequest(components, "me", "localhost"); req.setTxnid(txnid); LockResponse res = txnHandler.lock(req); assertTrue(res.getState() == LockState.ACQUIRED); txnHandler.commitTxn(new CommitTxnRequest(txnid)); assertEquals(0, txnHandler.numLocksInLockTable()); Set<CompactionInfo> potentials = txnHandler.findPotentialCompactions(100); assertEquals(2, potentials.size()); boolean sawMyTable = false, sawYourTable = false; for (CompactionInfo ci : potentials) { sawMyTable |= (ci.dbname.equals("mydb") && ci.tableName.equals("mytable") && ci.partName == null); sawYourTable |= (ci.dbname.equals("mydb") && ci.tableName.equals("yourtable") && ci.partName.equals("mypartition")); } assertTrue(sawMyTable); assertTrue(sawYourTable); }
@Test public void addDynamicPartitions() throws Exception { String dbName = "default"; String tableName = "adp_table"; OpenTxnsResponse openTxns = txnHandler.openTxns(new OpenTxnRequest(1, "me", "localhost")); long txnId = openTxns.getTxn_ids().get(0); // lock a table, as in dynamic partitions LockComponent lc = new LockComponent(LockType.SHARED_WRITE, LockLevel.TABLE, dbName); lc.setTablename(tableName); DataOperationType dop = DataOperationType.UPDATE; lc.setOperationType(dop); LockRequest lr = new LockRequest(Arrays.asList(lc), "me", "localhost"); lr.setTxnid(txnId); LockResponse lock = txnHandler.lock(lr); assertEquals(LockState.ACQUIRED, lock.getState()); AddDynamicPartitions adp = new AddDynamicPartitions( txnId, dbName, tableName, Arrays.asList("ds=yesterday", "ds=today")); adp.setOperationType(dop); txnHandler.addDynamicPartitions(adp); txnHandler.commitTxn(new CommitTxnRequest(txnId)); Set<CompactionInfo> potentials = txnHandler.findPotentialCompactions(1000); assertEquals(2, potentials.size()); SortedSet<CompactionInfo> sorted = new TreeSet<CompactionInfo>(potentials); int i = 0; for (CompactionInfo ci : sorted) { assertEquals(dbName, ci.dbname); assertEquals(tableName, ci.tableName); switch (i++) { case 0: assertEquals("ds=today", ci.partName); break; case 1: assertEquals("ds=yesterday", ci.partName); break; default: throw new RuntimeException("What?"); } } }