From 84a6349d4c1e49de04d6ba61e587130af3efbc00 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Mon, 09 Mar 2009 18:04:05 +0000
Subject: [PATCH] Fix issue 3832 - Provide ergonomics style settings for common server properties

---
 opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java b/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
index 7794840..9987ab2 100644
--- a/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
+++ b/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
 
@@ -35,6 +35,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.lang.reflect.Method;
+import java.math.BigInteger;
 import java.util.HashSet;
 import java.util.SortedSet;
 import java.util.StringTokenizer;
@@ -50,8 +51,10 @@
 import org.opends.server.admin.BooleanPropertyDefinition;
 import org.opends.server.admin.PropertyDefinition;
 
+import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.BackendMessages.*;
 
 /**
  * This class maps JE properties to configuration attributes.
@@ -306,6 +309,36 @@
       else
       {
         Object value = method.invoke(cfg);
+
+        if (attrName.equals(ATTR_NUM_CLEANER_THREADS) && value == null)
+        {
+          // Automatically choose based on the number of processors.
+          int cpus = Runtime.getRuntime().availableProcessors();
+          value = Integer.valueOf(Math.max(2, cpus / 2));
+
+          Message message =
+              INFO_ERGONOMIC_SIZING_OF_JE_CLEANER_THREADS.get(String
+                  .valueOf(cfg.dn()), (Number) value);
+          logError(message);
+        }
+        else if (attrName.equals(ATTR_NUM_LOCK_TABLES)
+            && value == null)
+        {
+          // Automatically choose based on the number of processors.
+          // We'll assume that the user has also allowed automatic
+          // configuration of cleaners and workers.
+          int cpus = Runtime.getRuntime().availableProcessors();
+          int cleaners = Math.max(2, cpus / 2);
+          int workers = Math.max(24, cpus * 2);
+          BigInteger tmp = BigInteger.valueOf((cleaners + workers) * 2);
+          value = tmp.nextProbablePrime();
+
+          Message message =
+              INFO_ERGONOMIC_SIZING_OF_JE_LOCK_TABLES.get(String
+                  .valueOf(cfg.dn()), (Number) value);
+          logError(message);
+        }
+
         return String.valueOf(value);
       }
     }

--
Gitblit v1.10.0