Package org.hornetq.core.asyncio.impl

Examples of org.hornetq.core.asyncio.impl.AsynchronousFileImpl$CallbackHolder


   }

   private void executeTest(final boolean sync) throws Throwable
   {
      MultiThreadAsynchronousFileTest.debug(sync ? "Sync test:" : "Async test");
      AsynchronousFileImpl jlibAIO = new AsynchronousFileImpl(executor, pollerExecutor);
      jlibAIO.open(FILE_NAME, 21000);
      try
      {
         MultiThreadAsynchronousFileTest.debug("Preallocating file");

         jlibAIO.fill(0l,
                      MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS,
                      MultiThreadAsynchronousFileTest.SIZE * MultiThreadAsynchronousFileTest.NUMBER_OF_LINES,
                      (byte)0);
         MultiThreadAsynchronousFileTest.debug("Done Preallocating file");

         CountDownLatch latchStart = new CountDownLatch(MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS + 1);

         ArrayList<ThreadProducer> list = new ArrayList<ThreadProducer>(MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS);
         for (int i = 0; i < MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS; i++)
         {
            ThreadProducer producer = new ThreadProducer("Thread " + i, latchStart, jlibAIO, sync);
            list.add(producer);
            producer.start();
         }

         latchStart.countDown();
         latchStart.await();

         long startTime = System.currentTimeMillis();

         for (ThreadProducer producer : list)
         {
            producer.join();
            if (producer.failed != null)
            {
               throw producer.failed;
            }
         }
         long endTime = System.currentTimeMillis();

         MultiThreadAsynchronousFileTest.debug((sync ? "Sync result:" : "Async result:") + " Records/Second = " +
                                               MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS *
                                               MultiThreadAsynchronousFileTest.NUMBER_OF_LINES *
                                               1000 /
                                               (endTime - startTime) +
                                               " total time = " +
                                               (endTime - startTime) +
                                               " total number of records = " +
                                               MultiThreadAsynchronousFileTest.NUMBER_OF_THREADS *
                                               MultiThreadAsynchronousFileTest.NUMBER_OF_LINES);
      }
      finally
      {
         jlibAIO.close();
      }

   }
View Full Code Here


    * Opening and closing a file immediately can lead to races on the native layer,
    * creating crash conditions.
    * */
   public void testOpenClose() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      for (int i = 0; i < 1000; i++)
      {
         controller.open(FILE_NAME, 10000);
         controller.close();

View Full Code Here

      }
   }

   public void testReleaseBuffers() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      WeakReference<ByteBuffer> bufferCheck = null;

      controller.open(FILE_NAME, 10000);
      bufferCheck = new WeakReference<ByteBuffer>(controller.getHandler());
      controller.fill(0, 10, 1024, (byte)0);
View Full Code Here

      Assert.assertNull(bufferCheck.get());
   }

   public void testFileNonExistent() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      for (int i = 0; i < 1000; i++)
      {
         try
         {
            controller.open("/non-existent/IDontExist.error", 10000);
View Full Code Here

    * simultaneous files without loose any callbacks. This test made the native
    * layer to crash at some point during development
    */
   public void testTwoFiles() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      final AsynchronousFileImpl controller2 = new AsynchronousFileImpl(executor, pollerExecutor);
      controller.open(FILE_NAME + ".1", 10000);
      controller2.open(FILE_NAME + ".2", 10000);

      int numberOfLines = 1000;
      int size = 1024;

      ArrayList<Integer> listResult1 = new ArrayList<Integer>();
      ArrayList<Integer> listResult2 = new ArrayList<Integer>();

      AtomicInteger errors = new AtomicInteger(0);


      try
      {
         CountDownLatch latchDone = new CountDownLatch(numberOfLines);
         CountDownLatch latchDone2 = new CountDownLatch(numberOfLines);

         buffer = AsynchronousFileImpl.newBuffer(size);
         encodeBufer(buffer);

         preAlloc(controller, numberOfLines * size);
         preAlloc(controller2, numberOfLines * size);

         ArrayList<CountDownCallback> list = new ArrayList<CountDownCallback>();
         ArrayList<CountDownCallback> list2 = new ArrayList<CountDownCallback>();

         for (int i = 0; i < numberOfLines; i++)
         {
            list.add(new CountDownCallback(latchDone, errors, listResult1, i));
            list2.add(new CountDownCallback(latchDone2, errors, listResult2, i));
         }

         int counter = 0;

         Iterator<CountDownCallback> iter2 = list2.iterator();

         for (CountDownCallback cb1 : list)
         {
            CountDownCallback cb2 = iter2.next();

            controller.write(counter * size, size, buffer, cb1);
            controller2.write(counter * size, size, buffer, cb2);
            ++counter;

         }

         latchDone.await();
         latchDone2.await();

         CountDownCallback.checkResults(numberOfLines, listResult1);
         CountDownCallback.checkResults(numberOfLines, listResult2);

         for (CountDownCallback callback : list)
         {
            Assert.assertEquals(1, callback.timesDoneCalled.get());
            Assert.assertTrue(callback.doneCalled);
         }

         for (CountDownCallback callback : list2)
         {
            Assert.assertEquals(1, callback.timesDoneCalled.get());
            Assert.assertTrue(callback.doneCalled);
         }

         Assert.assertEquals(0, errors.get());

         controller.close();
      }
      finally
      {
         try
         {
            controller2.close();
         }
         catch (Exception ignored)
         {
         }
      }
View Full Code Here

      }
   }

   public void testInvalidReads() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);

      final int SIZE = 512;

      controller.open(FILE_NAME, 10);
      controller.close();

      controller = new AsynchronousFileImpl(executor, pollerExecutor);

      controller.open(FILE_NAME, 10);

      controller.fill(0, 1, 512, (byte)'j');
View Full Code Here

      }
   }

   public void testBufferCallbackUniqueBuffers() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      final int NUMBER_LINES = 1000;
      final int SIZE = 512;

      controller.open(FILE_NAME, 1000);
View Full Code Here

   }

   public void testBufferCallbackAwaysSameBuffer() throws Exception
   {

      controller = new AsynchronousFileImpl(executor, pollerExecutor);

      final int NUMBER_LINES = 1000;
      final int SIZE = 512;

      controller.open(FILE_NAME, 1000);
View Full Code Here

      buffers.clear();
   }

   public void testRead() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      controller.setBufferCallback(new BufferCallback()
      {

         public void bufferDone(final ByteBuffer buffer)
         {
View Full Code Here

    *  This test will call file.close() when there are still callbacks being processed.
    *  This could cause a crash or callbacks missing and this test is validating both situations.
    *  The file is also read after being written to validate its correctness */
   public void testConcurrentClose() throws Exception
   {
      controller = new AsynchronousFileImpl(executor, pollerExecutor);
      final int NUMBER_LINES = 1000;
      CountDownLatch readLatch = new CountDownLatch(NUMBER_LINES);
      final int SIZE = 1024;

      controller.open(FILE_NAME, 10000);
View Full Code Here

TOP

Related Classes of org.hornetq.core.asyncio.impl.AsynchronousFileImpl$CallbackHolder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.