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

ludovicp
30.44.2010 7486ef2bb077feb489a55db86707d96e69d12265
Implements a disk space thresholds feature, preventing the server from crashing or exiting of disks full.

Each instance of the monitor have two thresholds: "low" and "full". Other components can register their own handlers if they wish to receive notifications when the thresholds are reached. It extends the MonitorProvider interface and utilizes the update interval mechanism to poll the free disk space. The current free space and state of all monitor instances are exposed through the cn=monitor interface under the cn=Disk Space Monitor branch. The only component using the monitor now is the JE backend. When the "low" threshold is reached, write operations will only be permitted to users with the BYPASS_LOCKDOWN privilege. When the "full" threshold is reached, the backend is placed in read-only mode. The default "low" and "full" thresholds are 100 MB and 10MB respectively. Along with the new feature, this patch also added two privileges: SERVER_LOCKDOWN and BYPASS_LOCKDOWN. Any user with the SERVER_LOCKDOWN privilege can put and take the server out of lockdown mode. Any user with the BYPASS_LOCKDOWN mode can bypass lockdown mode. This was restricted to only "root" users before. In addition, the MonitorProvider abstract class no longer extends DirectoryThread. It now uses a static single threaded ScheduledExecutorService to update provider states. Any provider that wishes to have its state updated periodically needs to register its updater runnable with the scheduleUpdate method.
2 files added
50 files modified
1706 ■■■■ changed files
opends/resource/config/config.ldif 4 ●●●● patch | view | raw | blame | history
opends/resource/schema/02-config.ldif 14 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml 12 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml 49 ●●●●● patch | view | raw | blame | history
opends/src/admin/defn/org/opends/server/admin/std/RootDNConfiguration.xml 14 ●●●●● patch | view | raw | blame | history
opends/src/admin/messages/GlobalCfgDefn.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/admin/messages/LocalDBBackendCfgDefn.properties 4 ●●●● patch | view | raw | blame | history
opends/src/admin/messages/RootDNCfgDefn.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/core.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/jeb.properties 17 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/task.properties 14 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/tools.properties 1 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java 61 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/api/MonitorProvider.java 170 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/jeb/BackendImpl.java 108 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/jeb/RootContainer.java 6 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/MonitorConfigManager.java 14 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java 8 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java 20 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java 308 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/ParallelWorkQueue.java 3 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java 1 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/BackendMonitor.java 25 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/ClientConnectionMonitorProvider.java 42 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/ConnectionHandlerMonitor.java 25 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java 30 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java 22 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/MemoryUsageMonitorProvider.java 36 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/ParallelWorkQueueMonitor.java 34 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/StackTraceMonitorProvider.java 46 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java 46 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/TraditionalWorkQueueMonitor.java 34 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java 47 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java 39 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/DbHandler.java 24 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java 24 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java 6 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java 31 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/MessageHandler.java 32 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java 39 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ServerHandler.java 29 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationMonitor.java 33 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java 10 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java 10 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/types/Privilege.java 23 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/util/ServerConstants.java 42 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/workflowelement/WorkflowElementStatistics.java 20 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java 29 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/workflowelement/ndb/NDBBindOperation.java 24 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java 30 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/monitors/TestMonitorProvider.java 17 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java 23 ●●●●● patch | view | raw | blame | history
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
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'
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.
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>
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.
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.
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.
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.
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
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
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 \
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_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_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 \
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
opends/src/server/org/opends/server/api/DiskSpaceMonitorHandler.java
New file
@@ -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);
}
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);
    stopRequested = false;
    monitorThread = null;
    /**
     * {@inheritDoc}
     */
    public Thread newThread(Runnable r)
    {
      Thread t =
          new DirectoryThread(r, "Monitor Provider State Updater");
      t.setDaemon(true);
      return t;
  }
  }
  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();
      }
    }
  }
}
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<?>>();
        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());
    }
  }
}
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())
        {
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);
    }
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;
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>();
opends/src/server/org/opends/server/extensions/DiskSpaceMonitor.java
New file
@@ -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);
    }
  }
}
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)
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)
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}
   */
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.
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>();
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
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>();
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())
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;
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.
   *
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.
   *
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;
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.
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.
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
    }
  }
  /**
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
    }
  }
  /**
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(""));
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.
   *
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.
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);
          }
        }
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.
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
  }
}
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);
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);
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);
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.
   */
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>();
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());
        }
        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());
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.
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.
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();
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;
    }
  }