From 9407539d928c66c61e574a8ff408f0b406ec3edd Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Mon, 13 Apr 2009 19:26:44 +0000
Subject: [PATCH] Fix for issues 2273 and 3482:
---
opendj-sdk/opends/src/server/org/opends/server/loggers/TimeStampNaming.java | 51 ++++++++++++++++++++++---
opendj-sdk/opends/src/server/org/opends/server/loggers/FileNamingPolicy.java | 6 ++-
opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java | 19 +++++----
3 files changed, 60 insertions(+), 16 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNamingPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNamingPolicy.java
index 5d22649..1dc95ef 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNamingPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNamingPolicy.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.loggers;
@@ -58,7 +58,9 @@
public FilenameFilter getFilenameFilter();
/**
- * Gets all the existing files named by this policy.
+ * Gets all the existing files named by this policy in the parent directoy
+ * of the initial file. The initial file is excluded from this list if it
+ * exists.
*
* @return The files named by this policy or <code>null</code> if an
* error occured.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
index 21d4298..ec1aaaa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.loggers;
import org.opends.messages.Message;
@@ -55,8 +55,10 @@
* The tracer object for the debug logger.
*/
private static final DebugTracer TRACER = getTracer();
+ private static final File[] EMPTY_FILE_LIST = new File[0];
private long size = 0;
+ private FileComparator comparator;
private SizeLimitLogRetentionPolicyCfg config;
/**
@@ -66,6 +68,7 @@
SizeLimitLogRetentionPolicyCfg config)
{
this.size = config.getDiskSpaceUsed();
+ this.comparator = new FileComparator();
this.config = config;
config.addSizeLimitChangeListener(this);
@@ -115,8 +118,6 @@
message);
}
- ArrayList<File> filesToDelete = new ArrayList<File>();
-
long totalLength = 0;
for (File file : files)
{
@@ -130,26 +131,28 @@
if (totalLength <= size)
{
- return new File[0];
+ return EMPTY_FILE_LIST;
}
long freeSpaceNeeded = totalLength - size;
// Sort files based on last modified time.
- Arrays.sort(files, new FileComparator());
+ Arrays.sort(files, comparator);
long freedSpace = 0;
- for (int j = files.length - 1; j < 1; j--)
+ int j;
+ for (j = files.length - 1; j >= 0; j--)
{
freedSpace += files[j].length();
- filesToDelete.add(files[j]);
if (freedSpace >= freeSpaceNeeded)
{
break;
}
}
- return filesToDelete.toArray(new File[0]);
+ File[] filesToDelete = new File[files.length - j];
+ System.arraycopy(files, j, filesToDelete, 0, filesToDelete.length);
+ return filesToDelete;
}
/**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeStampNaming.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeStampNaming.java
index b4113d0..38ae09f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeStampNaming.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeStampNaming.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.loggers;
@@ -43,7 +43,8 @@
*/
private static final DebugTracer TRACER = getTracer();
- File file;
+ private File file;
+ private TimeStampNamingFilter filter;
/**
* The FilenameFilter implementation for this naming policy to filter
@@ -66,8 +67,45 @@
{
return false;
}
- name = name.toLowerCase();
- return name.startsWith(file.getName().toLowerCase());
+
+ String initialFileName = file.getName();
+
+ // Make sure it is the expected length.
+ if(name.length() != initialFileName.length() + 16)
+ {
+ return false;
+ }
+
+ int pos;
+ // Make sure we got the expected name prefix.
+ for(pos = 0; pos < initialFileName.length(); pos++)
+ {
+ if(name.charAt(pos) != initialFileName.charAt(pos))
+ {
+ return false;
+ }
+ }
+
+ // Make sure there is a period between the prefix and timestamp.
+ if(name.charAt(pos) != '.')
+ {
+ return false;
+ }
+
+ char c;
+ // Make sure there are 14 numbers for the timestamp.
+ for(pos++; pos < name.length() - 1; pos++)
+ {
+ c = name.charAt(pos);
+ if(c < 48 || c > 57)
+ {
+ return false;
+ }
+ }
+
+ // And ends with an Z.
+ return name.charAt(pos) == 'Z';
+
}
}
@@ -80,6 +118,7 @@
public TimeStampNaming(File file)
{
this.file = file;
+ this.filter = new TimeStampNamingFilter();
}
/**
@@ -103,7 +142,7 @@
*/
public FilenameFilter getFilenameFilter()
{
- return new TimeStampNamingFilter();
+ return filter;
}
/**
@@ -112,7 +151,7 @@
public File[] listFiles()
{
File directory = file.getParentFile();
- File[] files = directory.listFiles(getFilenameFilter());
+ File[] files = directory.listFiles(filter);
if(files == null)
{
--
Gitblit v1.10.0