From 6dc91f889744c17a9a0d8a7c92276b62dea25941 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Thu, 03 May 2007 21:55:23 +0000
Subject: [PATCH] Major changes made to the logging framework. It should resolve the following issues:
---
opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java | 88 +++++++++++++++++++++++++++++++++----------
1 files changed, 67 insertions(+), 21 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
index 2def134..b3cc34e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
@@ -29,54 +29,92 @@
import java.io.File;
import java.lang.reflect.Method;
import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
import static org.opends.server.loggers.debug.DebugLogger.debugCaught;
import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.debugInfo;
import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.ResultCode;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.admin.std.server.FreeDiskSpaceLogRetentionPolicyCfg;
+import org.opends.server.admin.server.ConfigurationChangeListener;
/**
* This class implements a retention policy based on the free disk
* space available expressed as a percentage. This policy is only
* available on Java 6.
*/
-public class FreeDiskSpaceRetentionPolicy implements RetentionPolicy
+public class FreeDiskSpaceRetentionPolicy implements
+ RetentionPolicy<FreeDiskSpaceLogRetentionPolicyCfg>,
+ ConfigurationChangeListener<FreeDiskSpaceLogRetentionPolicyCfg>
{
private long freeDiskSpace = 0;
- private File directory = null;
- private String prefix = null;
/**
- * Create the retention policy based on the free disk space available.
- *
- * @param dir The directory in which the log files reside.
- * @param prefix The prefix for the log file names.
- * @param freeDiskSpace The free disk space needed.
+ * {@inheritDoc}
*/
- public FreeDiskSpaceRetentionPolicy(String dir, String prefix,
- long freeDiskSpace)
+ public void initializeLogRetentionPolicy(
+ FreeDiskSpaceLogRetentionPolicyCfg config)
{
- this.directory = new File(dir);
- this.freeDiskSpace = freeDiskSpace;
- this.prefix = prefix;
+ freeDiskSpace = config.getFreeDiskSpace();
+
+ config.addFreeDiskSpaceChangeListener(this);
}
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isConfigurationChangeAcceptable(
+ FreeDiskSpaceLogRetentionPolicyCfg config,
+ List<String> unacceptableReasons)
+ {
+ // Changes should always be OK
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ConfigChangeResult applyConfigurationChange(
+ FreeDiskSpaceLogRetentionPolicyCfg config)
+ {
+ // Default result code.
+ ResultCode resultCode = ResultCode.SUCCESS;
+ boolean adminActionRequired = false;
+ ArrayList<String> messages = new ArrayList<String>();
+
+ freeDiskSpace = config.getFreeDiskSpace();
+
+ return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ }
/**
* This method deletes files based on the policy.
*
+ * @param writer the multi file text writer writing the log files.
* @return number of files deleted.
*/
- public int deleteFiles()
+ public int deleteFiles(MultifileTextWriter writer)
{
+ File[] files = writer.getNamingPolicy().listFiles();
+
+ if(files.length <= 0)
+ {
+ return 0;
+ }
+
int count = 0;
long freeSpace = 0;
+
try
{
// Use reflection to see use the getFreeSpace method if available.
// this method is only available on Java 6.
Method meth = File.class.getMethod("getFreeSpace", new Class[0]);
- Object value = meth.invoke(this.directory);
+ Object value = meth.invoke(files[0]);
freeSpace = ((Long) value).longValue();
}
catch (Exception e)
@@ -88,6 +126,12 @@
return 0;
}
+ if(debugEnabled())
+ {
+ debugInfo("Current free disk space: %d, Required: %d", freeSpace,
+ freeDiskSpace);
+ }
+
if (freeSpace > freeDiskSpace)
{
// No cleaning needed.
@@ -95,17 +139,19 @@
}
long freeSpaceNeeded = freeDiskSpace - freeSpace;
- File[] selectedFiles = directory.listFiles(new LogFileFilter(prefix));
// Sort files based on last modified time.
- Arrays.sort(selectedFiles, new FileComparator());
+ Arrays.sort(files, new FileComparator());
long freedSpace = 0;
- for (int j = selectedFiles.length - 1; j < 1; j--)
+ for (int j = files.length - 1; j < 1; j--)
{
- freedSpace += selectedFiles[j].length();
- // System.out.println("Deleting log file:" + selectedFiles[j]);
- selectedFiles[j].delete();
+ freedSpace += files[j].length();
+ if(debugEnabled())
+ {
+ debugInfo("Deleting log file:", files[j]);
+ }
+ files[j].delete();
if (freedSpace >= freeSpaceNeeded)
{
break;
--
Gitblit v1.10.0