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/TimeLimitRotationPolicy.java |   67 ++++++++++++++++++++++-----------
 1 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java b/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
index 4b78509..7501deb 100644
--- a/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
+++ b/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
@@ -27,26 +27,58 @@
 package org.opends.server.loggers;
 
 import org.opends.server.util.TimeThread;
+import org.opends.server.admin.std.server.TimeLimitLogRotationPolicyCfg;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.ResultCode;
+
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * This class implements a fixed time based rotation policy.
  * Rotation will happen N seconds since the last rotation.
  */
-public class TimeLimitRotationPolicy implements RotationPolicy
+public class TimeLimitRotationPolicy implements
+    RotationPolicy<TimeLimitLogRotationPolicyCfg>,
+    ConfigurationChangeListener<TimeLimitLogRotationPolicyCfg>
 {
-
   private long timeInterval = 0;
-  private long lastModifiedTime = 0;
 
   /**
-   * Create the time based rotation policy.
-   *
-   * @param time The time interval between rotations.
+   * {@inheritDoc}
    */
-  public TimeLimitRotationPolicy(long time)
+  public void initializeLogRotationPolicy(TimeLimitLogRotationPolicyCfg config)
   {
-    timeInterval = time;
-    lastModifiedTime = TimeThread.getTime();
+    timeInterval = config.getRotationInterval();
+
+    config.addTimeLimitChangeListener(this);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean isConfigurationChangeAcceptable(
+      TimeLimitLogRotationPolicyCfg config, List<String> unacceptableReasons)
+  {
+    // Changes should always be OK
+    return true;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public ConfigChangeResult applyConfigurationChange(
+      TimeLimitLogRotationPolicyCfg config)
+  {
+    // Default result code.
+    ResultCode resultCode = ResultCode.SUCCESS;
+    boolean adminActionRequired = false;
+    ArrayList<String> messages = new ArrayList<String>();
+
+    timeInterval = config.getRotationInterval();
+
+    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
   }
 
 
@@ -54,24 +86,13 @@
    * This method indicates if the log file should be
    * rotated or not.
    *
+   * @param writer The mutli file text writer written the log file.
    * @return true if the file should be rotated, false otherwise.
    */
-  public boolean rotateFile()
+  public boolean rotateFile(MultifileTextWriter writer)
   {
     long currTime = TimeThread.getTime();
-    if (currTime - lastModifiedTime > timeInterval)
-    {
-      do
-      {
-        lastModifiedTime += timeInterval;
-      }
-      while (lastModifiedTime < currTime);
-
-      // lastModifiedTime = currTime;
-      return true;
-    }
-
-    return false;
+    return currTime - writer.getLastRotationTime() > timeInterval;
   }
 
 }

--
Gitblit v1.10.0