From d755882f59202fe62b2ad5a141b3c044c1898aa6 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:

---
 opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java |   63 +++++++++++++++++++++----------
 1 files changed, 43 insertions(+), 20 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java b/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
index 3910ebb..ab88405 100644
--- a/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
+++ b/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
@@ -29,60 +29,83 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.debugInfo;
+import org.opends.server.admin.std.server.SizeLimitLogRotationPolicyCfg;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.ResultCode;
+import org.opends.server.config.ConfigException;
+
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * This class implements a rotation policy based on the size of the
  * file.
  */
-public class SizeBasedRotationPolicy implements RotationPolicy
+public class SizeBasedRotationPolicy implements
+    RotationPolicy<SizeLimitLogRotationPolicyCfg>,
+    ConfigurationChangeListener<SizeLimitLogRotationPolicyCfg>
 {
 
   private long sizeLimit;
-  private DirectoryFileHandler fileHandler;
+
+  SizeLimitLogRotationPolicyCfg currentConfig;
 
   /**
-   * Create the size based policy.
-   *
-   * @param size    The size of the file when rotation takes place.
+   * {@inheritDoc}
    */
-  public SizeBasedRotationPolicy(long size)
+  public void initializeLogRotationPolicy(SizeLimitLogRotationPolicyCfg config)
+      throws ConfigException, InitializationException
   {
-    sizeLimit = size;
+    sizeLimit = config.getFileSizeLimit();
+
+    config.addSizeLimitChangeListener(this);
+    currentConfig = config;
   }
 
   /**
-   * Set the file handler instance.
-   *
-   * @param handler The file handler which manages the file to be rotated.
+   * {@inheritDoc}
    */
-  public void setFileHandler(DirectoryFileHandler handler)
+  public boolean isConfigurationChangeAcceptable(
+      SizeLimitLogRotationPolicyCfg config, List<String> unacceptableReasons)
   {
-    this.fileHandler = handler;
+    // Changes should always be OK
+    return true;
   }
 
   /**
-   * Get the maximum allowable file size.
-   *
-   * @return  The maximum allowable file size.
+   * {@inheritDoc}
    */
-  public long getMaxFileSize()
+  public ConfigChangeResult applyConfigurationChange(
+      SizeLimitLogRotationPolicyCfg config)
   {
-    return sizeLimit;
+    // Default result code.
+    ResultCode resultCode = ResultCode.SUCCESS;
+    boolean adminActionRequired = false;
+    ArrayList<String> messages = new ArrayList<String>();
+
+    sizeLimit = config.getFileSizeLimit();
+
+    currentConfig = config;
+
+    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
   }
 
   /**
    * This method indicates if the log file should be
    * rotated or not.
    *
+   * @param writer The multi file text writer writing the log file.
    * @return true if the file needs to be rotated, false otherwise.
   */
-  public boolean rotateFile()
+  public boolean rotateFile(MultifileTextWriter writer)
   {
-    if (fileHandler.getFileSize() >= sizeLimit)
+    if (writer.getBytesWritten() >= sizeLimit)
     {
       if (debugEnabled())
       {
-        debugInfo("File Length: %d", fileHandler.getFileSize());
+        debugInfo("%d bytes written in current file", writer.getBytesWritten());
       }
       return true;
     }

--
Gitblit v1.10.0