diff --git a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java index dd838f2f3ff..29f8a8decdd 100644 --- a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java @@ -316,6 +316,7 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna _sanity = _sanityExecutor.scheduleAtFixedRate(new SanityCheck(), 1, _sanityCheckInterval, TimeUnit.DAYS); } + Runtime.getRuntime().addShutdownHook(new AbandonJob()); TransactionLegacy usageTxn = TransactionLegacy.open(TransactionLegacy.USAGE_DB); try { if (_heartbeatLock.lock(3)) { // 3 second timeout @@ -345,9 +346,11 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna if (_sanity != null) { _sanity.cancel(true); } + return true; } + @Override public void run() { (new ManagedContextRunnable() { @@ -2183,4 +2186,17 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna } } } + private class AbandonJob extends Thread { + @Override + public void run() { + s_logger.info("exitting Usage Manager"); + deleteOpenjob(); + } + private void deleteOpenjob() { + UsageJobVO job = _usageJobDao.isOwner(_hostname, _pid); + if (job != null) { + _usageJobDao.remove(job.getId()); + } + } + } }