From 824f0586f7abb109b9c3eb91050930c40f528c72 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Mon, 2 May 2011 18:27:13 -0700 Subject: [PATCH] Add manager context to CleanupMaid to allow management service access in cleanup() method --- .../cloud/cluster/CheckPointManagerImpl.java | 57 ++++++++++--------- server/src/com/cloud/cluster/CleanupMaid.java | 2 +- .../cloud/cluster/CheckPointManagerTest.java | 2 +- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/server/src/com/cloud/cluster/CheckPointManagerImpl.java b/server/src/com/cloud/cluster/CheckPointManagerImpl.java index fc4f3988f9d..7e0f357b63e 100644 --- a/server/src/com/cloud/cluster/CheckPointManagerImpl.java +++ b/server/src/com/cloud/cluster/CheckPointManagerImpl.java @@ -18,31 +18,31 @@ package com.cloud.cluster; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.cluster.dao.StackMaidDao; -import com.cloud.configuration.Config; -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.serializer.SerializerHelper; -import com.cloud.utils.DateUtil; -import com.cloud.utils.NumbersUtil; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; -import com.cloud.utils.component.Manager; -import com.cloud.utils.concurrency.NamedThreadFactory; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.GlobalLock; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.cluster.dao.StackMaidDao; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.serializer.SerializerHelper; +import com.cloud.utils.DateUtil; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; +import com.cloud.utils.concurrency.NamedThreadFactory; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.GlobalLock; @Local(value=CheckPointManager.class) public class CheckPointManagerImpl implements CheckPointManager, Manager, ClusterManagerListener { @@ -163,13 +163,15 @@ public class CheckPointManagerImpl implements CheckPointManager, Manager, Cluste } } - @Override + @Override + @DB public long pushCheckPoint(CleanupMaid context) { long seq = _maidDao.pushCleanupDelegate(_msId, 0, context.getClass().getName(), context); return seq; } @Override + @DB public void updateCheckPointState(long taskId, CleanupMaid updatedContext) { CheckPointVO task = _maidDao.createForUpdate(); task.setDelegate(updatedContext.getClass().getName()); @@ -178,6 +180,7 @@ public class CheckPointManagerImpl implements CheckPointManager, Manager, Cluste } @Override + @DB public void popCheckPoint(long taskId) { _maidDao.remove(taskId); } @@ -187,7 +190,7 @@ public class CheckPointManagerImpl implements CheckPointManager, Manager, Cluste CleanupMaid delegate = (CleanupMaid)SerializerHelper.fromSerializedString(task.getContext()); assert delegate.getClass().getName().equals(task.getDelegate()) : "Deserializer says " + delegate.getClass().getName() + " but it's suppose to be " + task.getDelegate(); - int result = delegate.cleanup(); + int result = delegate.cleanup(this); if (result <= 0) { if (result == 0) { s_logger.info("Successfully cleaned up " + task.getId()); diff --git a/server/src/com/cloud/cluster/CleanupMaid.java b/server/src/com/cloud/cluster/CleanupMaid.java index 6bcca4b2d21..1d8295f7714 100644 --- a/server/src/com/cloud/cluster/CleanupMaid.java +++ b/server/src/com/cloud/cluster/CleanupMaid.java @@ -33,7 +33,7 @@ public interface CleanupMaid { * indicates the cleanup was unsuccessful but don't retry. Positive number * indicates the cleanup was unsuccessful and retry in this many seconds. */ - int cleanup(); + int cleanup(CheckPointManager checkPointMgr); /** diff --git a/server/test/com/cloud/cluster/CheckPointManagerTest.java b/server/test/com/cloud/cluster/CheckPointManagerTest.java index 9692f04b423..61ed45db98f 100644 --- a/server/test/com/cloud/cluster/CheckPointManagerTest.java +++ b/server/test/com/cloud/cluster/CheckPointManagerTest.java @@ -216,7 +216,7 @@ public class CheckPointManagerTest extends TestCase { } @Override - public int cleanup() { + public int cleanup(CheckPointManager checkPointMgr) { s_logger.debug("Cleanup called for " + seq); map.remove(seq); return canBeCleanup ? 0 : -1;