From ecfef39261a93e691fd5e52a2ce0b4b88a032bef Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Thu, 24 Jan 2008 17:19:15 +0000
Subject: [PATCH] Improved error handling in logger retention policy enforcement. The rotater thread will now handle exceptions rasied during rotation and/or retention runs.
---
opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java | 72 ++++++++++++++++++++++-------------
1 files changed, 45 insertions(+), 27 deletions(-)
diff --git a/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java b/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
index 0239bfd..44dc71f 100644
--- a/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
+++ b/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.loggers;
import org.opends.messages.Message;
@@ -34,12 +34,16 @@
import java.util.List;
import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.messages.LoggerMessages.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.ResultCode;
import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.DirectoryException;
import org.opends.server.admin.std.server.FreeDiskSpaceLogRetentionPolicyCfg;
import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.core.DirectoryServer;
+import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
/**
@@ -56,8 +60,8 @@
*/
private static final DebugTracer TRACER = getTracer();
-
private long freeDiskSpace = 0;
+ private FreeDiskSpaceLogRetentionPolicyCfg config;
/**
* {@inheritDoc}
@@ -65,7 +69,8 @@
public void initializeLogRetentionPolicy(
FreeDiskSpaceLogRetentionPolicyCfg config)
{
- freeDiskSpace = config.getFreeDiskSpace();
+ this.freeDiskSpace = config.getFreeDiskSpace();
+ this.config = config;
config.addFreeDiskSpaceChangeListener(this);
}
@@ -92,27 +97,35 @@
boolean adminActionRequired = false;
ArrayList<Message> messages = new ArrayList<Message>();
- freeDiskSpace = config.getFreeDiskSpace();
+ this.freeDiskSpace = config.getFreeDiskSpace();
+ this.config = config;
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.
+ * {@inheritDoc}
*/
- public int deleteFiles(MultifileTextWriter writer)
+ public File[] deleteFiles(FileNamingPolicy fileNamingPolicy)
+ throws DirectoryException
{
- File[] files = writer.getNamingPolicy().listFiles();
+ File[] files = fileNamingPolicy.listFiles();
+ if(files == null)
+ {
+ Message message =
+ ERR_LOGGER_ERROR_LISTING_FILES.get(
+ fileNamingPolicy.getInitialName().toString());
+ throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ message);
+ }
+
+ ArrayList<File> filesToDelete = new ArrayList<File>();
if(files.length <= 0)
{
- return 0;
+ return new File[0];
}
- int count = 0;
long freeSpace = 0;
try
@@ -129,19 +142,23 @@
{
TRACER.debugCaught(DebugLogLevel.ERROR, e);
}
- return 0;
+ Message message =
+ ERR_LOGGER_ERROR_OBTAINING_FREE_SPACE.get(files[0].toString(),
+ stackTraceToSingleLineString(e));
+ throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ message, e);
}
- if(debugEnabled())
- { // TODO: i18n
- TRACER.debugInfo("Current free disk space: %d, Required: %d", freeSpace,
- freeDiskSpace);
- }
+ if(debugEnabled())
+ {
+ TRACER.debugInfo("Current free disk space: %d, Required: %d", freeSpace,
+ freeDiskSpace);
+ }
if (freeSpace > freeDiskSpace)
{
// No cleaning needed.
- return 0;
+ return new File[0];
}
long freeSpaceNeeded = freeDiskSpace - freeSpace;
@@ -153,21 +170,22 @@
for (int j = files.length - 1; j < 1; j--)
{
freedSpace += files[j].length();
- if(debugEnabled())
- {
- TRACER.debugInfo("Deleting log file:", files[j]);
- }
- files[j].delete();
+ filesToDelete.add(files[j]);
if (freedSpace >= freeSpaceNeeded)
{
break;
}
-
- count++;
}
- return count;
+ return filesToDelete.toArray(new File[0]);
}
+ /**
+ * {@inheritDoc}
+ */
+ public String toString()
+ {
+ return "Free Disk Retention Policy " + config.dn().toString();
+ }
}
--
Gitblit v1.10.0