part2 = "dt=20120102;country=us";
part3 = "dt=20120103;country=us";
String newHCatDependency1 = "hcat://" + server + "/" + db + "/" + table1 + "/" + part1;
String newHCatDependency2 = "hcat://" + server + "/" + db + "/" + table1 + "/" + part2;
String newHCatDependency3 = "hcat://" + server + "/" + db + "/" + table2 + "/" + part3;
HCatURI dep1 = new HCatURI(newHCatDependency1);
HCatURI dep2 = new HCatURI(newHCatDependency2);
HCatURI dep3 = new HCatURI(newHCatDependency3);
// create db, table and partitions
populateTable();
String actionId1 = addInitRecords(newHCatDependency1);
String actionId2 = addInitRecords(newHCatDependency2);
String actionId3 = addInitRecords(newHCatDependency3);
// Assume dependency cache on dummy server with missing push dependencies registered
PartitionDependencyManagerService dummyPdms = new PartitionDependencyManagerService();
PartitionDependencyManagerService pdms = Services.get().get(PartitionDependencyManagerService.class);
dummyPdms.init(Services.get());
dummyPdms.addMissingDependency(dep1, actionId1);
dummyPdms.addMissingDependency(dep2, actionId2);
dummyPdms.addMissingDependency(dep3, actionId3);
Collection<String> waitingActions = (Collection<String>)dummyPdms.getWaitingActions(dep1);
assertEquals(1, waitingActions.size());
waitingActions = (Collection<String>)dummyPdms.getWaitingActions(dep2);
assertEquals(1, waitingActions.size());
waitingActions = (Collection<String>)dummyPdms.getWaitingActions(dep3);
assertEquals(1, waitingActions.size());
//Dependency cache on living server doesn't have these partitions registered at this point
waitingActions = (Collection<String>)pdms.getWaitingActions(dep1);
assertNull(waitingActions);
waitingActions = (Collection<String>)pdms.getWaitingActions(dep2);
assertNull(waitingActions);
waitingActions = (Collection<String>)pdms.getWaitingActions(dep3);
assertNull(waitingActions);
//Assume dummy server is down, and recovery service on living server pick up these jobs
dummyPdms.destroy();
Runnable recoveryRunnable = new RecoveryRunnable(60, 0, 60);
recoveryRunnable.run();
waitFor(30 * 1000, new Predicate() {
public boolean evaluate() throws Exception {
Collection<String> waitingActions;
PartitionDependencyManagerService pdms = Services.get().get(PartitionDependencyManagerService.class);
HCatURI dep1 = new HCatURI("hcat://"+ server + "/" + db + "/" + table1 + "/" + part1);
HCatURI dep2 = new HCatURI("hcat://"+ server + "/" + db + "/" + table1 + "/" + part2);
HCatURI dep3 = new HCatURI("hcat://"+ server + "/" + db + "/" + table2 + "/" + part3);
waitingActions = pdms.getWaitingActions(dep1);
if(waitingActions == null) {
return false;
}
waitingActions = pdms.getWaitingActions(dep2);