directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From blorit...@apache.org
Subject svn commit: r111393 - in incubator/directory/seda/branches/berin_api_proposal/src: java/org/apache/directory/seda java/org/apache/directory/seda/bufferpool java/org/apache/directory/seda/input java/org/apache/directory/seda/output test/org/apache/directory/seda/bufferpool/test test/org/apache/directory/seda/output/test test/org/apache/directory/seda/test
Date Thu, 09 Dec 2004 15:35:27 GMT
Author: bloritsch
Date: Thu Dec  9 07:35:24 2004
New Revision: 111393

URL: http://svn.apache.org/viewcvs?view=rev&rev=111393
Log:
Test BufferPool, using WeakReferences for bad clients who forget to clean up after themselves.
 Also add
the read buffer to the ReaderSource.  Lastly, change WriterSink to WriterStage
Added:
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/bufferpool/BufferPool.java
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterStage.java
      - copied, changed from r111384, incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java
   incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/bufferpool/test/TestBufferPool.java
   incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/output/test/TestWriterStage.java
Removed:
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java
Modified:
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java
   incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java
   incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java

Modified: incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java?view=diff&rev=111393&p1=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java&r1=111392&p2=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java&r2=111393
==============================================================================
--- incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java
(original)
+++ incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/NetworkEvent.java
Thu Dec  9 07:35:24 2004
@@ -19,6 +19,7 @@
 import java.net.Socket;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.SocketChannel;
+import java.nio.ByteBuffer;
 
 /**
  * Created by IntelliJ IDEA. User: berin Date: Dec 2, 2004 Time: 9:44:03
@@ -28,6 +29,7 @@
 {
     private final Socket m_socket;
     private final SocketChannel m_channel;
+    private ByteBuffer m_buffer;
 
     public NetworkEvent(final SelectionKey key)
     {
@@ -48,5 +50,15 @@
     public SocketChannel channel()
     {
         return m_channel;
+    }
+
+    public void setBuffer( final ByteBuffer buffer )
+    {
+        m_buffer = buffer;
+    }
+
+    public ByteBuffer getBuffer()
+    {
+        return m_buffer;
     }
 }

Modified: incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java?view=diff&rev=111393&p1=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java&r1=111392&p2=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java&r2=111393
==============================================================================
--- incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java
(original)
+++ incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/SEDAServer.java
Thu Dec  9 07:35:24 2004
@@ -18,7 +18,7 @@
 
 import org.apache.directory.seda.input.Firewall;
 import org.apache.directory.seda.input.ReaderSource;
-import org.apache.directory.seda.output.WriterSink;
+import org.apache.directory.seda.output.WriterStage;
 
 import java.nio.channels.SocketChannel;
 import java.io.IOException;
@@ -33,13 +33,13 @@
     private static SEDAServer m_server;
     private final Firewall m_firewall;
     private final ReaderSource m_reader;
-    private final WriterSink m_writer;
+    private final WriterStage m_writer;
 
     private SEDAServer() throws IOException
     {
         m_firewall = new Firewall();
         m_reader = new ReaderSource();
-        m_writer = new WriterSink();
+        m_writer = new WriterStage();
     }
 
     public static SEDAServer getServer() throws IOException

Added: incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/bufferpool/BufferPool.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/bufferpool/BufferPool.java?view=auto&rev=111393
==============================================================================
--- (empty file)
+++ incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/bufferpool/BufferPool.java
Thu Dec  9 07:35:24 2004
@@ -0,0 +1,77 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.directory.seda.bufferpool;
+
+import java.nio.ByteBuffer;
+import java.util.LinkedList;
+import java.lang.ref.WeakReference;
+
+/**
+ * Created by IntelliJ IDEA. User: berin Date: Dec 9, 2004 Time: 9:45:15
+ * AM To change this template use File | Settings | File Templates.
+ */
+public class BufferPool
+{
+    private static final int KILOBYTE = 1024;
+    private static int m_usedBuffers;
+    private static final LinkedList m_reserveBuffers = new LinkedList();
+
+    public static ByteBuffer getBuffer()
+    {
+        ByteBuffer buffer = null;
+        while (null == buffer && m_reserveBuffers.size() > 0)
+        {
+            final WeakReference ref = (WeakReference)m_reserveBuffers.removeFirst();
+            buffer = (ByteBuffer)ref.get();
+        }
+
+        buffer = createBuffer();
+        m_usedBuffers++;
+
+        return buffer;
+    }
+
+    private static ByteBuffer createBuffer()
+    {
+        final ByteBuffer buffer = ByteBuffer.allocateDirect( KILOBYTE );
+        return buffer;
+    }
+
+    public static int buffersInUse()
+    {
+        return m_usedBuffers;
+    }
+
+    public static void putBuffer( final ByteBuffer buffer )
+    {
+        m_usedBuffers--;
+        assert buffer.isDirect();
+        assert KILOBYTE == buffer.capacity();
+        m_reserveBuffers.add( new WeakReference(buffer) );
+    }
+
+    public static int buffersInReserve()
+    {
+        return m_reserveBuffers.size();
+    }
+
+    public static void reset()
+    {
+        m_usedBuffers = 0;
+        m_reserveBuffers.clear();
+    }
+}

Modified: incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java?view=diff&rev=111393&p1=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java&r1=111392&p2=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java&r2=111393
==============================================================================
--- incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java
(original)
+++ incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/input/ReaderSource.java
Thu Dec  9 07:35:24 2004
@@ -18,10 +18,12 @@
 
 import org.d_haven.event.Source;
 import org.apache.directory.seda.NetworkEvent;
+import org.apache.directory.seda.bufferpool.BufferPool;
 
 import java.nio.channels.SocketChannel;
 import java.nio.channels.Selector;
 import java.nio.channels.SelectionKey;
+import java.nio.ByteBuffer;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -59,8 +61,13 @@
             while (it.hasNext() && keys.size() < elements)
             {
                 final SelectionKey key = (SelectionKey)it.next();
-                keys.add( new NetworkEvent(key) );
+                final NetworkEvent event = new NetworkEvent(key);
+                keys.add( event );
                 it.remove();
+
+                final ByteBuffer buffer = BufferPool.getBuffer();
+                event.channel().read( buffer );
+                event.setBuffer( buffer );
             }
         }
         catch(Exception e)

Deleted: /incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java?view=auto&rev=111392
==============================================================================

Copied: incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterStage.java
(from r111384, incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java)
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterStage.java?view=diff&rev=111393&p1=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java&r1=111384&p2=incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterStage.java&r2=111393
==============================================================================
--- incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterSink.java
(original)
+++ incubator/directory/seda/branches/berin_api_proposal/src/java/org/apache/directory/seda/output/WriterStage.java
Thu Dec  9 07:35:24 2004
@@ -20,6 +20,7 @@
 import org.d_haven.event.Sink;
 import org.d_haven.event.SinkException;
 import org.d_haven.event.PreparedEnqueue;
+import org.apache.directory.seda.Stage;
 
 import java.nio.channels.SocketChannel;
 import java.nio.channels.Selector;
@@ -32,73 +33,13 @@
  * Created by IntelliJ IDEA. User: berin Date: Dec 8, 2004 Time: 8:29:38
  * AM To change this template use File | Settings | File Templates.
  */
-public class WriterSink implements Sink
+public class WriterStage extends Stage
 {
     private Selector m_selector;
-    private long m_timeout;
 
-    public WriterSink() throws IOException
+    public WriterStage() throws IOException
     {
         m_selector = Selector.open();
-        m_timeout = 1L;
-    }
-
-    private Object[] getPending(final int number)
-    {
-        final ArrayList keys = new ArrayList();
-        try
-        {
-            final int numPending = m_selector.select( m_timeout );
-            final int elements = Math.min( numPending, number );
-            keys.ensureCapacity( elements );
-
-            final Iterator it = m_selector.selectedKeys().iterator();
-            while (it.hasNext() && keys.size() < elements)
-            {
-                keys.add( (it.next() ) );
-                it.remove();
-            }
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-        }
-
-        return keys.toArray();
-    }
-
-    public void enqueue( Object o ) throws SinkException
-    {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void enqueue( Object[] objects ) throws SinkException
-    {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public boolean tryEnqueue( Object o )
-    {
-        return false;  //To change body of implemented methods use File | Settings | File
Templates.
-    }
-
-    public PreparedEnqueue prepareEnqueue( Object[] objects )
-            throws SinkException
-    {
-        return null;  //To change body of implemented methods use File | Settings | File
Templates.
-    }
-
-    public int size()
-    {
-        try
-        {
-            return m_selector.select( m_timeout );
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-            return 0;
-        }
     }
 
     public void connect( final SocketChannel client ) throws IOException

Added: incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/bufferpool/test/TestBufferPool.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/bufferpool/test/TestBufferPool.java?view=auto&rev=111393
==============================================================================
--- (empty file)
+++ incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/bufferpool/test/TestBufferPool.java
Thu Dec  9 07:35:24 2004
@@ -0,0 +1,85 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.directory.seda.bufferpool.test;
+
+import junit.framework.TestCase;
+
+import java.nio.ByteBuffer;
+
+import org.apache.directory.seda.bufferpool.BufferPool;
+
+/**
+ * Created by IntelliJ IDEA. User: berin Date: Dec 9, 2004 Time: 9:40:14
+ * AM To change this template use File | Settings | File Templates.
+ */
+public class TestBufferPool extends TestCase
+{
+    private static final int KB = 1024;
+
+    public TestBufferPool(final String name)
+    {
+        super(name);
+    }
+
+    public void tearDown() throws Exception
+    {
+        super.tearDown();
+
+        BufferPool.reset();
+    }
+
+    public void testGetBuffer()
+    {
+        final ByteBuffer buffer = BufferPool.getBuffer();
+
+        assertNotNull(buffer);
+        assertEquals(KB, buffer.capacity());
+        assertTrue( buffer.isDirect() );
+        assertEquals( 1, BufferPool.buffersInUse() );
+
+        BufferPool.putBuffer(buffer);
+    }
+
+    public void testPutBuffer()
+    {
+        final ByteBuffer buffer = BufferPool.getBuffer();
+        assertEquals( 1, BufferPool.buffersInUse() );
+        assertEquals( 0, BufferPool.buffersInReserve() );
+
+        BufferPool.putBuffer(buffer);
+        assertEquals( 0, BufferPool.buffersInUse() );
+        assertEquals( 1, BufferPool.buffersInReserve() );
+    }
+
+    public void testBuffersInReserve()
+    {
+        assertEquals( 0, BufferPool.buffersInReserve() );
+
+        final ByteBuffer buffer1 = BufferPool.getBuffer();
+        BufferPool.putBuffer( buffer1 );
+
+        assertEquals( 1, BufferPool.buffersInReserve() );
+
+        final ByteBuffer buffer2 = BufferPool.getBuffer();
+
+        assertEquals( 0, BufferPool.buffersInReserve() );
+
+        BufferPool.putBuffer( buffer2 );
+
+        assertEquals( 1, BufferPool.buffersInReserve() );
+    }
+}

Added: incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/output/test/TestWriterStage.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/output/test/TestWriterStage.java?view=auto&rev=111393
==============================================================================
--- (empty file)
+++ incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/output/test/TestWriterStage.java
Thu Dec  9 07:35:24 2004
@@ -0,0 +1,26 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.directory.seda.output.test;
+
+/**
+ * Created by IntelliJ IDEA. User: berin Date: Dec 9, 2004 Time:
+ * 10:33:51 AM To change this template use File | Settings | File
+ * Templates.
+ */
+public class TestWriterStage
+{
+}

Modified: incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java
Url: http://svn.apache.org/viewcvs/incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java?view=diff&rev=111393&p1=incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java&r1=111392&p2=incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java&r2=111393
==============================================================================
--- incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java
(original)
+++ incubator/directory/seda/branches/berin_api_proposal/src/test/org/apache/directory/seda/test/TestNetworkEvent.java
Thu Dec  9 07:35:24 2004
@@ -97,4 +97,14 @@
         assertEquals(m_clientChannel.socket(), event.socket() );
         assertEquals(m_clientChannel, event.channel() );
     }
+
+    public void testSetBuffer() throws IOException
+    {
+        final NetworkEvent event = new NetworkEvent(m_clientChannel);
+
+        final ByteBuffer buffer = ByteBuffer.allocate( 1 );
+        event.setBuffer( buffer );
+
+        assertEquals( buffer, event.getBuffer() );
+    }
 }

Mime
View raw message