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/jeb/BackendImpl.java | 65 ++++++++++++--------------------
1 files changed, 25 insertions(+), 40 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/BackendImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/BackendImpl.java
index 639081b..a517e4e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/BackendImpl.java
@@ -27,7 +27,6 @@
package org.opends.server.backends.jeb;
import static com.sleepycat.je.EnvironmentConfig.*;
-
import static org.opends.messages.BackendMessages.*;
import static org.opends.messages.JebMessages.*;
import static org.opends.server.backends.jeb.ConfigurableEnvironment.*;
@@ -58,6 +57,7 @@
import org.opends.server.api.MonitorProvider;
import org.opends.server.backends.RebuildConfig;
import org.opends.server.backends.VerifyConfig;
+import org.opends.server.backends.pluggable.spi.StorageStatus;
import org.opends.server.core.*;
import org.opends.server.extensions.DiskSpaceMonitor;
import org.opends.server.types.*;
@@ -91,6 +91,7 @@
private MonitorProvider<?> rootContainerMonitor;
private DiskSpaceMonitor diskMonitor;
+ private StorageStatus storageStatus = StorageStatus.working();
/**
* The controls supported by this backend.
@@ -159,6 +160,7 @@
this.cfg = cfg;
baseDNs = this.cfg.getBaseDN().toArray(new DN[0]);
+ diskMonitor = serverContext.getDiskSpaceMonitor();
}
/** {@inheritDoc} */
@@ -206,11 +208,8 @@
DirectoryServer.registerMonitorProvider(rootContainerMonitor);
// Register as disk space monitor handler
- diskMonitor = newDiskMonitor(cfg);
- if (diskMonitor != null)
- {
- DirectoryServer.registerMonitorProvider(diskMonitor);
- }
+ diskMonitor.registerMonitoredDirectory(getBackendID(), getDirectory(), cfg.getDiskLowThreshold(),
+ cfg.getDiskFullThreshold(), this);
//Register as an AlertGenerator.
DirectoryServer.registerAlertGenerator(this);
@@ -218,16 +217,10 @@
cfg.addLocalDBChangeListener(this);
}
- private DiskSpaceMonitor newDiskMonitor(LocalDBBackendCfg cfg) throws ConfigException, InitializationException
+ private File getDirectory()
{
File parentDirectory = getFileForPath(cfg.getDBDirectory());
- File backendDirectory =
- new File(parentDirectory, cfg.getBackendId());
- DiskSpaceMonitor dm = new DiskSpaceMonitor(getBackendID() + " backend",
- backendDirectory, cfg.getDiskLowThreshold(), cfg.getDiskFullThreshold(),
- 5, TimeUnit.SECONDS, this);
- dm.initializeMonitorProvider(null);
- return dm;
+ return new File(parentDirectory, cfg.getBackendId());
}
/** {@inheritDoc} */
@@ -250,8 +243,7 @@
}
DirectoryServer.deregisterMonitorProvider(rootContainerMonitor);
- DirectoryServer.deregisterMonitorProvider(diskMonitor);
-
+ diskMonitor.deregisterMonitoredDirectory(getDirectory(), this);
// We presume the server will prevent more operations coming into this
// backend, but there may be existing operations already in the
// backend. We need to wait for them to finish.
@@ -717,7 +709,7 @@
}
final EnvironmentConfig envConfig = getEnvConfigForImport();
- final Importer importer = new Importer(importConfig, cfg, envConfig);
+ final Importer importer = new Importer(importConfig, cfg, envConfig, serverContext);
rootContainer = initializeRootContainer(envConfig);
return importer.processImport(rootContainer);
}
@@ -859,7 +851,7 @@
envConfig = parseConfigEntry(cfg);
}
- final Importer importer = new Importer(rebuildConfig, cfg, envConfig);
+ final Importer importer = new Importer(rebuildConfig, cfg, envConfig, serverContext);
importer.rebuildIndexes(rootContainer);
}
catch (ExecutionException execEx)
@@ -1002,10 +994,7 @@
baseDNs = newBaseDNsArray;
}
- if (diskMonitor != null)
- {
- updateDiskMonitor(diskMonitor, newCfg);
- }
+ updateDiskMonitor(diskMonitor, newCfg);
// Put the new configuration in place.
this.cfg = newCfg;
@@ -1020,8 +1009,8 @@
private void updateDiskMonitor(DiskSpaceMonitor dm, LocalDBBackendCfg newCfg)
{
- dm.setFullThreshold(newCfg.getDiskFullThreshold());
- dm.setLowThreshold(newCfg.getDiskLowThreshold());
+ diskMonitor.registerMonitoredDirectory(getBackendID(), getDirectory(), newCfg.getDiskLowThreshold(),
+ newCfg.getDiskFullThreshold(), this);
}
private void removeDeletedBaseDNs(SortedSet<DN> newBaseDNs) throws DirectoryException
@@ -1196,34 +1185,30 @@
/** {@inheritDoc} */
@Override
- public void diskLowThresholdReached(DiskSpaceMonitor monitor) {
- LocalizableMessage msg = ERR_JEB_DISK_LOW_THRESHOLD_REACHED.get(
- monitor.getDirectory().getPath(), cfg.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, getBackendID()));
}
/** {@inheritDoc} */
@Override
- public void diskFullThresholdReached(DiskSpaceMonitor monitor) {
- LocalizableMessage msg = ERR_JEB_DISK_FULL_THRESHOLD_REACHED.get(
- monitor.getDirectory().getPath(), cfg.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, getBackendID()));
}
/** {@inheritDoc} */
@Override
- public void diskSpaceRestored(DiskSpaceMonitor monitor) {
- logger.error(NOTE_JEB_DISK_SPACE_RESTORED, monitor.getFreeSpace(),
- monitor.getDirectory().getPath(), cfg.getBackendId(),
- Math.max(monitor.getLowThreshold(), monitor.getFullThreshold()));
+ public void diskSpaceRestored(File directory, long lowThresholdInBytes, long fullThresholdInBytes) {
+ storageStatus = StorageStatus.working();
}
private void checkDiskSpace(Operation operation) throws DirectoryException
{
- if(diskMonitor.isFullThresholdReached() ||
- (diskMonitor.isLowThresholdReached()
+ if(storageStatus.isUnusable() ||
+ (storageStatus.isLockedDown()
&& operation != null
&& !operation.getClientConnection().hasPrivilege(
Privilege.BYPASS_LOCKDOWN, operation)))
--
Gitblit v1.10.0