Piotr Kliczewski has uploaded a new change for review. Change subject: events: vm stats refersher refactioring ......................................................................
events: vm stats refersher refactioring Change-Id: I40139f9c90bd9ceeb297adf9f8bd3ab7f9113930 Signed-off-by: pkliczewski <piotr.kliczew...@gmail.com> --- A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/PollVMStatsRefresher.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RefresherFactory.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VMStatsRefresher.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java 4 files changed, 97 insertions(+), 33 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/37487/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/PollVMStatsRefresher.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/PollVMStatsRefresher.java new file mode 100644 index 0000000..ec60847 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/PollVMStatsRefresher.java @@ -0,0 +1,72 @@ +package org.ovirt.engine.core.vdsbroker; + +import java.util.concurrent.TimeUnit; + +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.utils.timer.SchedulerUtil; +import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl; + +public class PollVMStatsRefresher implements VMStatsRefresher { + + private VdsManager manager; + private SchedulerUtil sched; + private String vmsMonitoringJobId; + private int refreshIteration = 1; + private final int numberRefreshesBeforeSave = Config.<Integer> getValue(ConfigValues.NumberVmRefreshesBeforeSave); + + public PollVMStatsRefresher(VdsManager manager) { + this.manager = manager; + this.sched = SchedulerUtilQuartzImpl.getInstance(); + } + + @Override + public void startMonitoring() { + int refreshRate = Config.<Integer> getValue(ConfigValues.VdsRefreshRate) * 1000; + refreshIteration = numberRefreshesBeforeSave - 1; + + vmsMonitoringJobId = + sched.scheduleAFixedDelayJob( + manager, + "vmsMonitoring", + new Class[0], + new Object[0], + refreshRate, + refreshRate, + TimeUnit.MILLISECONDS); + } + + @Override + public void stopMonitoring() { + SchedulerUtilQuartzImpl.getInstance().deleteJob(vmsMonitoringJobId); + } + + @Override + public void perform() { + if (this.manager.isMonitoringNeeded()) { + VmsListFetcher fetcher = + getRefreshStatistics() ? + new VmsStatisticsFetcher(this.manager) : + new VmsListFetcher(this.manager); + fetcher.fetch(); + new VmsMonitoring(this.manager, + fetcher.getChangedVms(), + fetcher.getVmsWithChangedDevices()).perform(); + } + + } + + public boolean getRefreshStatistics() { + return (refreshIteration == numberRefreshesBeforeSave); + } + + @Override + public void update() { + if (refreshIteration == numberRefreshesBeforeSave) { + refreshIteration = 1; + } else { + refreshIteration++; + } + } + +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RefresherFactory.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RefresherFactory.java new file mode 100644 index 0000000..6972462 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/RefresherFactory.java @@ -0,0 +1,9 @@ +package org.ovirt.engine.core.vdsbroker; + + +// TODO Use CDI to inject it +public class RefresherFactory { + public static VMStatsRefresher create(final VdsManager manager) { + return new PollVMStatsRefresher(manager); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VMStatsRefresher.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VMStatsRefresher.java new file mode 100644 index 0000000..822eeb0 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VMStatsRefresher.java @@ -0,0 +1,9 @@ +package org.ovirt.engine.core.vdsbroker; + +public interface VMStatsRefresher { + void startMonitoring(); + void stopMonitoring(); + void perform(); + void update(); + boolean getRefreshStatistics(); +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java index 4f33d3e..12ff7da 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java @@ -64,7 +64,6 @@ public class VdsManager { private static Logger log = LoggerFactory.getLogger(VdsManager.class); private static Map<Guid, String> recoveringJobIdMap = new ConcurrentHashMap<Guid, String>(); - private final int numberRefreshesBeforeSave = Config.<Integer> getValue(ConfigValues.NumberVmRefreshesBeforeSave); private final Object lockObj = new Object(); private final AtomicInteger mFailedToRunVmAttempts; private final AtomicInteger mUnrespondedAttempts; @@ -76,8 +75,6 @@ private long updateStartTime; private long nextMaintenanceAttemptTime; private String onTimerJobId; - private String vmsMonitoringJobId; - private int refreshIteration = 1; private boolean isSetNonOperationalExecuted; private MonitoringStrategy monitoringStrategy; private EngineLock monitoringLock; @@ -87,6 +84,7 @@ private HostMonitoring hostMonitoring; private boolean monitoringNeeded; private List<Pair<VM, VmInternalData>> lastVmsList = Collections.emptyList(); + private VMStatsRefresher refresher; private VdsManager(VDS vds) { log.info("Entered VdsManager constructor"); @@ -135,9 +133,6 @@ SchedulerUtil sched = SchedulerUtilQuartzImpl.getInstance(); int refreshRate = Config.<Integer> getValue(ConfigValues.VdsRefreshRate) * 1000; - // start with refresh statistics - refreshIteration = numberRefreshesBeforeSave - 1; - onTimerJobId = sched.scheduleAFixedDelayJob( this, @@ -148,15 +143,8 @@ refreshRate, TimeUnit.MILLISECONDS); - vmsMonitoringJobId = - sched.scheduleAFixedDelayJob( - this, - "vmsMonitoring", - new Class[0], - new Object[0], - refreshRate, - refreshRate, - TimeUnit.MILLISECONDS); + this.refresher = RefresherFactory.create(this); + this.refresher.startMonitoring(); } private void initVdsBroker() { @@ -193,11 +181,7 @@ } try { - if (refreshIteration == numberRefreshesBeforeSave) { - refreshIteration = 1; - } else { - refreshIteration++; - } + this.refresher.update(); if (isMonitoringNeeded()) { setStartTime(); hostMonitoring = new HostMonitoring(VdsManager.this, cachedVds, monitoringStrategy); @@ -266,17 +250,7 @@ @OnTimerMethodAnnotation("vmsMonitoring") public void vmsMonitoring() { - if (isMonitoringNeeded()) { - VmsListFetcher fetcher = - getRefreshStatistics() ? - new VmsStatisticsFetcher(this) : - new VmsListFetcher(this); - fetcher.fetch(); - new VmsMonitoring(this, - fetcher.getChangedVms(), - fetcher.getVmsWithChangedDevices() - ).perform(); - } + this.refresher.perform(); } /** @@ -763,7 +737,7 @@ public void dispose() { log.info("vdsManager::disposing"); SchedulerUtilQuartzImpl.getInstance().deleteJob(onTimerJobId); - SchedulerUtilQuartzImpl.getInstance().deleteJob(vmsMonitoringJobId); + this.refresher.stopMonitoring(); vdsProxy.close(); } @@ -926,7 +900,7 @@ } public boolean getRefreshStatistics() { - return (refreshIteration == numberRefreshesBeforeSave); + return this.refresher.getRefreshStatistics(); } public Object getLockObj() { -- To view, visit http://gerrit.ovirt.org/37487 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I40139f9c90bd9ceeb297adf9f8bd3ab7f9113930 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Piotr Kliczewski <piotr.kliczew...@gmail.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches