From 8b806159078ce1308b27e676c0e8a6340f05e6e0 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Mon, 02 Mar 2015 10:59:04 +0000
Subject: [PATCH] OPENDJ-1826 CR-6180 BackendImpl current DiskSpaceMonitoring should be done entirely at the Storage layer
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java | 30 +++++++++++++++++++++++++-----
1 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
index 7bee231..716ff46 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
@@ -53,6 +53,7 @@
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigChangeResult;
import org.forgerock.opendj.config.server.ConfigException;
+import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.PluggableBackendCfg;
import org.opends.server.api.CompressedSchema;
@@ -60,9 +61,11 @@
import org.opends.server.backends.pluggable.spi.ReadableStorage;
import org.opends.server.backends.pluggable.spi.Storage;
import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
+import org.opends.server.backends.pluggable.spi.StorageStatus;
import org.opends.server.backends.pluggable.spi.WriteOperation;
import org.opends.server.backends.pluggable.spi.WriteableStorage;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.SearchOperation;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
@@ -70,6 +73,8 @@
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.types.LDIFImportResult;
import org.opends.server.types.OpenDsException;
+import org.opends.server.types.Operation;
+import org.opends.server.types.Privilege;
import org.opends.server.util.LDIFException;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.RuntimeInformation;
@@ -690,12 +695,27 @@
}
/**
- * Returns whether this container JE database environment is open, valid and
- * can be used.
+ * Checks the storage has enough resources for an operation.
*
- * @return {@code true} if valid, or {@code false} otherwise.
+ * @param operation the current operation
+ * @throws DirectoryException if resources are in short supply
*/
- public boolean isValid() {
- return storage.isValid();
+ public void checkForEnoughResources(Operation operation) throws DirectoryException
+ {
+ StorageStatus status = storage.getStorageStatus();
+ if (status.isUnusable()
+ || (status.isLockedDown() && hasBypassLockdownPrivileges(operation)))
+ {
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, status.getReason());
+ }
+ }
+
+ private boolean hasBypassLockdownPrivileges(Operation operation)
+ {
+ return operation != null
+ // Read operations are always allowed in lock down mode
+ && !(operation instanceof SearchOperation)
+ && !operation.getClientConnection().hasPrivilege(
+ Privilege.BYPASS_LOCKDOWN, operation);
}
}
--
Gitblit v1.10.0