From f1155b8f8f28643c82d66f284492ae50cddf1978 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Fri, 18 Jan 2008 16:37:24 +0000
Subject: [PATCH] Enhancement to fix for issue 2499. Added nanosecond processing time method to AbstractOperation API. Removed the dashes in the etime resolution configuration enum values. Added get/setUseNanoTime methods to DirectoryServer class
---
opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml | 10 +-
opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java | 33 ++++++++
opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java | 49 ++++++++++-
opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java | 84 +++++++++-----------
opendj-sdk/opends/resource/config/config.ldif | 2
opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java | 14 +--
opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java | 10 ++
opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java | 4
opendj-sdk/opends/src/server/org/opends/server/types/Operation.java | 14 +++
9 files changed, 149 insertions(+), 71 deletions(-)
diff --git a/opendj-sdk/opends/resource/config/config.ldif b/opendj-sdk/opends/resource/config/config.ldif
index 3548cd4..f37b819 100644
--- a/opendj-sdk/opends/resource/config/config.ldif
+++ b/opendj-sdk/opends/resource/config/config.ldif
@@ -49,7 +49,7 @@
ds-cfg-return-bind-error-messages: false
ds-cfg-idle-time-limit: 0 seconds
ds-cfg-save-config-on-successful-startup: true
-ds-cfg-etime-resolution: milli-seconds
+ds-cfg-etime-resolution: milliseconds
ds-cfg-allowed-task: org.opends.server.tasks.AddSchemaFileTask
ds-cfg-allowed-task: org.opends.server.tasks.BackupTask
ds-cfg-allowed-task: org.opends.server.tasks.DisconnectClientTask
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
index 3a5f55f..161db58 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/GlobalConfiguration.xml
@@ -786,20 +786,20 @@
<adm:default-behavior>
<adm:defined>
<adm:value>
- milli-seconds
+ milliseconds
</adm:value>
</adm:defined>
</adm:default-behavior>
<adm:syntax>
<adm:enumeration>
- <adm:value name="milli-seconds">
+ <adm:value name="milliseconds">
<adm:synopsis>
- Use milli-second resolution.
+ Use millisecond resolution.
</adm:synopsis>
</adm:value>
- <adm:value name="nano-seconds">
+ <adm:value name="nanoseconds">
<adm:synopsis>
- Use nano-second resolution.
+ Use nanosecond resolution.
</adm:synopsis>
</adm:value>
</adm:enumeration>
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
index 8d5ca58..36a9f35 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
@@ -353,8 +353,8 @@
DirectoryServer.setWorkflowConfigurationMode(newMode);
}
- AbstractOperation.setUseNanoTime(globalConfig.getEtimeResolution() ==
- GlobalCfgDefn.EtimeResolution.NANO_SECONDS);
+ DirectoryServer.setUseNanoTime(globalConfig.getEtimeResolution() ==
+ GlobalCfgDefn.EtimeResolution.NANOSECONDS);
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
index 1c739b1..391b4b1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -572,6 +572,9 @@
// a search.
private int lookthroughLimit;
+ // Whether to use collect operation processing times in nanosecond resolution
+ private boolean useNanoTime;
+
// The key manager provider configuration manager for the Directory Server.
private KeyManagerProviderConfigManager keyManagerProviderConfigManager;
@@ -8913,6 +8916,36 @@
/**
+ * Specifies whether to collect nanosecond resolution processing times for
+ * operations.
+ *
+ * @param useNanoTime <code>true</code> if nanosecond resolution times
+ * should be collected or <code>false</code> to
+ * only collect in millisecond resolution.
+ */
+ public static void setUseNanoTime(boolean useNanoTime)
+ {
+ directoryServer.useNanoTime = useNanoTime;
+ }
+
+
+
+ /**
+ * Retrieves whether operation processing times should be collected with
+ * nanosecond resolution.
+ *
+ * @return <code>true</code> if nanosecond resolution times are collected
+ * or <code>false</code> if only millisecond resolution times are
+ * being collected.
+ */
+ public static boolean getUseNanoTime()
+ {
+ return directoryServer.useNanoTime;
+ }
+
+
+
+ /**
* Retrieves the writability mode for the Directory Server. This will only
* be applicable for user suffixes.
*
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java b/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
index 914964d..eaf4b83 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.core;
@@ -273,6 +273,14 @@
/**
* {@inheritDoc}
*/
+ public long getProcessingNanoTime()
+ {
+ return operation.getProcessingNanoTime();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public List<String> getReferralURLs()
{
return operation.getReferralURLs();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
index 927fa69..a6ff622 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -627,9 +627,8 @@
// See if the time limit has expired. If so, then don't send the entry and
// indicate that the search should end.
- if ((getTimeLimit() > 0) &&
- ((getUseNanoTime() ? TimeThread.getNanoTime() :
- TimeThread.getTime()) >= getTimeLimitExpiration()))
+ if ((getTimeLimit() > 0) && (TimeThread.getTime() >=
+ getTimeLimitExpiration()))
{
setResultCode(ResultCode.TIME_LIMIT_EXCEEDED);
appendErrorMessage(ERR_SEARCH_TIME_LIMIT_EXCEEDED.get(getTimeLimit()));
@@ -1055,9 +1054,8 @@
// See if the time limit has expired. If so, then don't send the entry and
// indicate that the search should end.
- if ((getTimeLimit() > 0) &&
- ((getUseNanoTime() ? TimeThread.getNanoTime() :
- TimeThread.getTime()) >= getTimeLimitExpiration()))
+ if ((getTimeLimit() > 0) && (TimeThread.getTime() >=
+ getTimeLimitExpiration()))
{
setResultCode(ResultCode.TIME_LIMIT_EXCEEDED);
appendErrorMessage(ERR_SEARCH_TIME_LIMIT_EXCEEDED.get(getTimeLimit()));
@@ -1625,8 +1623,8 @@
else
{
// FIXME -- Factor in the user's effective time limit.
- timeLimitExpiration = getProcessingStartTime() +
- ((getUseNanoTime() ? 1000000000L : 1000L) * timeLimit);
+ timeLimitExpiration =
+ getProcessingStartTime() + (1000L * timeLimit);
}
setTimeLimitExpiration(timeLimitExpiration);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
index 37b810e..8ba9053 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
@@ -796,7 +796,12 @@
}
buffer.append("\" etime=");
- buffer.append(bindOperation.getProcessingTime());
+ long etime = bindOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = bindOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -915,7 +920,12 @@
}
buffer.append("\" etime=");
- buffer.append(compareOperation.getProcessingTime());
+ long etime = compareOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = compareOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -1034,7 +1044,12 @@
}
buffer.append("\" etime=");
- buffer.append(deleteOperation.getProcessingTime());
+ long etime = deleteOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = deleteOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -1156,7 +1171,12 @@
}
buffer.append("\" etime=");
- buffer.append(extendedOperation.getProcessingTime());
+ long etime = extendedOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = extendedOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -1276,7 +1296,12 @@
}
buffer.append("\" etime=");
- buffer.append(modifyOperation.getProcessingTime());
+ long etime = modifyOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = modifyOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -1407,7 +1432,12 @@
}
buffer.append("\" etime=");
- buffer.append(modifyDNOperation.getProcessingTime());
+ long etime = modifyDNOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = modifyDNOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
@@ -1586,7 +1616,12 @@
}
buffer.append(" etime=");
- buffer.append(searchOperation.getProcessingTime());
+ long etime = searchOperation.getProcessingNanoTime();
+ if(etime <= -1)
+ {
+ etime = searchOperation.getProcessingTime();
+ }
+ buffer.append(etime);
writer.writeRecord(buffer.toString());
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
index 2ba15a7..bb5e65e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
@@ -30,7 +30,6 @@
import static org.opends.server.core.CoreConstants.*;
-import static org.opends.server.util.ServerConstants.*;
import java.util.ArrayList;
import java.util.HashMap;
@@ -68,12 +67,6 @@
protected static final List<Control> NO_RESPONSE_CONTROLS =
new ArrayList<Control>(0);
- /**
- * Indicates whether to use nanoTime instead of
- * currentTimeMillis when setting processing start and stop times.
- */
- protected static boolean useNanoTime = false;
-
/**
* The client connection with which this operation is associated.
@@ -97,7 +90,7 @@
/**
* Wether nanotime was used for this operation.
*/
- protected final boolean usingNanoTime;
+ protected final boolean useNanoTime;
@@ -143,12 +136,22 @@
// other copies of the data.
private boolean dontSynchronizeFlag;
- // The time that processing started on this operation.
+ // The time that processing started on this operation in
+ // milliseconds.
private long processingStartTime;
- // The time that processing ended on this operation.
+ // The time that processing ended on this operation in
+ // milliseconds.
private long processingStopTime;
+ // The time that processing started on this operation in
+ // nanoseconds.
+ private long processingStartNanoTime;
+
+ // The time that processing ended on this operation in
+ // nanoseconds.
+ private long processingStopNanoTime;
+
/**
* Creates a new operation with the provided information.
*
@@ -168,7 +171,7 @@
this.clientConnection = clientConnection;
this.operationID = operationID;
this.messageID = messageID;
- this.usingNanoTime = useNanoTime;
+ this.useNanoTime = DirectoryServer.getUseNanoTime();
if (requestControls == null)
{
@@ -1042,13 +1045,10 @@
*/
public final void setProcessingStartTime()
{
- if(usingNanoTime)
+ processingStartTime = System.currentTimeMillis();
+ if(useNanoTime)
{
- processingStartTime = System.nanoTime();
- }
- else
- {
- processingStartTime = System.currentTimeMillis();
+ processingStartNanoTime = System.nanoTime();
}
}
@@ -1075,25 +1075,22 @@
*/
public final void setProcessingStopTime()
{
- if(usingNanoTime)
+ this.processingStopTime = System.currentTimeMillis();
+ if(useNanoTime)
{
- this.processingStopTime = System.nanoTime();
- }
- else
- {
- this.processingStopTime = System.currentTimeMillis();
+ this.processingStopNanoTime = System.nanoTime();
}
}
/**
- * Retrieves the length of time in milliseconds or nanoseconds that
+ * Retrieves the length of time in milliseconds that
* the server spent processing this operation. This should not be
* called until after the server has sent the response to the
* client.
*
- * @return The length of time in milliseconds or nanoseconds that
+ * @return The length of time in milliseconds that
* the server spent processing this operation.
*/
public final long getProcessingTime()
@@ -1104,30 +1101,25 @@
/**
- * Set whether to use nanoTime for the processing time methods.
+ * Retrieves the length of time in nanoseconds that
+ * the server spent processing this operation if available.
+ * This should not be called until after the server has sent the
+ * response to the client.
*
- * @param useNanoTime <code>true</code> to use System.nanoTime
- * or <code>false</code> to use
- * System.currentTimeMillis
+ * @return The length of time in nanoseconds that the server
+ * spent processing this operation or -1 if its not
+ * available.
*/
- public static void setUseNanoTime(boolean useNanoTime)
+ public final long getProcessingNanoTime()
{
- AbstractOperation.useNanoTime = useNanoTime;
- }
-
-
-
- /**
- * Get whether this operation used System.nanoTime or
- * System.currentTimeMillis for the processing time methods.
- *
- * @return <code>true</code> if System.nanoTime is used or
- * <code>false</code> if System.currentTimeMillis
- * was used.
- */
- public final boolean getUseNanoTime()
- {
- return usingNanoTime;
+ if(useNanoTime)
+ {
+ return (processingStopNanoTime - processingStartNanoTime);
+ }
+ else
+ {
+ return -1;
+ }
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java b/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
index 6b48209..12c75e5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.types;
import org.opends.messages.Message;
@@ -512,6 +512,18 @@
public abstract long getProcessingTime();
/**
+ * Retrieves the length of time in nanoseconds that
+ * the server spent processing this operation if available.
+ * This should not be called until after the server has sent the
+ * response to the client.
+ *
+ * @return The length of time in nanoseconds that the server
+ * spent processing this operation or -1 if its not
+ * available.
+ */
+ public abstract long getProcessingNanoTime();
+
+ /**
* Indicates that processing on this operation has completed
* successfully and that the client should perform any associated
* cleanup work.
--
Gitblit v1.10.0