mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

dugan
12.37.2008 7294e5c0f8655e64353858e506c385efa8fc4e9e
Increase import DB cache default percentage from 40% to 45%. Also, detect when substring indexing is turned off and use a bigger DB cache in that condition.
2 files modified
36 ■■■■ changed files
opends/src/server/org/opends/server/backends/jeb/BackendImpl.java 14 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java 22 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -66,6 +66,7 @@
import org.opends.server.types.*;
import static org.opends.server.util.ServerConstants.*;
import org.opends.server.admin.std.server.LocalDBBackendCfg;
import org.opends.server.admin.std.server.LocalDBIndexCfg;
import org.opends.server.admin.Configuration;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.types.DN;
@@ -1192,7 +1193,18 @@
      envConfig.setTxnNoSync(false);
      envConfig.setConfigParam("je.env.isLocking", "false");
      envConfig.setConfigParam("je.env.runCheckpointer", "false");
      Importer importer = new Importer(importConfig);
      //Loop through local indexes and see if any are substring.
      boolean hasSubIndex = false;
      for (String idx : cfg.listLocalDBIndexes()) {
        LocalDBIndexCfg indexCfg = cfg.getLocalDBIndex(idx);
        Set<org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType>
                                            indexType = indexCfg.getIndexType();
        if(indexType.contains(org.opends.server.admin.std.
                meta.LocalDBIndexCfgDefn.IndexType.SUBSTRING)) {
          hasSubIndex = true;
        }
      }
      Importer importer = new Importer(importConfig, hasSubIndex);
      envConfig.setConfigParam("je.maxMemory", importer.getDBCacheSize());
      rootContainer = initializeRootContainer(envConfig);
      return importer.processImport(rootContainer);
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -138,15 +138,20 @@
  //A thread threw an Runtime exception stop the import.
  private boolean unCaughtExceptionThrown = false;
  //Set to true if substring indexes are defined.
  private boolean hasSubIndexes = false;
  /**
   * Create a new import job with the specified ldif import config.
   *
   * @param ldifImportConfig The LDIF import config.
   * @param hasSubIndexes <CODE>True</CODE> If substring indexes are defined.
   */
  public Importer(LDIFImportConfig ldifImportConfig)
  public Importer(LDIFImportConfig ldifImportConfig, boolean hasSubIndexes)
  {
    this.ldifImportConfig = ldifImportConfig;
    this.threads = new CopyOnWriteArrayList<WorkThread>();
    this.hasSubIndexes = hasSubIndexes;
    calcMemoryLimits();
  }
@@ -172,12 +177,12 @@
    }
    // Create one set of worker threads/buffer managers for each base DN.
    for (DNContext context : importMap.values()) {
      BufferManager bufferManager = new BufferManager(memoryPerContext,
                                                      importThreadCount);
      BufferManager bufferManager =
                        new BufferManager(memoryPerContext, importThreadCount);
      context.setBufferManager(bufferManager);
      for (int i = 0; i < importThreadCount; i++) {
        WorkThread t = new WorkThread(context.getWorkQueue(), i,
                                      bufferManager, rootContainer);
                bufferManager, rootContainer);
        t.setUncaughtExceptionHandler(this);
        threads.add(t);
        t.start();
@@ -771,7 +776,12 @@
    long maxMemory = runtime.maxMemory();
    long totMemory = runtime.totalMemory();
    long totFreeMemory = (freeMemory + (maxMemory - totMemory));
    long dbCacheLimit = (totFreeMemory * 40) / 100;
    long dbCacheLimit = (totFreeMemory * 45) / 100;
    //If there are now substring indexes defined, set the DB cache
    //size to 60% and take a minimal substring buffer.
    if(!hasSubIndexes) {
      dbCacheLimit = (totFreeMemory * 60) / 100;
    }
    dbCacheSizeStr = Long.toString(dbCacheLimit);
    totalAvailBufferMemory = (totFreeMemory * 10) / 100;
    if(totalAvailBufferMemory < (10 * minBuffer)) {
@@ -780,6 +790,8 @@
                                                      (10 * minBuffer));
      logError(msg);
      totalAvailBufferMemory = (10 * minBuffer);
    } else if(!hasSubIndexes) {
      totalAvailBufferMemory = (10 * minBuffer);
    }
    msg=NOTE_JEB_IMPORT_LDIF_MEMORY_INFO.get(dbCacheLimit,
                                             totalAvailBufferMemory);