public CompleteBean run(String id, String jobStatus)
throws CallbackFailedException, IOException {
if (id == null)
acceptWithError("No jobid given");
JobState state = null;
/* we don't want to cancel the delegation token if we think the callback is going to
to be retried, for example, because the job is not complete yet */
boolean cancelMetastoreToken = false;
try {
state = new JobState(id, Main.getAppConfigInstance());
if (state.getCompleteStatus() == null)
failed("Job not yet complete. jobId=" + id + " Status from JobTracker=" + jobStatus, null);
Long notified = state.getNotifiedTime();
if (notified != null) {
cancelMetastoreToken = true;
return acceptWithError("Callback already run for jobId=" + id +
" at " + new Date(notified));
}
String callback = state.getCallback();
if (callback == null) {
cancelMetastoreToken = true;
return new CompleteBean("No callback registered");
}
try {
doCallback(state.getId(), callback);
cancelMetastoreToken = true;
} catch (Exception e) {
failed("Callback failed " + callback + " for " + id, e);
}
state.setNotifiedTime(System.currentTimeMillis());
return new CompleteBean("Callback sent");
} finally {
state.close();
HiveMetaStoreClient client = null;
try {
if(cancelMetastoreToken) {
String metastoreTokenStrForm =
DelegationTokenCache.getStringFormTokenCache().getDelegationToken(id);