From 875fa183c58411ff51a5cb208d5043df139fd033 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Fri, 30 Jul 2010 12:44:12 +0000
Subject: [PATCH] Implements a disk space thresholds feature, preventing the server from crashing or exiting of disks full.

---
 opendj-sdk/opends/src/messages/messages/core.properties                                                     |    2 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java                           |   39 -
 opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java                  |   33 -
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java              |   39 
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java                    |   24 
 opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java                             |   10 
 opendj-sdk/opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java                     |   36 -
 opendj-sdk/opends/resource/config/config.ldif                                                               |    4 
 opendj-sdk/opends/src/messages/messages/jeb.properties                                                      |   17 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java                              |    6 
 opendj-sdk/opends/src/server/org/opends/server/util/ServerConstants.java                                    |   42 +
 opendj-sdk/opends/src/server/org/opends/server/monitors/BackendMonitor.java                                 |   25 
 opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java                                     |  170 +----
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java    |   17 
 opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java                        |    8 
 opendj-sdk/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java                         |   47 -
 opendj-sdk/opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java                       |   34 
 opendj-sdk/opends/src/admin/messages/RootDNCfgDefn.properties                                               |    2 
 opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java                               |   14 
 opendj-sdk/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java               |   20 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java                             |  308 ++++++++++
 opendj-sdk/opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java                      |   22 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java                     |   24 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                     |    6 
 opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml                |   49 +
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java |   30 -
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java                        |   29 -
 opendj-sdk/opends/src/admin/messages/GlobalCfgDefn.properties                                               |    2 
 opendj-sdk/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java                       |   25 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java             |   31 -
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java                            |   24 
 opendj-sdk/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java                      |   46 -
 opendj-sdk/opends/src/messages/messages/tools.properties                                                    |    1 
 opendj-sdk/opends/src/admin/messages/LocalDBBackendCfgDefn.properties                                       |    4 
 opendj-sdk/opends/src/server/org/opends/server/types/Privilege.java                                         |   23 
 opendj-sdk/opends/src/messages/messages/task.properties                                                     |   16 
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java               |   20 
 opendj-sdk/opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java                             |   61 ++
 opendj-sdk/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java                      |   46 -
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java  |   31 
 opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java                         |    1 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java                                |  110 +++
 opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java                     |   30 -
 opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml                        |   12 
 opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java                |   42 -
 opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java                       |   32 -
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java          |   23 
 opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java                             |   10 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java                            |    3 
 opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml                        |   14 
 opendj-sdk/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java                    |   34 
 opendj-sdk/opends/resource/schema/02-config.ldif                                                            |   14 
 52 files changed, 775 insertions(+), 937 deletions(-)

diff --git a/opendj-sdk/opends/resource/config/config.ldif b/opendj-sdk/opends/resource/config/config.ldif
index f66374b..e372035 100644
--- a/opendj-sdk/opends/resource/config/config.ldif
+++ b/opendj-sdk/opends/resource/config/config.ldif
@@ -198,6 +198,8 @@
 ds-cfg-db-logging-level: CONFIG
 ds-cfg-db-checkpointer-bytes-interval: 20 megabytes
 ds-cfg-db-checkpointer-wakeup-interval: 30 seconds
+ds-cfg-disk-full-threshold: 20 megabytes
+ds-cfg-disk-low-threshold: 100 megabytes
 
 dn: cn=Index,ds-cfg-backend-id=userRoot,cn=Backends,cn=config
 objectClass: top
@@ -1858,6 +1860,7 @@
 objectClass: top
 objectClass: ds-cfg-root-dn
 cn: Root DNs
+ds-cfg-default-root-privilege-name: bypass-lockdown
 ds-cfg-default-root-privilege-name: bypass-acl
 ds-cfg-default-root-privilege-name: modify-acl
 ds-cfg-default-root-privilege-name: config-read
@@ -1866,6 +1869,7 @@
 ds-cfg-default-root-privilege-name: ldif-export
 ds-cfg-default-root-privilege-name: backend-backup
 ds-cfg-default-root-privilege-name: backend-restore
+ds-cfg-default-root-privilege-name: server-lockdown
 ds-cfg-default-root-privilege-name: server-shutdown
 ds-cfg-default-root-privilege-name: server-restart
 ds-cfg-default-root-privilege-name: disconnect-client
diff --git a/opendj-sdk/opends/resource/schema/02-config.ldif b/opendj-sdk/opends/resource/schema/02-config.ldif
index e95dd17..c98a321 100644
--- a/opendj-sdk/opends/resource/schema/02-config.ldif
+++ b/opendj-sdk/opends/resource/schema/02-config.ldif
@@ -2470,6 +2470,16 @@
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   SINGLE-VALUE
   X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.610
+  NAME 'ds-cfg-disk-full-threshold'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE
+  X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.611
+  NAME 'ds-cfg-disk-low-threshold'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE
+  X-ORIGIN 'OpenDS Directory Server' )
 objectClasses: ( 1.3.6.1.4.1.26027.1.2.1
   NAME 'ds-cfg-access-control-handler'
   SUP top
@@ -2539,7 +2549,9 @@
         ds-cfg-db-num-lock-tables $
         ds-cfg-db-num-cleaner-threads $
         ds-cfg-compact-encoding $
-        ds-cfg-je-property )
+        ds-cfg-je-property $
+        ds-cfg-disk-full-threshold $
+        ds-cfg-disk-low-threshold )
   X-ORIGIN 'OpenDS Directory Server' )
 objectClasses: ( 1.3.6.1.4.1.26027.1.2.7
   NAME 'ds-cfg-local-db-index'
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
index cbfd739..20d24d7 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
@@ -23,7 +23,7 @@
   ! CDDL HEADER END
   !
   !
-  !      Copyright 2007-2009 Sun Microsystems, Inc.
+  !      Copyright 2007-2010 Sun Microsystems, Inc.
   ! -->
 <adm:managed-object name="global" plural-name="globals"
   package="org.opends.server.admin.std"
@@ -540,6 +540,11 @@
     </adm:default-behavior>
     <adm:syntax>
       <adm:enumeration>
+        <adm:value name="bypass-lockdown">
+          <adm:synopsis>
+            Allows the associated user to bypass server lockdown mode.
+          </adm:synopsis>
+        </adm:value>
         <adm:value name="bypass-acl">
           <adm:synopsis>
             Allows the associated user to bypass access control checks
@@ -603,6 +608,11 @@
             tasks.
           </adm:synopsis>
         </adm:value>
+        <adm:value name="server-lockdown">
+          <adm:synopsis>
+            Allows the user to place and bring the server of lockdown mode.
+          </adm:synopsis>
+        </adm:value>
         <adm:value name="server-shutdown">
           <adm:synopsis>
             Allows the user to request that the server shut down.
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
index c861b55..2214a4d 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
@@ -804,6 +804,55 @@
       </ldap:attribute>
     </adm:profile>
   </adm:property>
+  <adm:property name="disk-low-threshold" advanced="true">
+      <adm:synopsis>
+        Low disk threshold to limit database updates
+      </adm:synopsis>
+      <adm:description>
+        Specifies the "low" free space on the disk. When the available
+        free space on the disk used by this database instance falls below the
+        value specified, protocol updates on this database are permitted only
+        by a user with the BYPASS_LOCKDOWN privilege.
+      </adm:description>
+      <adm:default-behavior>
+          <adm:defined>
+              <adm:value>100 megabytes</adm:value>
+          </adm:defined>
+      </adm:default-behavior>
+      <adm:syntax>
+          <adm:size lower-limit="0" />
+      </adm:syntax>
+      <adm:profile name="ldap">
+          <ldap:attribute>
+              <ldap:name>ds-cfg-disk-low-threshold</ldap:name>
+          </ldap:attribute>
+      </adm:profile>
+  </adm:property>
+  <adm:property name="disk-full-threshold" advanced="true">
+      <adm:synopsis>
+        Full disk threshold to limit database updates
+      </adm:synopsis>
+      <adm:description>
+        When the available free space on the disk used by this database
+        instance falls below the value specified, no updates
+        are permitted and the server returns an UNWILLING_TO_PERFORM error.
+        Updates are allowed again as soon as free space rises above the
+        threshold.
+      </adm:description>
+      <adm:default-behavior>
+          <adm:defined>
+              <adm:value>20 megabytes</adm:value>
+          </adm:defined>
+      </adm:default-behavior>
+      <adm:syntax>
+          <adm:size lower-limit="0" />
+      </adm:syntax>
+      <adm:profile name="ldap">
+          <ldap:attribute>
+              <ldap:name>ds-cfg-disk-full-threshold</ldap:name>
+          </ldap:attribute>
+      </adm:profile>
+  </adm:property>
   <adm:property name="je-property" advanced="true"
     multi-valued="true">
     <adm:synopsis>
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml
index 72a03c4..e493841 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml
@@ -23,7 +23,7 @@
   ! CDDL HEADER END
   !
   !
-  !      Copyright 2007-2008 Sun Microsystems, Inc.
+  !      Copyright 2007-2010 Sun Microsystems, Inc.
   ! -->
 <adm:managed-object name="root-dn" plural-name="root-dns"
   package="org.opends.server.admin.std"
@@ -58,6 +58,7 @@
     </adm:synopsis>
     <adm:default-behavior>
       <adm:defined>
+        <adm:value>bypass-lockdown</adm:value>
         <adm:value>bypass-acl</adm:value>
         <adm:value>modify-acl</adm:value>
         <adm:value>config-read</adm:value>
@@ -66,6 +67,7 @@
         <adm:value>ldif-export</adm:value>
         <adm:value>backend-backup</adm:value>
         <adm:value>backend-restore</adm:value>
+        <adm:value>server-lockdown</adm:value>
         <adm:value>server-shutdown</adm:value>
         <adm:value>server-restart</adm:value>
         <adm:value>disconnect-client</adm:value>
@@ -78,6 +80,11 @@
     </adm:default-behavior>
     <adm:syntax>
       <adm:enumeration>
+        <adm:value name="bypass-lockdown">
+          <adm:synopsis>
+            Allows the associated user to bypass server lockdown mode.
+          </adm:synopsis>
+        </adm:value>
         <adm:value name="bypass-acl">
           <adm:synopsis>
             Allows the associated user to bypass access control checks
@@ -141,6 +148,11 @@
             tasks.
           </adm:synopsis>
         </adm:value>
+        <adm:value name="server-lockdown">
+          <adm:synopsis>
+            Allows the user to place and bring the server of lockdown mode.
+          </adm:synopsis>
+        </adm:value>
         <adm:value name="server-shutdown">
           <adm:synopsis>
             Allows the user to request that the server shut down.
diff --git a/opendj-sdk/opends/src/admin/messages/GlobalCfgDefn.properties b/opendj-sdk/opends/src/admin/messages/GlobalCfgDefn.properties
index e2aa7f4..6e81ff5 100644
--- a/opendj-sdk/opends/src/admin/messages/GlobalCfgDefn.properties
+++ b/opendj-sdk/opends/src/admin/messages/GlobalCfgDefn.properties
@@ -17,6 +17,7 @@
 property.disabled-privilege.syntax.enumeration.value.backend-backup.synopsis=Allows the user to request that the server process backup tasks.
 property.disabled-privilege.syntax.enumeration.value.backend-restore.synopsis=Allows the user to request that the server process restore tasks.
 property.disabled-privilege.syntax.enumeration.value.bypass-acl.synopsis=Allows the associated user to bypass access control checks performed by the server.
+property.disabled-privilege.syntax.enumeration.value.bypass-lockdown.synopsis=Allows the associated user to bypass server lockdown mode.
 property.disabled-privilege.syntax.enumeration.value.cancel-request.synopsis=Allows the user to cancel operations in progress on other client connections.
 property.disabled-privilege.syntax.enumeration.value.config-read.synopsis=Allows the associated user to read the server configuration.
 property.disabled-privilege.syntax.enumeration.value.config-write.synopsis=Allows the associated user to update the server configuration. The config-read privilege is also required.
@@ -31,6 +32,7 @@
 property.disabled-privilege.syntax.enumeration.value.password-reset.synopsis=Allows the user to reset user passwords.
 property.disabled-privilege.syntax.enumeration.value.privilege-change.synopsis=Allows the user to make changes to the set of defined root privileges, as well as to grant and revoke privileges for users.
 property.disabled-privilege.syntax.enumeration.value.proxied-auth.synopsis=Allows the user to use the proxied authorization control, or to perform a bind that specifies an alternate authorization identity.
+property.disabled-privilege.syntax.enumeration.value.server-lockdown.synopsis=Allows the user to place and bring the server of lockdown mode.
 property.disabled-privilege.syntax.enumeration.value.server-restart.synopsis=Allows the user to request that the server perform an in-core restart.
 property.disabled-privilege.syntax.enumeration.value.server-shutdown.synopsis=Allows the user to request that the server shut down.
 property.disabled-privilege.syntax.enumeration.value.unindexed-search.synopsis=Allows the user to request that the server process a search that cannot be optimized using server indexes.
diff --git a/opendj-sdk/opends/src/admin/messages/LocalDBBackendCfgDefn.properties b/opendj-sdk/opends/src/admin/messages/LocalDBBackendCfgDefn.properties
index 026a78b..c890c3b 100644
--- a/opendj-sdk/opends/src/admin/messages/LocalDBBackendCfgDefn.properties
+++ b/opendj-sdk/opends/src/admin/messages/LocalDBBackendCfgDefn.properties
@@ -46,6 +46,10 @@
 property.db-txn-no-sync.description=Setting the value of this configuration attribute to "true" may improve write performance but could cause the most recent changes to be lost if the OpenDS Directory Server or the underlying JVM exits abnormally, or if an OS or hardware failure occurs (a behavior similar to running with transaction durability disabled in the Sun Java System Directory Server).
 property.db-txn-write-no-sync.synopsis=Indicates whether the database should synchronously flush data as it is written to disk.
 property.db-txn-write-no-sync.description=If this value is set to "false", then all data written to disk is synchronously flushed to persistent storage and thereby providing full durability. If it is set to "true", then data may be cached for a period of time by the underlying operating system before actually being written to disk. This may improve performance, but could cause the most recent changes to be lost in the event of an underlying OS or hardware failure (but not in the case that the OpenDS Directory Server or the JVM exits abnormally).
+property.disk-full-threshold.synopsis=Full disk threshold to limit database updates
+property.disk-full-threshold.description=When the available free space on the disk used by this database instance falls below the value specified, no updates are permitted and the server returns an UNWILLING_TO_PERFORM error. Updates are allowed again as soon as free space rises above the threshold.
+property.disk-low-threshold.synopsis=Low disk threshold to limit database updates
+property.disk-low-threshold.description=Specifies the "low" free space on the disk. When the available free space on the disk used by this database instance falls below the value specified, protocol updates on this database are permitted only by a user with the BYPASS_LOCKDOWN privilege.
 property.enabled.synopsis=Indicates whether the backend is enabled in the server.
 property.enabled.description=If a backend is not enabled, then its contents are not accessible when processing operations.
 property.entries-compressed.synopsis=Indicates whether the backend should attempt to compress entries before storing them in the database.
diff --git a/opendj-sdk/opends/src/admin/messages/RootDNCfgDefn.properties b/opendj-sdk/opends/src/admin/messages/RootDNCfgDefn.properties
index aa1bb8e..ad0cb6f 100644
--- a/opendj-sdk/opends/src/admin/messages/RootDNCfgDefn.properties
+++ b/opendj-sdk/opends/src/admin/messages/RootDNCfgDefn.properties
@@ -5,6 +5,7 @@
 property.default-root-privilege-name.syntax.enumeration.value.backend-backup.synopsis=Allows the user to request that the server process backup tasks.
 property.default-root-privilege-name.syntax.enumeration.value.backend-restore.synopsis=Allows the user to request that the server process restore tasks.
 property.default-root-privilege-name.syntax.enumeration.value.bypass-acl.synopsis=Allows the associated user to bypass access control checks performed by the server.
+property.default-root-privilege-name.syntax.enumeration.value.bypass-lockdown.synopsis=Allows the associated user to bypass server lockdown mode.
 property.default-root-privilege-name.syntax.enumeration.value.cancel-request.synopsis=Allows the user to cancel operations in progress on other client connections.
 property.default-root-privilege-name.syntax.enumeration.value.config-read.synopsis=Allows the associated user to read the server configuration.
 property.default-root-privilege-name.syntax.enumeration.value.config-write.synopsis=Allows the associated user to update the server configuration. The config-read privilege is also required.
@@ -19,6 +20,7 @@
 property.default-root-privilege-name.syntax.enumeration.value.password-reset.synopsis=Allows the user to reset user passwords.
 property.default-root-privilege-name.syntax.enumeration.value.privilege-change.synopsis=Allows the user to make changes to the set of defined root privileges, as well as to grant and revoke privileges for users.
 property.default-root-privilege-name.syntax.enumeration.value.proxied-auth.synopsis=Allows the user to use the proxied authorization control, or to perform a bind that specifies an alternate authorization identity.
+property.default-root-privilege-name.syntax.enumeration.value.server-lockdown.synopsis=Allows the user to place and bring the server of lockdown mode.
 property.default-root-privilege-name.syntax.enumeration.value.server-restart.synopsis=Allows the user to request that the server perform an in-core restart.
 property.default-root-privilege-name.syntax.enumeration.value.server-shutdown.synopsis=Allows the user to request that the server shut down.
 property.default-root-privilege-name.syntax.enumeration.value.unindexed-search.synopsis=Allows the user to request that the server process a search that cannot be optimized using server indexes.
diff --git a/opendj-sdk/opends/src/messages/messages/core.properties b/opendj-sdk/opends/src/messages/messages/core.properties
index eb43ec8..37c59f9 100644
--- a/opendj-sdk/opends/src/messages/messages/core.properties
+++ b/opendj-sdk/opends/src/messages/messages/core.properties
@@ -1837,3 +1837,5 @@
 MILD_ERR_CRYPTOMGR_INVALID_SYMMETRIC_KEY_LENGTH_728=CryptoManager failed to \
  initialize because the specified cipher key length "%d" is beyond the \
  allowed cryptography strength "%d" in jurisdiction policy files
+MILD_ERR_DISK_SPACE_MONITOR_UPDATE_FAILED_729=Failed to update free disk space \
+ for directory %s: %s
diff --git a/opendj-sdk/opends/src/messages/messages/jeb.properties b/opendj-sdk/opends/src/messages/messages/jeb.properties
index 8badbd1..5115d1b 100644
--- a/opendj-sdk/opends/src/messages/messages/jeb.properties
+++ b/opendj-sdk/opends/src/messages/messages/jeb.properties
@@ -410,6 +410,21 @@
   the LDIF stream
 SEVERE_ERR_JEB_IMPORT_BUFFER_IO_ERROR_216=I/O error occurred while reading \
   the index scratch file %s in the temporary directory
-MILD_WARN_IMPORT_LDIF_LACK_MEM_PHASE_TWO_217=Insufficient free memory (%d bytes) to \
+SEVERE_ERR_JEB_DISK_LOW_THRESHOLD_REACHED_217=The disk containing directory %s \
+  used by the database backend %s is low on free space (%d bytes free). \
+  Write operations to the backend are only permitted by a user with the \
+  BYPASS_LOCKDOWN privilege until the free space rises above the threshold \
+  (%d bytes)
+SEVERE_ERR_JEB_DISK_FULL_THRESHOLD_REACHED_218=The disk containing directory \
+  %s used by the database backend %s is full (%d bytes free). Write operations \
+  to the backend will fail until the free space rises above the threshold \
+  (%d bytes)
+NOTICE_JEB_DISK_SPACE_RESTORED_219=The free space (%d bytes) on the disk \
+  containing directory %s used by the database backend %s is now above the \
+  threshold (%d bytes)
+SEVERE_WARN_JEB_OUT_OF_DISK_SPACE_220=There is not enough space on the disk \
+  for the database to perform the write operation
+MILD_WARN_IMPORT_LDIF_LACK_MEM_PHASE_TWO_221=Insufficient free memory (%d bytes) to \
  perform import phase 2 in a single batch. Some indexes will be imported using \
  several batches which may result in reduced performance
+
diff --git a/opendj-sdk/opends/src/messages/messages/task.properties b/opendj-sdk/opends/src/messages/messages/task.properties
index 8ffc997..d0567fe 100644
--- a/opendj-sdk/opends/src/messages/messages/task.properties
+++ b/opendj-sdk/opends/src/messages/messages/task.properties
@@ -93,14 +93,16 @@
  Initialize Target task
 SEVERE_ERR_TASK_INITIALIZE_INVALID_DN_20=Invalid DN provided with the \
  Initialize task
-SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_ROOT_21=Only root users may place the \
- server in lockdown mode
-SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK_22=Only root users connected from \
- a loopback address may place the server in lockdown mode
-SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_ROOT_23=Only root users may cause the \
+SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_ROOT_21=Only users with the SERVER_LOCKDOWN \
+ privilege may place the server in lockdown mode
+SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK_22=Only users with the \
+ SERVER_LOCKDOWN privilege connected from a loopback address may place the \
+  server in lockdown mode
+SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_ROOT_23=Only users with the SERVER_LOCKDOWN \
+ privilege may cause the server to leave lockdown mode
+SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK_24=Only users with the \
+ SERVER_LOCKDOWN privilege connected from a loopback address may cause the \
  server to leave lockdown mode
-SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK_24=Only root users connected from \
- a loopback address may cause the server to leave lockdown mode
 SEVERE_ERR_TASK_DISCONNECT_NO_PRIVILEGE_25=You do not have sufficient \
  privileges to terminate client connections
 SEVERE_ERR_TASK_DISCONNECT_INVALID_CONN_ID_26=Unable to decode value %s as an \
diff --git a/opendj-sdk/opends/src/messages/messages/tools.properties b/opendj-sdk/opends/src/messages/messages/tools.properties
index fa245b2..6bb3a24 100644
--- a/opendj-sdk/opends/src/messages/messages/tools.properties
+++ b/opendj-sdk/opends/src/messages/messages/tools.properties
@@ -2567,4 +2567,5 @@
 MILD_ERR_MAKELDIF_CANNOT_WRITE_ENTRY_WITHOUT_DN_1713=An error occurred while \
 attempting to write entry to LDIF:  Could not calculate the DN for the \
 entry (no value found for the RDN attribute %s)
+INFO_LABEL_DBTEST_INDEX_UNDEFINED_RECORD_COUNT_1714=Undefined
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java
new file mode 100644
index 0000000..1b185ae
--- /dev/null
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java
@@ -0,0 +1,61 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2010 Sun Microsystems, Inc.
+ */
+
+package org.opends.server.api;
+
+/**
+ * This interface defines the set of methods that must be implemented
+ * for a DiskSpaceMonitorHandler.  Disk space monitor handlers are
+ * used to receive notifications from the DiskSpaceMonitor service
+ * when the registered thresholds have been reached.
+ */
+public interface DiskSpaceMonitorHandler {
+
+  /**
+   * Notifies that the registered "low" threshold have been reached.
+   *
+   * @param bytesFree The number of bytes free when threshold
+   *                                 was reached.
+   */
+  public void diskLowThresholdReached(long bytesFree);
+
+  /**
+   * Notifies that the registered "full" threshold have been reached.
+   *
+   * @param bytesFree The number of bytes free when threshold
+   *                                 was reached.
+   */
+  public void diskFullThresholdReached(long bytesFree);
+
+  /**
+   * Notifies that the free disk space is now above both "low" and
+   * "full" thresholds.
+   *
+   * @param bytesFree The number of bytes free.
+   */
+  public void diskSpaceRestored(long bytesFree);
+}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
index 2c4a9df..c11277f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
 import org.opends.messages.Message;
@@ -30,17 +30,15 @@
 
 
 import java.util.List;
+import java.util.concurrent.*;
 
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.Attribute;
-import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryConfig;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ObjectClass;
 
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -60,39 +58,33 @@
      mayExtend=true,
      mayInvoke=false)
 public abstract class MonitorProvider<T extends MonitorProviderCfg>
-       extends DirectoryThread
 {
-  /**
-   * The tracer object for the debug logger.
-   */
-  private static final DebugTracer TRACER = getTracer();
-
-  // Indicates whether a request has been received to stop running.
-  private boolean stopRequested;
-
-  // The thread used to run this monitor provider.
-  private Thread monitorThread;
-
-
+  // The scheduler.
+  private static final ScheduledExecutorService SCHEDULER =
+      Executors.newSingleThreadScheduledExecutor(
+          new MonitorThreadFactory());
 
   /**
-   * Initializes this monitor provider.  Note that no initialization
-   * should be done here, since it should be performed in the
-   * {@code initializeMonitorProvider} class.
-   *
-   * @param  threadName  The name to use for this thread for debugging
-   *                     purposes.
+   * Thread factory used by the scheduled execution service.
    */
-  protected MonitorProvider(String threadName)
+  private static final class MonitorThreadFactory implements
+      ThreadFactory
   {
-    super(threadName);
 
+    /**
+     * {@inheritDoc}
+     */
+    public Thread newThread(Runnable r)
+    {
+      Thread t =
+          new DirectoryThread(r, "Monitor Provider State Updater");
+      t.setDaemon(true);
+      return t;
+    }
 
-    stopRequested = false;
-    monitorThread = null;
   }
 
-
+  private ScheduledFuture<?> scheduledFuture;
 
   /**
    * Initializes this monitor provider based on the information in the
@@ -157,22 +149,9 @@
    */
   public void finalizeMonitorProvider()
   {
-    // Signal the monitor thread that it should stop.
-    stopRequested = true;
-
-    try
+    if(scheduledFuture != null)
     {
-      if (monitorThread != null)
-      {
-        monitorThread.interrupt();
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
+      scheduledFuture.cancel(true);
     }
   }
 
@@ -207,29 +186,32 @@
   }
 
 
-
   /**
-   * Retrieves the length of time in milliseconds that should elapse
-   * between calls to the {@code updateMonitorData} method.  A
-   * negative or zero return value indicates that the
-   * {@code updateMonitorData} method should not be periodically
-   * invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse
-   *          between calls to the {@code updateMonitorData()} method.
-   */
-  public abstract long getUpdateInterval();
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired
+   * Schedules any periodic processing that may be desired
    * to update the information associated with this monitor.  Note
    * that best-effort attempts will be made to ensure that calls to
    * this method come {@code getUpdateInterval} milliseconds apart,
    * but no guarantees will be made.
+   *
+   * @param updater The updater to execute.
+   * @param initialDelay The time to delay first execution.
+   * @param period The period between successive executions.
+   * @param unit The time unit of the initialDelay and period
+   *             parameters.
    */
-  public abstract void updateMonitorData();
+  protected final void scheduleUpdate(Runnable updater,
+                                      long initialDelay,
+                                      long period, TimeUnit unit)
+  {
+    if(scheduledFuture != null)
+    {
+      scheduledFuture.cancel(true);
+    }
+
+    scheduledFuture =
+        SCHEDULER.scheduleAtFixedRate(updater, initialDelay,
+            period, unit);
+  }
 
 
 
@@ -243,73 +225,5 @@
    *          entry is requested.
    */
   public abstract List<Attribute> getMonitorData();
-
-
-
-  /**
-   * Enters a loop, periodically invoking the
-   * {@code getUpdateInterval} method to updates the data associated
-   * with this monitor.
-   */
-  public final void run()
-  {
-    monitorThread = Thread.currentThread();
-
-
-    // If this monitor should not perform any checks to periodically
-    // update its information, then there is no need to run this
-    // method.
-    if (getUpdateInterval() <= 0)
-    {
-      return;
-    }
-
-
-    // Set the name of this thread for debugging purposes.
-    setName(getMonitorInstanceName() + " Monitor Provider");
-
-
-    // Operate in a loop until it is detected that the server is
-    // shutting down.
-    while (! stopRequested)
-    {
-      long stopSleepTime =
-           System.currentTimeMillis() + getUpdateInterval();
-      try
-      {
-        updateMonitorData();
-      }
-      catch (Exception e)
-      {
-        if (debugEnabled())
-        {
-          TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        }
-      }
-
-      long remainingSleepTime =
-           stopSleepTime - System.currentTimeMillis();
-      while ((! stopRequested) && (remainingSleepTime > 0))
-      {
-        if (remainingSleepTime > 1000)
-        {
-          try
-          {
-            Thread.sleep(1000);
-          } catch (Exception e) {}
-        }
-        else
-        {
-          try
-          {
-            Thread.sleep(remainingSleepTime);
-          } catch (Exception e) {}
-        }
-
-        remainingSleepTime =
-             stopSleepTime - System.currentTimeMillis();
-      }
-    }
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 3ccd2e0..3ba2210 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -45,9 +45,10 @@
 import com.sleepycat.je.EnvironmentFailureException;
 
 import java.util.logging.Level;
+
+import org.opends.server.api.DiskSpaceMonitorHandler;
 import org.opends.server.backends.jeb.importLDIF.*;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn;
-import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.api.AlertGenerator;
@@ -58,6 +59,7 @@
 import org.opends.server.core.ModifyOperation;
 import org.opends.server.core.ModifyDNOperation;
 import org.opends.server.core.SearchOperation;
+import org.opends.server.extensions.DiskSpaceMonitor;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.RuntimeInformation;
 import org.opends.server.util.Validator;
@@ -82,7 +84,8 @@
  */
 public class BackendImpl
     extends Backend
-    implements ConfigurationChangeListener<LocalDBBackendCfg>, AlertGenerator
+    implements ConfigurationChangeListener<LocalDBBackendCfg>, AlertGenerator,
+    DiskSpaceMonitorHandler
 {
   /**
    * The tracer object for the debug logger.
@@ -118,16 +121,13 @@
   private final AtomicInteger threadWriteCount = new AtomicInteger(0);
 
   /**
-   * A list of monitor providers created for this backend instance.
-   */
-  private ArrayList<MonitorProvider<?>> monitorProviders =
-      new ArrayList<MonitorProvider<?>>();
-
-  /**
    * The base DNs defined for this backend instance.
    */
   private DN[] baseDNs;
 
+  private MonitorProvider<?> rootContainerMonitor;
+  private DiskSpaceMonitor diskMonitor;
+
   /**
    * The controls supported by this backend.
    */
@@ -360,10 +360,18 @@
     }
 
     // Register a monitor provider for the environment.
-    MonitorProvider<? extends MonitorProviderCfg> monitorProvider =
-        rootContainer.getMonitorProvider();
-    monitorProviders.add(monitorProvider);
-    DirectoryServer.registerMonitorProvider(monitorProvider);
+    rootContainerMonitor = rootContainer.getMonitorProvider();
+    DirectoryServer.registerMonitorProvider(rootContainerMonitor);
+
+    // Register as disk space monitor handler
+    File parentDirectory = getFileForPath(cfg.getDBDirectory());
+    File backendDirectory =
+        new File(parentDirectory, cfg.getBackendId());
+    diskMonitor = new DiskSpaceMonitor(getBackendID() + " backend",
+        backendDirectory, cfg.getDiskLowThreshold(), cfg.getDiskFullThreshold(),
+        5, TimeUnit.SECONDS, this);
+    diskMonitor.initializeMonitorProvider(null);
+    DirectoryServer.registerMonitorProvider(diskMonitor);
 
     //Register as an AlertGenerator.
     DirectoryServer.registerAlertGenerator(this);
@@ -398,13 +406,11 @@
       }
     }
 
-    // Deregister our monitor providers.
-    for (MonitorProvider<?> monitor : monitorProviders)
-    {
-      DirectoryServer.deregisterMonitorProvider(
-           monitor.getMonitorInstanceName().toLowerCase());
-    }
-    monitorProviders = new ArrayList<MonitorProvider<?>>();
+    DirectoryServer.deregisterMonitorProvider(
+        rootContainerMonitor.getMonitorInstanceName());
+
+    DirectoryServer.deregisterMonitorProvider(
+        diskMonitor.getMonitorInstanceName());
 
     // We presume the server will prevent more operations coming into this
     // backend, but there may be existing operations already in the
@@ -755,6 +761,7 @@
   public void addEntry(Entry entry, AddOperation addOperation)
       throws DirectoryException, CanceledOperationException
   {
+    checkDiskSpace(addOperation);
     writerBegin();
     DN entryDN = entry.getDN();
 
@@ -799,6 +806,7 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
       throws DirectoryException, CanceledOperationException
   {
+    checkDiskSpace(deleteOperation);
     writerBegin();
 
     EntryContainer ec;
@@ -843,6 +851,7 @@
       ModifyOperation modifyOperation) throws DirectoryException,
       CanceledOperationException
   {
+    checkDiskSpace(modifyOperation);
     writerBegin();
 
     DN entryDN = newEntry.getDN();
@@ -887,7 +896,9 @@
   @Override()
   public void renameEntry(DN currentDN, Entry entry,
                           ModifyDNOperation modifyDNOperation)
-      throws DirectoryException, CanceledOperationException {
+      throws DirectoryException, CanceledOperationException
+  {
+    checkDiskSpace(modifyDNOperation);
     writerBegin();
 
     EntryContainer currentContainer;
@@ -1580,6 +1591,14 @@
 
         baseDNs = newBaseDNs;
       }
+
+      if(cfg.getDiskFullThreshold() != newCfg.getDiskFullThreshold() ||
+          cfg.getDiskLowThreshold() != newCfg.getDiskLowThreshold())
+      {
+        diskMonitor.setFullThreshold(newCfg.getDiskFullThreshold());
+        diskMonitor.setLowThreshold(newCfg.getDiskLowThreshold());
+      }
+
       // Put the new configuration in place.
       this.cfg = newCfg;
     }
@@ -1692,6 +1711,10 @@
 
     alerts.put(ALERT_TYPE_BACKEND_ENVIRONMENT_UNUSABLE,
             ALERT_DESCRIPTION_BACKEND_ENVIRONMENT_UNUSABLE);
+    alerts.put(ALERT_TYPE_DISK_SPACE_LOW,
+            ALERT_DESCRIPTION_DISK_SPACE_LOW);
+    alerts.put(ALERT_TYPE_DISK_FULL,
+            ALERT_DESCRIPTION_DISK_FULL);
     return alerts;
   }
 
@@ -1729,4 +1752,51 @@
             new EntryCachePreloader(this);
     preloader.preload();
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void diskLowThresholdReached(long bytesFree) {
+    Message msg = ERR_JEB_DISK_LOW_THRESHOLD_REACHED.get(
+        getFileForPath(cfg.getDBDirectory()).getPath(), cfg.getBackendId(),
+        bytesFree, Math.max(cfg.getDiskLowThreshold(),
+            cfg.getDiskFullThreshold()));
+    DirectoryServer.sendAlertNotification(this,
+        ALERT_TYPE_DISK_SPACE_LOW, msg);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void diskFullThresholdReached(long bytesFree) {
+    Message msg = ERR_JEB_DISK_FULL_THRESHOLD_REACHED.get(
+        getFileForPath(cfg.getDBDirectory()).getPath(), cfg.getBackendId(),
+        bytesFree, Math.max(cfg.getDiskLowThreshold(),
+            cfg.getDiskFullThreshold()));
+    DirectoryServer.sendAlertNotification(this,
+        ALERT_TYPE_DISK_FULL, msg);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void diskSpaceRestored(long bytesFree) {
+    Message msg = NOTE_JEB_DISK_SPACE_RESTORED.get(bytesFree,
+        getFileForPath(cfg.getDBDirectory()).getPath(), cfg.getBackendId(),
+        Math.max(cfg.getDiskLowThreshold(),
+            cfg.getDiskFullThreshold()));
+    logError(msg);
+  }
+
+  private void checkDiskSpace(Operation operation) throws DirectoryException
+  {
+    if(diskMonitor.isFullThresholdReached() ||
+        (diskMonitor.isLowThresholdReached() && operation != null &&
+            !operation.getClientConnection().hasPrivilege(
+                Privilege.BYPASS_LOCKDOWN, operation)))
+    {
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+          WARN_JEB_OUT_OF_DISK_SPACE.get());
+    }
+  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
index 219c6c7..8cfa019 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
 import org.opends.messages.Message;
@@ -909,9 +909,9 @@
       // Create the directory if it doesn't exist.
       if(!cfg.getDBDirectory().equals(this.config.getDBDirectory()))
       {
-        File parentDirectory = getFileForPath(config.getDBDirectory());
+        File parentDirectory = getFileForPath(cfg.getDBDirectory());
         File backendDirectory =
-          new File(parentDirectory, config.getBackendId());
+          new File(parentDirectory, cfg.getBackendId());
 
         if (!backendDirectory.exists())
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
index 15d3768..70b92a7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
 import org.opends.messages.Message;
@@ -126,10 +126,6 @@
           MonitorProvider<? extends MonitorProviderCfg> monitor =
                loadMonitor(className, monitorConfig);
           monitors.put(monitorConfig.dn(), monitor);
-          if (monitor.getUpdateInterval() > 0)
-          {
-            monitor.start();
-          }
           DirectoryServer.registerMonitorProvider(monitor);
         }
         catch (InitializationException ie)
@@ -211,10 +207,6 @@
     if (resultCode == ResultCode.SUCCESS)
     {
       monitors.put(configuration.dn(), monitor);
-      if (monitor.getUpdateInterval() > 0)
-      {
-        monitor.start();
-      }
       DirectoryServer.registerMonitorProvider(monitor);
     }
 
@@ -358,10 +350,6 @@
     if (resultCode == ResultCode.SUCCESS)
     {
       monitors.put(configuration.dn(), monitor);
-      if (monitor.getUpdateInterval() > 0)
-      {
-        monitor.start();
-      }
       DirectoryServer.registerMonitorProvider(monitor);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java b/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
index bad3403..6a51e37 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
 import org.opends.messages.Message;
@@ -119,6 +119,9 @@
     {
       switch (p)
       {
+        case BYPASS_LOCKDOWN:
+          privSet.add(Privilege.BYPASS_LOCKDOWN);
+          break;
         case BYPASS_ACL:
           privSet.add(Privilege.BYPASS_ACL);
           break;
@@ -152,6 +155,9 @@
         case BACKEND_RESTORE:
           privSet.add(Privilege.BACKEND_RESTORE);
           break;
+        case SERVER_LOCKDOWN:
+          privSet.add(Privilege.SERVER_LOCKDOWN);
+          break;
         case SERVER_SHUTDOWN:
           privSet.add(Privilege.SERVER_SHUTDOWN);
           break;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java b/opendj-sdk/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java
index 3dda4ee..a057dc9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.server.core.networkgroups;
@@ -71,7 +71,6 @@
    * @param networkGroup The network group owning these stats
    */
   public NetworkGroupStatistics(NetworkGroup networkGroup) {
-    super(networkGroup.getID());
     this.instanceName = networkGroup.getID();
     this.networkGroup = networkGroup;
     DirectoryServer.registerMonitorProvider(this);
@@ -160,23 +159,6 @@
    * {@inheritDoc}
    */
   @Override
-  public long getUpdateInterval() {
-    // This monitor should not run periodically.
-    return -1;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void updateMonitorData() {
-    // No implementation is required since this does not do periodic updates.
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
   public List<Attribute> getMonitorData() {
     ArrayList<Attribute> attrs = new ArrayList<Attribute>();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java
new file mode 100644
index 0000000..b04c7c3
--- /dev/null
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java
@@ -0,0 +1,308 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *       Copyright year Sun Microsystems, Inc.
+ */
+
+package org.opends.server.extensions;
+
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.api.DiskSpaceMonitorHandler;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.config.ConfigException;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.loggers.ErrorLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.*;
+
+import static org.opends.messages.CoreMessages.
+    ERR_DISK_SPACE_MONITOR_UPDATE_FAILED;
+import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.getTracer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.*;
+
+/**
+ * This class provides an application-wide disk space monitoring service.
+ * It provides the ability for registered handlers to receive notifications
+ * when the free disk space falls below a certain threshold.
+ *
+ * The handler will only be notified once when when the free space
+ * have dropped below any of the thresholds. Once the "full" threshold
+ * have been reached, the handler will not be notified again until the
+ * free space raises above the "low" threshold.
+ */
+public class DiskSpaceMonitor extends MonitorProvider<MonitorProviderCfg>
+    implements Runnable
+{
+  /**
+   * The tracer object for the debug logger.
+   */
+  private static final DebugTracer TRACER = getTracer();
+
+  private volatile File directory;
+  private volatile long lowThreshold;
+  private volatile long fullThreshold;
+  private final DiskSpaceMonitorHandler handler;
+  private final int interval;
+  private final TimeUnit unit;
+  private final String instanceName;
+  private int lastState = 0;
+
+  /**
+   * Constructs a new DiskSpaceMonitor that will notify the specified
+   * DiskSpaceMonitorHandler when the specified disk
+   * falls below the provided thresholds.
+   *
+   * @param instanceName A unique name for this monitor.
+   * @param directory The directory to monitor.
+   * @param lowThreshold The "low" threshold.
+   * @param fullThreshold   The "full" threshold.
+   * @param interval  The polling interval for checking free space.
+   * @param unit the time unit of the interval parameter.
+   * @param handler The handler to get notified when the provided thresholds are
+   *                reached or <code>null</code> if no notification is needed;
+   */
+  public DiskSpaceMonitor(String instanceName, File directory,
+                          long lowThreshold,
+                          long fullThreshold, int interval, TimeUnit unit,
+                          DiskSpaceMonitorHandler handler) {
+    this.directory = directory;
+    this.lowThreshold = lowThreshold;
+    this.fullThreshold = fullThreshold;
+    this.interval = interval;
+    this.unit = unit;
+    this.handler = handler;
+    this.instanceName = instanceName+",cn=Disk Space Monitor";
+  }
+
+  /**
+   * Retrieves the directory currently being monitored.
+   *
+   * @return The directory currently being monitored.
+   */
+  public File getDirectory() {
+    return directory;
+  }
+
+  /**
+   * Sets the directory to monitor.
+   *
+   * @param directory The directory to monitor.
+   */
+  public void setDirectory(File directory) {
+    this.directory = directory;
+  }
+
+  /**
+   * Retrieves the currently "low" space threshold currently being enforced.
+   *
+   * @return The currently "low" space threshold currently being enforced.
+   */
+  public long getLowThreshold() {
+    return lowThreshold;
+  }
+
+  /**
+   * Sets the "low" space threshold to enforce.
+   *
+   * @param lowThreshold The "low" space threshold to enforce.
+   */
+  public void setLowThreshold(long lowThreshold) {
+    this.lowThreshold = lowThreshold;
+  }
+
+  /**
+   * Retrieves the currently full threshold currently being enforced.
+   *
+   * @return The currently full space threshold currently being enforced.
+   */
+  public long getFullThreshold() {
+    return fullThreshold;
+  }
+
+  /**
+   * Sets the full threshold to enforce.
+   *
+   * @param fullThreshold The full space threshold to enforce.
+   */
+  public void setFullThreshold(long fullThreshold) {
+    this.fullThreshold = fullThreshold;
+  }
+
+  /**
+   * Retrieves the free space currently on the disk.
+   *
+   * @return The free space currently on the disk.
+   */
+  public long getFreeSpace() {
+    return directory.getUsableSpace();
+  }
+
+  /**
+   * Indicates if the "full" threshold is reached.
+   *
+   * @return <code>true</code> if the free space is lower than the "full"
+   *         threshold or <code>false</code> otherwise.
+   */
+  public boolean isFullThresholdReached()
+  {
+    return lastState >= 2;
+  }
+
+  /**
+   * Indicates if the "low" threshold is reached.
+   *
+   * @return <code>true</code> if the free space is lower than the "low"
+   *         threshold or <code>false</code> otherwise.
+   */
+  public boolean isLowThresholdReached()
+  {
+    return lastState >= 1;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void initializeMonitorProvider(MonitorProviderCfg configuration)
+      throws ConfigException, InitializationException {
+    scheduleUpdate(this, 0, interval, unit);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getMonitorInstanceName() {
+    return instanceName;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public List<Attribute> getMonitorData() {
+    ArrayList<Attribute> monitorAttrs = new ArrayList<Attribute>();
+
+    AttributeType attrType =
+        DirectoryServer.getDefaultAttributeType("disk-dir",
+            DirectoryServer.getDefaultStringSyntax());
+    monitorAttrs.add(Attributes.create(attrType, directory.getPath()));
+
+    attrType =
+        DirectoryServer.getDefaultAttributeType("disk-free",
+            DirectoryServer.getDefaultIntegerSyntax());
+    monitorAttrs.add(Attributes.create(attrType,
+        String.valueOf(getFreeSpace())));
+
+    attrType =
+        DirectoryServer.getDefaultAttributeType("disk-state",
+            DirectoryServer.getDefaultStringSyntax());
+    switch(lastState)
+    {
+      case 0 : monitorAttrs.add(Attributes.create(attrType, "normal"));
+        break;
+      case 1 : monitorAttrs.add(Attributes.create(attrType, "low"));
+        break;
+      case 2 : monitorAttrs.add(Attributes.create(attrType, "full"));
+        break;
+    }
+
+
+    return monitorAttrs;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void run() {
+    try
+    {
+      long lastFreeSpace = directory.getUsableSpace();
+
+      if(debugEnabled())
+      {
+        TRACER.debugInfo("Free space for %s: %d, " +
+            "low threshold: %d, full threshold: %d, state: %d",
+            directory.getPath(), lastFreeSpace, lowThreshold, fullThreshold,
+            lastState);
+      }
+
+      if(lastFreeSpace < fullThreshold)
+      {
+        if(lastState < 2)
+        {
+          if(debugEnabled())
+          {
+            TRACER.debugInfo("State change: %d -> %d", lastState, 2);
+          }
+
+          lastState = 2;
+          if(handler != null)
+          {
+            handler.diskFullThresholdReached(lastFreeSpace);
+          }
+        }
+      }
+      else if(lastFreeSpace < lowThreshold)
+      {
+        if(lastState < 1)
+        {
+          if(debugEnabled())
+          {
+            TRACER.debugInfo("State change: %d -> %d", lastState, 1);
+          }
+          lastState = 1;
+          if(handler != null)
+          {
+            handler.diskLowThresholdReached(lastFreeSpace);
+          }
+        }
+      }
+      else if(lastState != 0)
+      {
+        if(debugEnabled())
+        {
+          TRACER.debugInfo("State change: %d -> %d", lastState, 0);
+        }
+        lastState = 0;
+        if(handler != null)
+        {
+          handler.diskSpaceRestored(lastFreeSpace);
+        }
+      }
+    }
+    catch(Exception e)
+    {
+      ErrorLogger.logError(ERR_DISK_SPACE_MONITOR_UPDATE_FAILED.get(
+          directory.getPath(), e.toString()));
+
+      TRACER.debugCaught(DebugLogLevel.ERROR, e);
+    }
+  }
+}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java
index d9b2e10..3fb7f68 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
 
@@ -164,7 +164,6 @@
       ParallelWorkQueueMonitor monitor =
            new ParallelWorkQueueMonitor(this);
       monitor.initializeMonitorProvider(null);
-      monitor.start();
       DirectoryServer.registerMonitorProvider(monitor);
     }
     catch (Exception e)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
index 863bf9b..f7237e7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
@@ -185,7 +185,6 @@
       TraditionalWorkQueueMonitor monitor =
            new TraditionalWorkQueueMonitor(this);
       monitor.initializeMonitorProvider(null);
-      monitor.start();
       DirectoryServer.registerMonitorProvider(monitor);
     }
     catch (Exception e)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/BackendMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/BackendMonitor.java
index eab5a82..f1d2a6c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/BackendMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/BackendMonitor.java
@@ -89,9 +89,6 @@
    */
   public BackendMonitor(Backend backend)
   {
-    super(backend.getBackendID() + " Backend");
-
-
     this.backend = backend;
   }
 
@@ -152,28 +149,6 @@
   }
 
 
-
-  /**
-   * {@inheritDoc}
-   */
-  public long getUpdateInterval()
-  {
-    // We don't need do anything on a periodic basis.
-    return 0;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public void updateMonitorData()
-  {
-    // No implementaiton is required.
-  }
-
-
-
   /**
    * {@inheritDoc}
    */
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java
index d34b5a7..02a7d20 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -68,8 +68,6 @@
    */
   public ClientConnectionMonitorProvider()
   {
-    super("Client Connection Monitor Provider");
-
     // This will monitor all connection handlers.
     this.handler = null;
   }
@@ -84,8 +82,6 @@
    */
   public ClientConnectionMonitorProvider(ConnectionHandler handler)
   {
-    super("Client Connection Monitor Provider");
-
     this.handler = handler;
   }
 
@@ -129,42 +125,6 @@
 
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse
-   * between calls to the <CODE>updateMonitorData()</CODE> method. A
-   * negative or zero return value indicates that the
-   * <CODE>updateMonitorData()</CODE> method should not be periodically
-   * invoked.
-   *
-   * @return The length of time in milliseconds that should elapse
-   *         between calls to the <CODE>updateMonitorData()</CODE>
-   *         method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    // This monitor does not need to run periodically.
-    return 0;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to
-   * update the information associated with this monitor. Note that
-   * best-effort attempts will be made to ensure that calls to this
-   * method come <CODE>getUpdateInterval()</CODE> milliseconds apart,
-   * but no guarantees will be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // This monitor does not need to run periodically.
-    return;
-  }
-
-
-
-  /**
    * Retrieves a set of attributes containing monitor data that should
    * be returned to the client if the corresponding monitor entry is
    * requested.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
index 1979ea1..1df1272 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -84,8 +84,6 @@
   public ConnectionHandlerMonitor(
        ConnectionHandler<? extends ConnectionHandlerCfg> connectionHandler)
   {
-    super(connectionHandler.getConnectionHandlerName());
-
     this.connectionHandler = connectionHandler;
   }
 
@@ -148,27 +146,6 @@
   /**
    * {@inheritDoc}
    */
-  public long getUpdateInterval()
-  {
-    // We don't need do anything on a periodic basis.
-    return 0;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public void updateMonitorData()
-  {
-    // No implementaiton is required.
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
   public List<Attribute> getMonitorData()
   {
     LinkedList<Attribute> attrs = new LinkedList<Attribute>();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
index fcf0bed..ad259c1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -87,9 +87,6 @@
    */
   public DatabaseEnvironmentMonitor(String name, RootContainer rootContainer)
   {
-    super(name + " Monitor Provider");
-
-
     this.name = name;
     this.rootContainer = rootContainer;
   }
@@ -116,31 +113,6 @@
   }
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return The length of time in milliseconds that should elapse between
-   *         calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  public long getUpdateInterval()
-  {
-    return 0;
-  }
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
-  {
-  }
-
-  /**
    * Creates monitor attribute values for a given JE statistics object,
    * using reflection to call all the getter methods of the statistics object.
    * The attribute type names of the created attribute values are derived from
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
index 613cf78..dd06dbc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -66,7 +66,6 @@
    */
   public EntryCacheMonitorProvider()
   {
-    super("Entry Caches Monitor Provider");
     this.entryCacheName = "Entry Caches";
     this.entryCache = (EntryCache<?>) DirectoryServer.getEntryCache();
   }
@@ -82,7 +81,6 @@
     String entryCacheName,
     EntryCache<? extends EntryCacheCfg> entryCache)
   {
-    super(entryCacheName + " Entry Cache Monitor Provider");
     this.entryCacheName = entryCacheName + " Entry Cache";
     this.entryCache = entryCache;
   }
@@ -128,24 +126,6 @@
   /**
    * {@inheritDoc}
    */
-  public long getUpdateInterval()
-  {
-    // This monitor does not need to run periodically.
-    return 0;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public void updateMonitorData()
-  {
-    // This monitor does not need to run periodically.
-    return;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
   public ArrayList<Attribute> getMonitorData()
   {
     ArrayList<Attribute> attrs = new ArrayList<Attribute>();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java
index de443fb..19c814c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -34,6 +34,7 @@
 import java.lang.management.MemoryUsage;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.concurrent.TimeUnit;
 
 import org.opends.server.admin.std.server.MemoryUsageMonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
@@ -48,6 +49,7 @@
  */
 public class MemoryUsageMonitorProvider
        extends MonitorProvider<MemoryUsageMonitorProviderCfg>
+       implements Runnable
 {
   // A map of the last GC counts seen by this monitor for calculating recent
   // stats.
@@ -67,29 +69,15 @@
 
 
   /**
-   * Initializes this monitor provider.
-   */
-  public MemoryUsageMonitorProvider()
-  {
-    super("JVM Memory Usage Monitor Provider");
-
-    // No initialization should be performed here.
-  }
-
-
-
-  /**
    * {@inheritDoc}
    */
   public void initializeMonitorProvider(
                    MemoryUsageMonitorProviderCfg configuration)
          throws ConfigException, InitializationException
   {
-    // No initialization is required.
+    scheduleUpdate(this, 0, 1, TimeUnit.SECONDS);
   }
 
-
-
   /**
    * {@inheritDoc}
    */
@@ -100,24 +88,10 @@
   }
 
 
-
   /**
    * {@inheritDoc}
    */
-  @Override()
-  public long getUpdateInterval()
-  {
-    // Update the information once every second.
-    return 1000;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public void updateMonitorData()
+  public void run()
   {
     for (GarbageCollectorMXBean gc :
          ManagementFactory.getGarbageCollectorMXBeans())
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java
index 83066bb..a7c9b42 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java
@@ -22,13 +22,14 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
 
 
 import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
 
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.AttributeSyntax;
@@ -50,6 +51,7 @@
  */
 public class ParallelWorkQueueMonitor
        extends MonitorProvider<MonitorProviderCfg>
+       implements Runnable
 {
   /**
    * The name to use for the monitor attribute that provides the current request
@@ -106,9 +108,6 @@
    */
   public ParallelWorkQueueMonitor(ParallelWorkQueue workQueue)
   {
-    super("Work Queue Monitor Provider");
-
-
     this.workQueue = workQueue;
   }
 
@@ -123,6 +122,7 @@
     maxBacklog   = 0;
     totalBacklog = 0;
     numPolls     = 0;
+    scheduleUpdate(this, 0, 10, TimeUnit.SECONDS);
   }
 
 
@@ -139,32 +139,10 @@
   }
 
 
-
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
+   * {@inheritDoc}
    */
-  public long getUpdateInterval()
-  {
-    // We will poll the work queue every 10 seconds.
-    return 10000;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
+  public void run()
   {
     int backlog = workQueue.size();
     totalBacklog += backlog;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
index de1d970..1ffd6c5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -48,18 +48,6 @@
        extends MonitorProvider<StackTraceMonitorProviderCfg>
 {
   /**
-   * Initializes this monitor provider.
-   */
-  public StackTraceMonitorProvider()
-  {
-    super("Stack Trace Monitor Provider");
-
-    // No initialization should be performed here.
-  }
-
-
-
-  /**
    * {@inheritDoc}
    */
   public void initializeMonitorProvider(
@@ -85,38 +73,6 @@
 
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  public long getUpdateInterval()
-  {
-    // This monitor does not need to run periodically.
-    return 0;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
-  {
-    // This monitor does not need to run periodically.
-    return;
-  }
-
-
-
-  /**
    * Retrieves a set of attributes containing monitor data that should be
    * returned to the client if the corresponding monitor entry is requested.
    *
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
index c1b2568..3b10f4b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -60,18 +60,6 @@
 
 
   /**
-   * Initializes this monitor provider.
-   */
-  public SystemInfoMonitorProvider()
-  {
-    super("System Info Monitor Provider");
-
-    // No initialization should be performed here.
-  }
-
-
-
-  /**
    * {@inheritDoc}
    */
   public void initializeMonitorProvider(
@@ -97,38 +85,6 @@
 
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  public long getUpdateInterval()
-  {
-    // This monitor does not need to run periodically.
-    return 0;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
-  {
-    // This monitor does not need to run periodically.
-    return;
-  }
-
-
-
-  /**
    * Retrieves a set of attributes containing monitor data that should be
    * returned to the client if the corresponding monitor entry is requested.
    *
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
index b1329c3..f271c39 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java
@@ -22,13 +22,14 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
 
 
 import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
 
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.AttributeSyntax;
@@ -50,6 +51,7 @@
  */
 public class TraditionalWorkQueueMonitor
        extends MonitorProvider<MonitorProviderCfg>
+       implements Runnable
 {
   /**
    * The name to use for the monitor attribute that provides the current request
@@ -115,9 +117,6 @@
    */
   public TraditionalWorkQueueMonitor(TraditionalWorkQueue workQueue)
   {
-    super("Work Queue Monitor Provider");
-
-
     this.workQueue = workQueue;
   }
 
@@ -132,6 +131,7 @@
     maxBacklog   = 0;
     totalBacklog = 0;
     numPolls     = 0;
+    scheduleUpdate(this, 0, 10, TimeUnit.SECONDS);
   }
 
 
@@ -148,32 +148,10 @@
   }
 
 
-
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
+   * {@inheritDoc}
    */
-  public long getUpdateInterval()
-  {
-    // We will poll the work queue every 10 seconds.
-    return 10000;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
+  public void run()
   {
     int backlog = workQueue.size();
     totalBacklog += backlog;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
index 8a814bc..37866d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -140,18 +140,6 @@
 
 
   /**
-   * Initializes this monitor provider.
-   */
-  public VersionMonitorProvider()
-  {
-    super("Version Monitor Provider");
-
-    // No initialization should be performed here.
-  }
-
-
-
-  /**
    * {@inheritDoc}
    */
   public void initializeMonitorProvider(VersionMonitorProviderCfg configuration)
@@ -174,39 +162,6 @@
   }
 
 
-
-  /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  public long getUpdateInterval()
-  {
-    // This monitor does not need to run periodically.
-    return 0;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  public void updateMonitorData()
-  {
-    // This monitor does not need to run periodically.
-    return;
-  }
-
-
-
   /**
    * Retrieves a set of attributes containing monitor data that should be
    * returned to the client if the corresponding monitor entry is requested.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
index 65f5113..edd2bfc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
 
@@ -139,7 +139,6 @@
    */
   public LDAPStatistics(String instanceName)
   {
-    super("LDAP Statistics Monitor Provider");
     this.instanceName = instanceName;
   }
 
@@ -180,42 +179,6 @@
 
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse
-   * between calls to the <CODE>updateMonitorData()</CODE> method. A
-   * negative or zero return value indicates that the
-   * <CODE>updateMonitorData()</CODE> method should not be periodically
-   * invoked.
-   *
-   * @return The length of time in milliseconds that should elapse
-   *         between calls to the <CODE>updateMonitorData()</CODE>
-   *         method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    // This monitor should not run periodically.
-    return -1;
-  }
-
-
-
-  /**
-   * Performs any processing periodic processing that may be desired to
-   * update the information associated with this monitor. Note that
-   * best-effort attempts will be made to ensure that calls to this
-   * method come <CODE>getUpdateInterval()</CODE> milliseconds apart,
-   * but no guarantees will be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // No implementation is required since this does not do periodic
-    // updates.
-  }
-
-
-
-  /**
    * Retrieves a set of attributes containing monitor data that should
    * be returned to the client if the corresponding monitor entry is
    * requested.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
index 72b31c2..e36cd6a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -565,11 +565,6 @@
    */
   private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg>
   {
-    private DbMonitorProvider()
-    {
-      super("ReplicationServer Database");
-    }
-
     /**
      * {@inheritDoc}
      */
@@ -619,30 +614,11 @@
      * {@inheritDoc}
      */
     @Override
-    public long getUpdateInterval()
-    {
-      /* we don't wont to do polling on this monitor */
-      return 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     public void initializeMonitorProvider(MonitorProviderCfg configuration)
                             throws ConfigException,InitializationException
     {
       // Nothing to do for now
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void updateMonitorData()
-    {
-      // As long as getUpdateInterval() returns 0, this will never get called
-    }
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
index 468bd34..937086f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
@@ -433,11 +433,6 @@
    */
   private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg>
   {
-    private DbMonitorProvider()
-    {
-      super("ReplicationServer DraftCN Database");
-    }
-
     /**
      * {@inheritDoc}
      */
@@ -467,30 +462,11 @@
      * {@inheritDoc}
      */
     @Override
-    public long getUpdateInterval()
-    {
-      /* we don't wont to do polling on this monitor */
-      return 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     public void initializeMonitorProvider(MonitorProviderCfg configuration)
                             throws ConfigException,InitializationException
     {
       // Nothing to do for now
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void updateMonitorData()
-    {
-      // As long as getUpdateInterval() returns 0, this will never get called
-    }
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index c39a7b7..a44c390 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -998,7 +998,7 @@
       localString += serverId + " " + serverURL + " " + getServiceId()
        + " " + this.getOperationId();
     else
-      localString += this.getName();
+      localString += this.getClass().getCanonicalName()+ " " + operationId;
     return localString;
   }
   /**
@@ -1030,7 +1030,6 @@
   {
 
     this.operationId = startECLSessionMsg.getOperationId();
-    this.setName(this.getClass().getCanonicalName()+ " " + operationId);
 
     isPersistent  = startECLSessionMsg.isPersistent();
     lastDraftCN   = startECLSessionMsg.getLastDraftChangeNumber();
@@ -1149,7 +1148,8 @@
 
     if (debugEnabled())
       TRACER.debugInfo(
-          this.getName() + " initialized: " +
+          this.getClass().getCanonicalName()+ " " + operationId +
+          " initialized: " +
           " " + dumpState() + " " +
           " " + clDomCtxtsToString(""));
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
index fde178c..327b652 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
@@ -117,7 +117,6 @@
     AssuredMode assuredMode, byte safeDataLevel, Set<String> eclInclude,
     short protocolVersion)
   {
-    super("Server Handler");
     this.replServerHandler = replServerHandler;
     this.rsDomain = replServerHandler.getDomain();
     this.replicationServerId = replicationServerId;
@@ -221,36 +220,6 @@
   }
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    /* we don't wont to do polling on this monitor */
-    return 0;
-  }
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // As long as getUpdateInterval() returns 0, this will never get called
-
-  }
-
-  /**
    * Retrieves a set of attributes containing monitor data that should be
    * returned to the client if the corresponding monitor entry is requested.
    *
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
index 4cb7198..6622f92 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
 
@@ -144,7 +144,6 @@
       int replicationServerId,
       ReplicationServer replicationServer)
   {
-    super("Message Handler");
     this.maxQueueSize = queueSize;
     this.maxQueueBytesSize = queueSize * 100;
     this.replicationServerURL = replicationServerURL;
@@ -637,22 +636,6 @@
   }
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    /* we don't wont to do polling on this monitor */
-    return 0;
-  }
-
-  /**
    * Increase the counter of update received from the server.
    */
   public void incrementInCount()
@@ -771,19 +754,6 @@
   }
 
   /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // As long as getUpdateInterval() returns 0, this will never get called
-  }
-
-  /**
    * Update the serverState with the last message sent.
    *
    * @param msg the last update sent.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index e6200f6..848b5e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -199,8 +199,6 @@
   public ReplicationServerDomain(
       String baseDn, ReplicationServer replicationServer)
   {
-    super("Replication Server " + replicationServer.getReplicationPort() + " "
-        + baseDn + " " + replicationServer.getServerId());
     this.baseDn = baseDn;
     this.replicationServer = replicationServer;
     this.assuredTimeoutTimer = new Timer("Replication Assured Timer for " +
@@ -376,7 +374,9 @@
         if ( (generationId>0) && (generationId != handler.getGenerationId()) )
         {
           if (debugEnabled())
-            TRACER.debugInfo("In " + this.getName() +
+            TRACER.debugInfo("In " + "Replication Server " +
+              replicationServer.getReplicationPort() + " " +
+              baseDn + " " + replicationServer.getServerId() +
               " for dn " + baseDn + ", update " +
               update.getChangeNumber().toString() +
               " will not be sent to replication server " +
@@ -3048,26 +3048,6 @@
    * {@inheritDoc}
    */
   @Override
-  public long getUpdateInterval()
-  {
-    /* we don't wont to do polling on this monitor */
-    return 0;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // As long as getUpdateInterval() returns 0, this will never get called
-
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
   public ArrayList<Attribute> getMonitorData()
   {
     /*
@@ -3328,7 +3308,9 @@
       if (!sidConnected)
       {
         if (debugEnabled())
-          TRACER.debugInfo("In " + this.getName() +
+          TRACER.debugInfo("In " + "Replication Server " +
+            replicationServer.getReplicationPort() + " " +
+            baseDn + " " + replicationServer.getServerId() +
             " Server " + sid
             + " is not considered for eligibility ... potentially down");
         continue;
@@ -3352,8 +3334,9 @@
 
     if (debugEnabled())
       TRACER.debugInfo(
-        "In " + this.getName() + " getEligibleCN() returns result ="
-        + eligibleCN);
+        "In " + "Replication Server " + replicationServer.getReplicationPort() +
+        " " + baseDn + " " + replicationServer.getServerId() +
+        " getEligibleCN() returns result =" + eligibleCN);
     return eligibleCN;
   }
 
@@ -3396,7 +3379,9 @@
           } catch (IOException e)
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
-            logError(ERR_CHANGELOG_ERROR_SENDING_MSG.get(rsHandler.getName()));
+            logError(ERR_CHANGELOG_ERROR_SENDING_MSG.get(
+                "Replication Server " + replicationServer.getReplicationPort() +
+                " " + baseDn + " " + replicationServer.getServerId()));
             stopServer(rsHandler, false);
           }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index 17a704f..4820e9a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -719,22 +719,6 @@
   protected abstract ServerStatus getStatus();
 
   /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    /* we don't wont to do polling on this monitor */
-    return 0;
-  }
-
-  /**
    * Increment the number of updates received from the server in assured safe
    * data mode.
    */
@@ -1236,19 +1220,6 @@
       replicationServerDomain.startMonitoringPublisher();
     }
   }
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // As long as getUpdateInterval() returns 0, this will never get called
-  }
   /**
    * Update the send window size based on the credit specified in the
    * given window message.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java
index 918e8a5..2d0143f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.service;
 
@@ -53,8 +53,6 @@
    */
   public ReplicationMonitor(ReplicationDomain domain)
   {
-    super("Replication monitor " + domain.getServiceID()
-        + " " + domain.getServerId());
     this.domain = domain;
   }
 
@@ -310,33 +308,4 @@
     attributes
         .add(Attributes.create(type, AttributeValues.create(type, value)));
   }
-
-  /**
-   * Retrieves the length of time in milliseconds that should elapse between
-   * calls to the <CODE>updateMonitorData()</CODE> method.  A negative or zero
-   * return value indicates that the <CODE>updateMonitorData()</CODE> method
-   * should not be periodically invoked.
-   *
-   * @return  The length of time in milliseconds that should elapse between
-   *          calls to the <CODE>updateMonitorData()</CODE> method.
-   */
-  @Override
-  public long getUpdateInterval()
-  {
-    /* we don't wont to do polling on this monitor */
-    return 0;
-  }
-
-  /**
-   * Performs any processing periodic processing that may be desired to update
-   * the information associated with this monitor.  Note that best-effort
-   * attempts will be made to ensure that calls to this method come
-   * <CODE>getUpdateInterval()</CODE> milliseconds apart, but no guarantees will
-   * be made.
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    //  As long as getUpdateInterval() returns 0, this will never get called
-  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
index bbbc3c5..4ed6819 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -34,10 +34,7 @@
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Operation;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
 
 import static org.opends.messages.TaskMessages.*;
 
@@ -71,7 +68,8 @@
     if (operation != null)
     {
       DN authzDN = operation.getAuthorizationDN();
-      if ((authzDN == null) || (! DirectoryServer.isRootDN(authzDN)))
+      if ((authzDN == null) || (! operation.getClientConnection().hasPrivilege(
+          Privilege.SERVER_LOCKDOWN, operation)))
       {
         Message message = ERR_TASK_ENTERLOCKDOWN_NOT_ROOT.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
index a4566a1..973253a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -34,10 +34,7 @@
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Operation;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
 
 import static org.opends.messages.TaskMessages.*;
 
@@ -71,7 +68,8 @@
     if (operation != null)
     {
       DN authzDN = operation.getAuthorizationDN();
-      if ((authzDN == null) || (! DirectoryServer.isRootDN(authzDN)))
+      if ((authzDN == null) || (! operation.getClientConnection().hasPrivilege(
+          Privilege.SERVER_LOCKDOWN, operation)))
       {
         Message message = ERR_TASK_LEAVELOCKDOWN_NOT_ROOT.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Privilege.java b/opendj-sdk/opends/src/server/org/opends/server/types/Privilege.java
index 90fdb74..9386ec5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Privilege.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Privilege.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
 
@@ -56,6 +56,14 @@
 
 
   /**
+   * The privilege that provides the ability to bypass server
+   * lockdown mode.
+   */
+  BYPASS_LOCKDOWN("bypass-lockdown"),
+
+
+
+  /**
    * The privilege that provides the ability to modify access control
    * rules.
    */
@@ -136,6 +144,13 @@
 
 
   /**
+   * The privilege that provides the ability to lockdown a server.
+   */
+  SERVER_LOCKDOWN("server-lockdown"),
+
+
+
+  /**
    * The privilege that provides the ability to request a server
    * shutdown.
    */
@@ -250,6 +265,7 @@
   static
   {
     PRIV_MAP.put("bypass-acl", BYPASS_ACL);
+    PRIV_MAP.put("bypass-lockdown", BYPASS_LOCKDOWN);
     PRIV_MAP.put("modify-acl", MODIFY_ACL);
     PRIV_MAP.put("config-read", CONFIG_READ);
     PRIV_MAP.put("config-write", CONFIG_WRITE);
@@ -260,6 +276,7 @@
     PRIV_MAP.put("ldif-export", LDIF_EXPORT);
     PRIV_MAP.put("backend-backup", BACKEND_BACKUP);
     PRIV_MAP.put("backend-restore", BACKEND_RESTORE);
+    PRIV_MAP.put("server-lockdown", SERVER_LOCKDOWN);
     PRIV_MAP.put("server-shutdown", SERVER_SHUTDOWN);
     PRIV_MAP.put("server-restart", SERVER_RESTART);
     PRIV_MAP.put("proxied-auth", PROXIED_AUTH);
@@ -272,6 +289,7 @@
     PRIV_MAP.put("unindexed-search", UNINDEXED_SEARCH);
 
     PRIV_NAMES.add("bypass-acl");
+    PRIV_NAMES.add("bypass-lockdown");
     PRIV_NAMES.add("modify-acl");
     PRIV_NAMES.add("config-read");
     PRIV_NAMES.add("config-write");
@@ -282,6 +300,7 @@
     PRIV_NAMES.add("ldif-export");
     PRIV_NAMES.add("backend-backup");
     PRIV_NAMES.add("backend-restore");
+    PRIV_NAMES.add("server-lockdown");
     PRIV_NAMES.add("server-shutdown");
     PRIV_NAMES.add("server-restart");
     PRIV_NAMES.add("proxied-auth");
@@ -294,6 +313,7 @@
     PRIV_NAMES.add("unindexed-search");
 
     DEFAULT_ROOT_PRIV_SET.add(BYPASS_ACL);
+    DEFAULT_ROOT_PRIV_SET.add(BYPASS_LOCKDOWN);
     DEFAULT_ROOT_PRIV_SET.add(MODIFY_ACL);
     DEFAULT_ROOT_PRIV_SET.add(CONFIG_READ);
     DEFAULT_ROOT_PRIV_SET.add(CONFIG_WRITE);
@@ -301,6 +321,7 @@
     DEFAULT_ROOT_PRIV_SET.add(LDIF_EXPORT);
     DEFAULT_ROOT_PRIV_SET.add(BACKEND_BACKUP);
     DEFAULT_ROOT_PRIV_SET.add(BACKEND_RESTORE);
+    DEFAULT_ROOT_PRIV_SET.add(SERVER_LOCKDOWN);
     DEFAULT_ROOT_PRIV_SET.add(SERVER_SHUTDOWN);
     DEFAULT_ROOT_PRIV_SET.add(SERVER_RESTART);
     DEFAULT_ROOT_PRIV_SET.add(DISCONNECT_CLIENT);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/ServerConstants.java b/opendj-sdk/opends/src/server/org/opends/server/util/ServerConstants.java
index fc6c8db..4b325ea 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/ServerConstants.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/ServerConstants.java
@@ -1810,6 +1810,48 @@
 
   /**
    * The description for the alert type that will be used for the alert
+   * notification generated when the free disk space have reached
+   * the low threshold.
+   */
+  public static final String ALERT_DESCRIPTION_DISK_SPACE_LOW =
+      "This alert type will be used to provide notification that the " +
+      "free disk space have reached the low threshold.";
+
+
+
+  /**
+   * The alert type string that will be used for the alert notification
+   * generated when the JE Environment needs to be reopened by restarting
+   * the Directory Server.
+   */
+  public static final String ALERT_TYPE_DISK_SPACE_LOW =
+       "org.opends.server.DiskSpaceLow";
+
+
+
+  /**
+   * The description for the alert type that will be used for the alert
+   * notification generated when the free disk space have reached
+   * the full threshold.
+   */
+  public static final String ALERT_DESCRIPTION_DISK_FULL =
+      "This alert type will be used to provide notification that the " +
+      "free disk space have reached the full threshold.";
+
+
+
+  /**
+   * The alert type string that will be used for the alert notification
+   * generated when the JE Environment needs to be reopened by restarting
+   * the Directory Server.
+   */
+  public static final String ALERT_TYPE_DISK_FULL =
+       "org.opends.server.DiskFull";
+
+
+
+  /**
+   * The description for the alert type that will be used for the alert
    * notification generated when the LDIF backend cannot write an updated LDIF
    * file.
    */
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java
index 6f78877..8fae7e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java
@@ -53,7 +53,6 @@
    */
   public WorkflowElementStatistics(WorkflowElement<?> workflowElement)
   {
-    super(workflowElement.getWorkflowElementID());
     this.instanceName = workflowElement.getWorkflowElementID();
     this.workflowElement = workflowElement;
   }
@@ -81,25 +80,6 @@
    * {@inheritDoc}
    */
   @Override
-  public long getUpdateInterval()
-  {
-    // This monitor should not run periodically.
-    return -1;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void updateMonitorData()
-  {
-    // No implementation is required since this does not do periodic updates.
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
   public List<Attribute> getMonitorData()
   {
     ArrayList<Attribute> attrs = new ArrayList<Attribute>();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
index 576425f..16df4c8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -52,21 +52,7 @@
 import org.opends.server.core.PasswordPolicyState;
 import org.opends.server.core.PluginConfigManager;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.AccountStatusNotification;
-import org.opends.server.types.AccountStatusNotificationType;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AttributeValue;
-import org.opends.server.types.AuthenticationInfo;
-import org.opends.server.types.ByteString;
-import org.opends.server.types.Control;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.WritabilityMode;
+import org.opends.server.types.*;
 import org.opends.server.types.operation.PostOperationBindOperation;
 import org.opends.server.types.operation.PostResponseBindOperation;
 import org.opends.server.types.operation.PreOperationBindOperation;
@@ -621,15 +607,15 @@
       {
         setResultCode(ResultCode.SUCCESS);
 
-        boolean isRoot = DirectoryServer.isRootDN(userEntry.getDN());
-        if (DirectoryServer.lockdownMode() && (! isRoot))
+        if (DirectoryServer.lockdownMode() &&
+            (! ClientConnection.hasPrivilege(userEntry,
+                Privilege.BYPASS_LOCKDOWN)))
         {
           throw new DirectoryException(ResultCode.INVALID_CREDENTIALS,
-                                       ERR_BIND_REJECTED_LOCKDOWN_MODE.get());
+                                 ERR_BIND_REJECTED_LOCKDOWN_MODE.get());
         }
         setAuthenticationInfo(new AuthenticationInfo(userEntry, getBindDN(),
-            simplePassword,
-                                                     isRoot));
+            simplePassword, DirectoryServer.isRootDN(userEntry.getDN())));
 
 
         // Set resource limits for the authenticated user.
@@ -816,7 +802,8 @@
       {
         if ((resultCode != ResultCode.SUCCESS) ||
             (saslAuthUserEntry == null) ||
-            (! DirectoryServer.isRootDN(saslAuthUserEntry.getDN())))
+            (! ClientConnection.hasPrivilege(saslAuthUserEntry,
+                Privilege.BYPASS_LOCKDOWN)))
         {
           throw new DirectoryException(ResultCode.INVALID_CREDENTIALS,
                                        ERR_BIND_REJECTED_LOCKDOWN_MODE.get());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java
index eb0f50c..90117f4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.workflowelement.ndb;
 
@@ -31,22 +31,13 @@
 import java.util.List;
 
 import org.opends.messages.Message;
+import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.core.BindOperation;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.PasswordPolicyState;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.AccountStatusNotification;
-import org.opends.server.types.AccountStatusNotificationType;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AuthenticationInfo;
-import org.opends.server.types.ByteString;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
 
 import org.opends.server.workflowelement.localbackend.LocalBackendBindOperation;
 import static org.opends.messages.CoreMessages.*;
@@ -173,14 +164,15 @@
     if (pwPolicyState.passwordMatches(simplePassword)) {
       setResultCode(ResultCode.SUCCESS);
 
-      boolean isRoot = DirectoryServer.isRootDN(userEntry.getDN());
-      if (DirectoryServer.lockdownMode() && (!isRoot)) {
+      if (DirectoryServer.lockdownMode() &&
+            (! ClientConnection.hasPrivilege(userEntry,
+                Privilege.BYPASS_LOCKDOWN)))
+      {
         throw new DirectoryException(ResultCode.INVALID_CREDENTIALS,
           ERR_BIND_REJECTED_LOCKDOWN_MODE.get());
       }
       setAuthenticationInfo(new AuthenticationInfo(userEntry, getBindDN(),
-          simplePassword,
-        isRoot));
+          simplePassword, DirectoryServer.isRootDN(userEntry.getDN())));
 
 
       // Set resource limits for the authenticated user.
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
index 9dd3787..16358ce 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -122,34 +122,6 @@
 
 
   /**
-   * Tests the <CODE>getUpdateInterval</CODE> method.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @Test()
-  public void testGetUpdateInterval()
-         throws Exception
-  {
-    getMonitorInstance().getUpdateInterval();
-  }
-
-
-
-  /**
-   * Tests the <CODE>getUpdateMonitorData</CODE> method.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @Test()
-  public void testUpdateMonitorData()
-         throws Exception
-  {
-    getMonitorInstance().updateMonitorData();
-  }
-
-
-
-  /**
    * Tests the <CODE>getMonitorData</CODE> method.
    *
    * @throws  Exception  If an unexpected problem occurs.
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
index 2cccc84..90d8e59 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.server.monitors;
@@ -41,11 +41,6 @@
  */
 class TestMonitorProvider extends MonitorProvider<MonitorProviderCfg>
 {
-  public TestMonitorProvider()
-  {
-    super("Test Monitor Thread");
-  }
-
   public void initializeMonitorProvider(MonitorProviderCfg configuration)
        throws ConfigException, InitializationException
   {
@@ -57,16 +52,6 @@
     return "Test monitor for dc=example,dc=com";
   }
 
-  public long getUpdateInterval()
-  {
-    return 0;
-  }
-
-  public void updateMonitorData()
-  {
-    // No implementation required.
-  }
-
   public List<Attribute> getMonitorData()
   {
     return Collections.emptyList();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
index 73b0fe3..13efad7 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Copyright 2006-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.server.replication;
@@ -95,7 +95,7 @@
 
     ReplicationBroker broker =
       openReplicationSession(baseDn, 18, 100, replServerPort, 5000, true);
-    Monitor monitor = new Monitor("stress test monitor");
+    Monitor monitor = new Monitor();
     DirectoryServer.registerMonitorProvider(monitor);
 
     try {
@@ -350,11 +350,6 @@
 
   private class Monitor extends MonitorProvider<MonitorProviderCfg>
   {
-    protected Monitor(String threadName)
-    {
-      super(threadName);
-    }
-
     @Override
     public List<Attribute> getMonitorData()
     {
@@ -378,13 +373,6 @@
     }
 
     @Override
-    public void updateMonitorData()
-    {
-      // nothing to do
-
-    }
-
-    @Override
     public void initializeMonitorProvider(MonitorProviderCfg configuration)
     throws ConfigException, InitializationException
     {
@@ -392,13 +380,6 @@
 
     }
 
-    @Override
-    public long getUpdateInterval()
-    {
-      // we don't wont to do polling on this monitor
-      return 0;
-    }
-
 
 
   }

--
Gitblit v1.10.0