modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java | 73 ++++++---- 1 file changed, 51 insertions(+), 22 deletions(-)
New commits: commit 0f67cf2bd3aa8aa9d54abdfbda3c0002dc9f23ba Author: John Sanda jsanda@redhat.com Date: Wed Sep 28 11:47:54 2011 -0400
Scan for change set content at start up that needs to be resent to server
During initialization DriftManager now scans the changesets directory for content zip files. DriftManager will resend them to the server since presumably the server did not already get/persist the content.
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java index ab83351..2dbd0b5 100644 --- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java +++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/drift/DriftManager.java @@ -23,6 +23,7 @@ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; @@ -42,7 +43,6 @@ import org.rhq.core.clientapi.server.drift.DriftServerService; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.drift.Drift; import org.rhq.core.domain.drift.DriftConfiguration; -import org.rhq.core.domain.drift.DriftConfigurationComparator; import org.rhq.core.domain.drift.DriftFile; import org.rhq.core.domain.drift.DriftSnapshot; import org.rhq.core.domain.resource.Resource; @@ -59,7 +59,6 @@ import static org.rhq.common.drift.FileEntry.addedFileEntry; import static org.rhq.common.drift.FileEntry.changedFileEntry; import static org.rhq.common.drift.FileEntry.removedFileEntry; import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE; -import static org.rhq.core.domain.drift.DriftConfigurationComparator.CompareMode.BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS; import static org.rhq.core.util.file.FileUtil.purge;
public class DriftManager extends AgentService implements DriftAgentService, DriftClient, ContainerService { @@ -95,6 +94,7 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
@Override public void initialize() { + long initStartTime = System.currentTimeMillis(); changeSetsDir.mkdir(); changeSetMgr = new ChangeSetManagerImpl(changeSetsDir);
@@ -107,8 +107,12 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri long startTime = System.currentTimeMillis(); initSchedules(inventoryMgr.getPlatform(), inventoryMgr); long endTime = System.currentTimeMillis(); - log.info("Finished initializing drift detection schedules in " + (endTime - startTime) + " ms");
+ if (log.isInfoEnabled()) { + log.info("Finished initializing drift detection schedules in " + (endTime - startTime) + " ms"); + } + + scanForContentToResend(); purgeDeletedDriftConfigDirs();
driftThreadPool = new ScheduledThreadPoolExecutor(5); @@ -123,6 +127,10 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri }
initialized = true; + long initEndTime = System.currentTimeMillis(); + if (log.isInfoEnabled()) { + log.info("Finished initialization in " + (initEndTime - initStartTime) + " ms"); + } }
private void initSchedules(Resource r, InventoryManager inventoryMgr) { @@ -199,8 +207,6 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri
private void purgeDeletedDriftConfigDirs() { log.info("Checking for deleted drift configurations"); - DriftConfigurationComparator comparator = new DriftConfigurationComparator( - BOTH_BASE_INFO_AND_DIRECTORY_SPECIFICATIONS); for (File resourceDir : changeSetsDir.listFiles()) { int resourceId = Integer.parseInt(resourceDir.getName()); for (File configDir : resourceDir.listFiles()) { @@ -216,6 +222,20 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri } }
+ private void scanForContentToResend() { + log.info("Scanning for change set content to resend..."); + for (File resourceDir : changeSetsDir.listFiles()) { + for (File configDir : resourceDir.listFiles()) { + for (File contentZipFile : configDir.listFiles(new ZipFileNameFilter("content_"))) { + if (log.isDebugEnabled()) { + log.debug("Resending " + contentZipFile.getPath()); + } + sendContentZipFile(Integer.parseInt(resourceDir.getName()), configDir.getName(), contentZipFile); + } + } + } + } + private String toString(Resource r, DriftConfiguration c) { return toString(r.getId(), c); } @@ -338,9 +358,10 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri } stream.close();
- DriftServerService driftServer = pluginContainerConfiguration.getServerServices().getDriftServerService(); - driftServer.sendFilesZip(resourceId, driftConfigurationName, timestamp, zipFile.length(), - remoteInputStream(new BufferedInputStream(new FileInputStream(zipFile)))); +// DriftServerService driftServer = pluginContainerConfiguration.getServerServices().getDriftServerService(); +// driftServer.sendFilesZip(resourceId, driftConfigurationName, timestamp, zipFile.length(), +// remoteInputStream(new BufferedInputStream(new FileInputStream(zipFile)))); + sendContentZipFile(resourceId, driftConfigurationName, zipFile); } catch (IOException e) { log.error("An error occurred while trying to send content for changeset[resourceId: " + resourceId + ", driftConfiguration: " + driftConfigurationName + "]", e); @@ -353,6 +374,21 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri } }
+ private void sendContentZipFile(int resourceId, String driftConfigName, File contentZipFile) { + try { + int startIndex = "content_".length(); + int endIndex = contentZipFile.getName().indexOf("."); + String token = contentZipFile.getName().substring(startIndex, endIndex); + + DriftServerService driftServer = pluginContainerConfiguration.getServerServices().getDriftServerService(); + driftServer.sendFilesZip(resourceId, driftConfigName, token, contentZipFile.length(), + remoteInputStream(new BufferedInputStream(new FileInputStream(contentZipFile)))); + } catch (FileNotFoundException e) { + log.error("An error occurred while trying to send change set content zip file " + + contentZipFile.getPath() + " to server.", e); + } + } + @Override public void detectDrift(int resourceId, DriftConfiguration driftConfiguration) { if (log.isInfoEnabled()) { @@ -524,13 +560,7 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri }
private void deleteZipFiles(File dir, final String prefix) { - File[] files = dir.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith(prefix) && name.endsWith(".zip"); - } - }); - for (File file : files) { + for (File file : dir.listFiles(new ZipFileNameFilter(prefix))) { file.delete(); } } @@ -629,17 +659,16 @@ public class DriftManager extends AgentService implements DriftAgentService, Dri return PluginContainer.getInstance().getMeasurementManager(); }
- private static class DeleteFile implements Runnable { + private static class ZipFileNameFilter implements FilenameFilter { + private String prefix;
- private File file; - - public DeleteFile(File file) { - this.file = file; + public ZipFileNameFilter(String prefix) { + this.prefix = prefix; }
@Override - public void run() { - file.delete(); + public boolean accept(File dir, String name) { + return name.startsWith(prefix) && name.endsWith(".zip"); } } }