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/Importer.java | 96 +++++++++++++++++++++---------------------------
1 files changed, 42 insertions(+), 54 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/Importer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/Importer.java
index 1053bed..90868d3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/Importer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/Importer.java
@@ -27,7 +27,6 @@
package org.opends.server.backends.jeb;
import static com.sleepycat.je.EnvironmentConfig.*;
-
import static org.opends.messages.JebMessages.*;
import static org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType.*;
import static org.opends.server.backends.jeb.IndexOutputBuffer.*;
@@ -84,7 +83,7 @@
import java.util.concurrent.atomic.AtomicLong;
import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.i18n.LocalizableMessageDescriptor.Arg3;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.ByteString;
@@ -98,6 +97,7 @@
import org.opends.server.backends.RebuildConfig;
import org.opends.server.backends.RebuildConfig.RebuildMode;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ServerContext;
import org.opends.server.extensions.DiskSpaceMonitor;
import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
@@ -162,6 +162,8 @@
private static final int MIN_READ_AHEAD_CACHE_SIZE = 2 * KB;
/** Small heap threshold used to give more memory to JVM to attempt OOM errors. */
private static final int SMALL_HEAP_SIZE = 256 * MB;
+ /** Minimum memory needed for import */
+ private static final int MINIMUM_AVAILABLE_MEMORY = 32 * MB;
/** The DN attribute type. */
private static final AttributeType dnType;
@@ -267,6 +269,8 @@
/** Number of phase one buffers. */
private int phaseOneBufferCount;
+ private final DiskSpaceMonitor diskSpaceMonitor;
+
static
{
AttributeType attrType = DirectoryServer.getAttributeType("dn");
@@ -286,6 +290,8 @@
* The local DB back-end configuration.
* @param envConfig
* The JEB environment config.
+ * @param serverContext
+ * The ServerContext for this Directory Server instance
* @throws InitializationException
* If a problem occurs during initialization.
* @throws JebException
@@ -293,14 +299,15 @@
* @throws ConfigException
* If a problem occurs during initialization.
*/
- public Importer(RebuildConfig rebuildConfig, LocalDBBackendCfg cfg,
- EnvironmentConfig envConfig) throws InitializationException,
+ public Importer(RebuildConfig rebuildConfig, LocalDBBackendCfg cfg, EnvironmentConfig envConfig,
+ ServerContext serverContext) throws InitializationException,
JebException, ConfigException
{
this.importConfiguration = null;
this.backendConfiguration = cfg;
this.tmpEnv = null;
this.threadCount = 1;
+ this.diskSpaceMonitor = serverContext.getDiskSpaceMonitor();
this.rebuildManager = new RebuildIndexManager(rebuildConfig, cfg);
this.indexCount = rebuildManager.getIndexCount();
this.clearedBackend = false;
@@ -327,6 +334,8 @@
* The local DB back-end configuration.
* @param envConfig
* The JEB environment config.
+ * @param serverContext
+ * The ServerContext for this Directory Server instance
* @throws InitializationException
* If a problem occurs during initialization.
* @throws ConfigException
@@ -334,13 +343,14 @@
* @throws DatabaseException
* If an error occurred when opening the DB.
*/
- public Importer(LDIFImportConfig importConfiguration,
- LocalDBBackendCfg localDBBackendCfg, EnvironmentConfig envConfig)
+ public Importer(LDIFImportConfig importConfiguration, LocalDBBackendCfg localDBBackendCfg,
+ EnvironmentConfig envConfig, ServerContext serverContext)
throws InitializationException, ConfigException, DatabaseException
{
this.rebuildManager = null;
this.importConfiguration = importConfiguration;
this.backendConfiguration = localDBBackendCfg;
+ this.diskSpaceMonitor = serverContext.getDiskSpaceMonitor();
if (importConfiguration.getThreadCount() == 0)
{
@@ -625,8 +635,8 @@
configuredMemory = backendConfiguration.getDBCachePercent() * Runtime.getRuntime().maxMemory() / 100;
}
- // Round up to minimum of 16MB (e.g. unit tests only use 2% cache).
- totalAvailableMemory = Math.max(Math.min(usableMemory, configuredMemory), 16 * MB);
+ // Round up to minimum of 32MB (e.g. unit tests only use a small cache).
+ totalAvailableMemory = Math.max(Math.min(usableMemory, configuredMemory), MINIMUM_AVAILABLE_MEMORY);
}
else
{
@@ -860,14 +870,10 @@
this.rootContainer = rootContainer;
long startTime = System.currentTimeMillis();
- DiskSpaceMonitor tmpMonitor = createDiskSpaceMonitor(tempDir, "backend index rebuild tmp directory");
- tmpMonitor.initializeMonitorProvider(null);
- DirectoryServer.registerMonitorProvider(tmpMonitor);
+ updateDiskMonitor(tempDir, "backend index rebuild tmp directory");
File parentDirectory = getFileForPath(backendConfiguration.getDBDirectory());
File backendDirectory = new File(parentDirectory, backendConfiguration.getBackendId());
- DiskSpaceMonitor dbMonitor = createDiskSpaceMonitor(backendDirectory, "backend index rebuild DB directory");
- dbMonitor.initializeMonitorProvider(null);
- DirectoryServer.registerMonitorProvider(dbMonitor);
+ updateDiskMonitor(backendDirectory, "backend index rebuild DB directory");
try
{
@@ -879,10 +885,8 @@
}
finally
{
- DirectoryServer.deregisterMonitorProvider(tmpMonitor);
- DirectoryServer.deregisterMonitorProvider(dbMonitor);
- tmpMonitor.finalizeMonitorProvider();
- dbMonitor.finalizeMonitorProvider();
+ diskSpaceMonitor.deregisterMonitoredDirectory(tempDir, this);
+ diskSpaceMonitor.deregisterMonitoredDirectory(backendDirectory, this);
}
}
@@ -908,8 +912,8 @@
InterruptedException, ExecutionException
{
this.rootContainer = rootContainer;
- DiskSpaceMonitor tmpMonitor = null;
- DiskSpaceMonitor dbMonitor = null;
+ File parentDirectory = getFileForPath(backendConfiguration.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, backendConfiguration.getBackendId());
try {
try
{
@@ -921,14 +925,8 @@
throw new InitializationException(message, ioe);
}
- tmpMonitor = createDiskSpaceMonitor(tempDir, "backend import tmp directory");
- tmpMonitor.initializeMonitorProvider(null);
- DirectoryServer.registerMonitorProvider(tmpMonitor);
- File parentDirectory = getFileForPath(backendConfiguration.getDBDirectory());
- File backendDirectory = new File(parentDirectory, backendConfiguration.getBackendId());
- dbMonitor = createDiskSpaceMonitor(backendDirectory, "backend import DB directory");
- dbMonitor.initializeMonitorProvider(null);
- DirectoryServer.registerMonitorProvider(dbMonitor);
+ updateDiskMonitor(tempDir, "backend import tmp directory");
+ updateDiskMonitor(backendDirectory, "backend import DB directory");
logger.info(NOTE_JEB_IMPORT_STARTING, DirectoryServer.getVersionString(),
BUILD_ID, REVISION_NUMBER);
@@ -991,24 +989,15 @@
// Do nothing.
}
}
- if (tmpMonitor != null)
- {
- DirectoryServer.deregisterMonitorProvider(tmpMonitor);
- tmpMonitor.finalizeMonitorProvider();
- }
- if (dbMonitor != null)
- {
- DirectoryServer.deregisterMonitorProvider(dbMonitor);
- dbMonitor.finalizeMonitorProvider();
- }
+ diskSpaceMonitor.deregisterMonitoredDirectory(tempDir, this);
+ diskSpaceMonitor.deregisterMonitoredDirectory(backendDirectory, this);
}
}
- private DiskSpaceMonitor createDiskSpaceMonitor(File dir, String backendSuffix)
+ private void updateDiskMonitor(File dir, String backendSuffix)
{
- final LocalDBBackendCfg cfg = backendConfiguration;
- return new DiskSpaceMonitor(cfg.getBackendId() + " " + backendSuffix, dir,
- cfg.getDiskLowThreshold(), cfg.getDiskFullThreshold(), 5, TimeUnit.SECONDS, this);
+ diskSpaceMonitor.registerMonitoredDirectory(backendConfiguration.getBackendId() + " " + backendSuffix, dir,
+ backendConfiguration.getDiskLowThreshold(), backendConfiguration.getDiskFullThreshold(), this);
}
private void recursiveDelete(File dir)
@@ -3643,21 +3632,20 @@
}
@Override
- public void diskLowThresholdReached(DiskSpaceMonitor monitor)
+ public void diskLowThresholdReached(File directory, long thresholdInBytes)
{
- diskFullThresholdReached(monitor);
+ diskFullThresholdReached(directory, thresholdInBytes);
}
@Override
- public void diskFullThresholdReached(DiskSpaceMonitor monitor)
+ public void diskFullThresholdReached(File directory, long thresholdInBytes)
{
isCanceled = true;
- logger.error(ERR_REBUILD_INDEX_LACK_DISK, monitor.getDirectory().getPath(),
- monitor.getFreeSpace(), monitor.getLowThreshold());
+ logger.error(ERR_REBUILD_INDEX_LACK_DISK, directory.getAbsolutePath(), thresholdInBytes);
}
@Override
- public void diskSpaceRestored(DiskSpaceMonitor monitor)
+ public void diskSpaceRestored(File directory, long lowThresholdInBytes, long fullThresholdInBytes)
{
// Do nothing
}
@@ -4406,25 +4394,25 @@
/** {@inheritDoc} */
@Override
- public void diskLowThresholdReached(DiskSpaceMonitor monitor)
+ public void diskLowThresholdReached(File directory, long thresholdInBytes)
{
- diskFullThresholdReached(monitor);
+ diskFullThresholdReached(directory, thresholdInBytes);
}
/** {@inheritDoc} */
@Override
- public void diskFullThresholdReached(DiskSpaceMonitor monitor)
+ public void diskFullThresholdReached(File directory, long thresholdInBytes)
{
isCanceled = true;
- Arg3<Object, Number, Number> argMsg = !isPhaseOneDone
+ Arg2<Object, Number> argMsg = !isPhaseOneDone
? ERR_IMPORT_LDIF_LACK_DISK_PHASE_ONE
: ERR_IMPORT_LDIF_LACK_DISK_PHASE_TWO;
- logger.error(argMsg.get(monitor.getDirectory().getPath(), monitor.getFreeSpace(), monitor.getLowThreshold()));
+ logger.error(argMsg.get(directory.getAbsolutePath(), thresholdInBytes));
}
/** {@inheritDoc} */
@Override
- public void diskSpaceRestored(DiskSpaceMonitor monitor)
+ public void diskSpaceRestored(File directory, long lowThresholdInBytes, long fullThresholdInBytes)
{
// Do nothing.
}
--
Gitblit v1.10.0