From 47be44124da7f6ad42bed03a24701ca07c00918d Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Wed, 12 Sep 2007 00:03:02 +0000
Subject: [PATCH] Make a couple of changes to help improve server performance:
---
opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java | 51 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java b/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
index ea61eee..c40f42f 100644
--- a/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
+++ b/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
@@ -25,16 +25,20 @@
* Portions Copyright 2006-2007 Sun Microsystems, Inc.
*/
package org.opends.server.loggers;
-import org.opends.messages.Message;
+
+
+import java.util.ArrayList;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.opends.messages.Message;
import org.opends.server.api.DirectoryThread;
import org.opends.server.api.ServerShutdownListener;
import org.opends.server.core.DirectoryServer;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* A Text Writer which writes log records asynchronously to
@@ -51,6 +55,9 @@
/** Queue to store unpublished records. */
private final LinkedBlockingQueue<String> queue;
+ /** The capacity for the queue. */
+ private final int capacity;
+
private String name;
private AtomicBoolean stopRequested;
private WriterThread writerThread;
@@ -74,6 +81,7 @@
this.writer = writer;
this.queue = new LinkedBlockingQueue<String>(capacity);
+ this.capacity = capacity;
this.writerThread = null;
this.stopRequested = new AtomicBoolean(false);
@@ -99,21 +107,40 @@
*/
public void run()
{
+ ArrayList<String> drainList = new ArrayList<String>(capacity);
+
String message = null;
while (!stopRequested.get() || !queue.isEmpty()) {
try
{
- message = queue.poll(10, TimeUnit.SECONDS);
- if(message != null)
+ queue.drainTo(drainList, capacity);
+ if (drainList.isEmpty())
{
- do
+ message = queue.poll(10, TimeUnit.SECONDS);
+ if(message != null)
{
- writer.writeRecord(message);
- message = queue.poll();
- }
- while(message != null);
+ do
+ {
+ writer.writeRecord(message);
+ message = queue.poll();
+ }
+ while(message != null);
- if(autoFlush)
+ if(autoFlush)
+ {
+ flush();
+ }
+ }
+ }
+ else
+ {
+ for (String record : drainList)
+ {
+ writer.writeRecord(record);
+ }
+ drainList.clear();
+
+ if (autoFlush)
{
flush();
}
--
Gitblit v1.10.0