From 7ccaa46b4a749896b2daabda390d8ddd3ae7743f Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Fri, 10 Apr 2015 14:55:54 +0000
Subject: [PATCH] 

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java |   99 +++++++++++++------------------------------------
 1 files changed, 27 insertions(+), 72 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
index 8076ff5..98bc297 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
@@ -27,7 +27,6 @@
 
 import static com.persistit.Transaction.CommitPolicy.*;
 import static java.util.Arrays.*;
-
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.messages.JebMessages.*;
@@ -37,10 +36,8 @@
 import java.io.File;
 import java.io.FilenameFilter;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -50,7 +47,6 @@
 import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PersistitBackendCfg;
-import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.DiskSpaceMonitorHandler;
 import org.opends.server.backends.pluggable.spi.Cursor;
 import org.opends.server.backends.pluggable.spi.Importer;
@@ -66,7 +62,6 @@
 import org.opends.server.core.MemoryQuota;
 import org.opends.server.core.ServerContext;
 import org.opends.server.extensions.DiskSpaceMonitor;
-import org.opends.server.types.DN;
 import org.opends.server.types.FilePermission;
 
 import com.persistit.Configuration;
@@ -86,7 +81,7 @@
 /** PersistIt database implementation of the {@link Storage} engine. */
 @SuppressWarnings("javadoc")
 public final class PersistItStorage implements Storage, ConfigurationChangeListener<PersistitBackendCfg>,
-  DiskSpaceMonitorHandler, AlertGenerator
+  DiskSpaceMonitorHandler
 {
   private static final String VOLUME_NAME = "dj";
   /** The buffer / page size used by the PersistIt storage. */
@@ -505,6 +500,7 @@
   private PersistitBackendCfg config;
   private DiskSpaceMonitor diskMonitor;
   private MemoryQuota memQuota;
+  private StorageStatus storageStatus = StorageStatus.working();
 
   /**
    * Creates a new persistit storage with the provided configuration.
@@ -528,6 +524,7 @@
     final BufferPoolConfiguration bufferPoolCfg = getBufferPoolCfg();
     bufferPoolCfg.setMaximumCount(Integer.MAX_VALUE);
 
+    diskMonitor = serverContext.getDiskSpaceMonitor();
     memQuota = serverContext.getMemoryQuota();
     if (cfg.getDBCacheSize() > 0)
     {
@@ -568,8 +565,7 @@
       memQuota.releaseMemory(memQuota.memPercentToBytes(config.getDBCachePercent()));
     }
     config.removePersistitChangeListener(this);
-    DirectoryServer.deregisterMonitorProvider(diskMonitor);
-    DirectoryServer.deregisterAlertGenerator(this);
+    diskMonitor.deregisterMonitoredDirectory(getDirectory(), this);
   }
 
   private BufferPoolConfiguration getBufferPoolCfg()
@@ -598,11 +594,12 @@
     {
       throw new StorageRuntimeException(e);
     }
-    // Register as disk space monitor handler
-    diskMonitor = newDiskMonitor(config);
-    DirectoryServer.registerMonitorProvider(diskMonitor);
-    //Register as an AlertGenerator.
-    DirectoryServer.registerAlertGenerator(this);
+    diskMonitor.registerMonitoredDirectory(
+        config.getBackendId() + " backend",
+        getDirectory(),
+        config.getDiskLowThreshold(),
+        config.getDiskFullThreshold(),
+        this);
   }
 
   /** {@inheritDoc} */
@@ -968,9 +965,12 @@
 
         setDBDirPermissions(cfg, newBackendDirectory);
       }
-      diskMonitor.setFullThreshold(cfg.getDiskFullThreshold());
-      diskMonitor.setLowThreshold(cfg.getDiskLowThreshold());
-
+      diskMonitor.registerMonitoredDirectory(
+        config.getBackendId() + " backend",
+        getDirectory(),
+        cfg.getDiskLowThreshold(),
+        cfg.getDiskFullThreshold(),
+        this);
       config = cfg;
     }
     catch (Exception e)
@@ -1037,74 +1037,29 @@
   @Override
   public StorageStatus getStorageStatus()
   {
-    if (diskMonitor.isFullThresholdReached())
-    {
-      return StorageStatus.unusable(WARN_JEB_OUT_OF_DISK_SPACE.get());
-    }
-    if (diskMonitor.isLowThresholdReached())
-    {
-      return StorageStatus.lockedDown(WARN_JEB_OUT_OF_DISK_SPACE.get());
-    }
-    return StorageStatus.working();
+    return storageStatus;
   }
 
   /** {@inheritDoc} */
   @Override
-  public void diskFullThresholdReached(DiskSpaceMonitor monitor) {
-    LocalizableMessage msg = ERR_JEB_DISK_FULL_THRESHOLD_REACHED.get(
-        monitor.getDirectory().getPath(), config.getBackendId(), monitor.getFreeSpace(),
-        Math.max(monitor.getLowThreshold(), monitor.getFullThreshold()));
-    DirectoryServer.sendAlertNotification(this, ALERT_TYPE_DISK_FULL, msg);
+  public void diskFullThresholdReached(File directory, long thresholdInBytes) {
+    storageStatus = StorageStatus.unusable(
+        WARN_DISK_SPACE_FULL_THRESHOLD_CROSSED.get(directory.getFreeSpace(), directory.getAbsolutePath(),
+        thresholdInBytes, config.getBackendId()));
   }
 
   /** {@inheritDoc} */
   @Override
-  public void diskLowThresholdReached(DiskSpaceMonitor monitor) {
-    LocalizableMessage msg = ERR_JEB_DISK_LOW_THRESHOLD_REACHED.get(
-        monitor.getDirectory().getPath(), config.getBackendId(), monitor.getFreeSpace(),
-        Math.max(monitor.getLowThreshold(), monitor.getFullThreshold()));
-    DirectoryServer.sendAlertNotification(this, ALERT_TYPE_DISK_SPACE_LOW, msg);
+  public void diskLowThresholdReached(File directory, long thresholdInBytes) {
+    storageStatus = StorageStatus.lockedDown(
+        WARN_DISK_SPACE_LOW_THRESHOLD_CROSSED.get(directory.getFreeSpace(), directory.getAbsolutePath(),
+        thresholdInBytes, config.getBackendId()));
   }
 
   /** {@inheritDoc} */
   @Override
-  public void diskSpaceRestored(DiskSpaceMonitor monitor) {
-    logger.error(NOTE_JEB_DISK_SPACE_RESTORED, monitor.getFreeSpace(),
-        monitor.getDirectory().getPath(), config.getBackendId(),
-        Math.max(monitor.getLowThreshold(), monitor.getFullThreshold()));
-  }
-
-  private DiskSpaceMonitor newDiskMonitor(PersistitBackendCfg config) throws Exception
-  {
-    File parentDirectory = getFileForPath(config.getDBDirectory());
-    File backendDirectory = new File(parentDirectory, config.getBackendId());
-    DiskSpaceMonitor dm = new DiskSpaceMonitor(config.getBackendId() + " backend",
-        backendDirectory, config.getDiskLowThreshold(), config.getDiskFullThreshold(),
-        5, TimeUnit.SECONDS, this);
-    dm.initializeMonitorProvider(null);
-    return dm;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public DN getComponentEntryDN() {
-    return config.dn();
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public String getClassName() {
-    return PersistItStorage.class.getName();
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public Map<String, String> getAlerts()
-  {
-    Map<String, String> alerts = new LinkedHashMap<String, String>();
-    alerts.put(ALERT_TYPE_DISK_SPACE_LOW, ALERT_DESCRIPTION_DISK_SPACE_LOW);
-    alerts.put(ALERT_TYPE_DISK_FULL, ALERT_DESCRIPTION_DISK_FULL);
-    return alerts;
+  public void diskSpaceRestored(File directory, long lowThresholdInBytes, long fullThresholdInBytes) {
+    storageStatus = StorageStatus.working();
   }
 }
 

--
Gitblit v1.10.0