Package com.linkedin.databus.core.util.RangeBasedReaderWriterLock

Examples of com.linkedin.databus.core.util.RangeBasedReaderWriterLock.LockToken


    RangeBasedReaderWriterLock.LOG.setLevel(Level.FATAL);
    long startTime = System.nanoTime();
    int numOperations = 1000000;
    for (int i=numOperations -1; i > 0; --i)
    {
      LockToken token = lockProvider.acquireReaderLock(i, numOperations,_parser, "lock" + i);
      long minStart = lockProvider.getReaderRanges().peek()._id.start;
      lockProvider.acquireWriterLock(0, minStart,_parser);
      lockProvider.releaseWriterLock(_parser);
      if (minStart != i)
      {
        Assert.fail("i should always be equal to minStart");
      }
      //assertEquals(i, minStart);
      while (!checkedOutLockTokens.offer(token))
      {
        for (int j = 0; j < 5; ++j)
        {
          LockToken releaseToken = checkedOutLockTokens.poll();
          lockProvider.releaseReaderLock(releaseToken);
        }
      }

    }
View Full Code Here


  @Override
  public void run()
  {
    _stopRunning.set(!_enabled);
    LockToken readRangeLock = null;

    // Init : delete existing files in this directory first
    // We don't do this as part of the constructor since we want the EventLogReader
    // to be able to read files if they are present.
    if (_writeSessionDir.exists())
View Full Code Here

  private void queueWriteRequest()
  {
    // non-contiguous write
    // signal write ready
    LockToken readRangeLockToken = null;
    try
    {
      readRangeLockToken = _lockProvider.acquireReaderLock(_batchStartOffset, _batchNextOffset,
                                      _eventBuffer.getBufferPositionParser(),
                                      "EventLogWriter.queueWriteRequest");
View Full Code Here

  }


  private void flush()
  {
    LockToken readToken;
    while ((readToken = _contiguousRanges.poll()) != null)
    {
      try
      {
        performWrite(readToken);
      }
      catch (IOException e)
      {
        LOG.error("unable to flush" + e.getMessage(), e);
        _stopRunning.set(true);
      }
      finally
      {
        _lockProvider.releaseReaderLock(readToken);
      }
    }
    if (_batchState == BatchState.STARTED)
    {
      LockToken readRangeLockToken = null;
      try
      {
        readRangeLockToken = _lockProvider.acquireReaderLock(_batchStartOffset, _batchNextOffset,
                                                             _eventBuffer.getBufferPositionParser(),
                                                             "EventLogWriter.flush");
View Full Code Here

  }

  @Test
  public void testAcquireReaderLock() throws Exception {
    RangeBasedReaderWriterLock lock = new RangeBasedReaderWriterLock();
    LockToken token = lock.acquireReaderLock(10, 200,_parser, "testAcquireReaderLock");
    AssertJUnit.assertEquals(10, token._id.start);
    AssertJUnit.assertEquals(200, token._id.end);

  }
View Full Code Here

     {
       /*
          * When Readers with same GenIds present
          */
         LockToken token1 = lock.acquireReaderLock(_parser.setGenId(1000, 1),
                                                   _parser.setGenId(20000, 1),
                                                   _parser,
                                                   "testAcquireWriterLock1");
         LockToken token2 = lock.acquireReaderLock(_parser.setGenId(1000,1),
                                                   _parser.setGenId(20000,1),
                                                   _parser,
                                                   "testAcquireWriterLock2");
         LockToken token3 = lock.acquireReaderLock(_parser.setGenId(10000,1),
                                                   _parser.setGenId(20000,1),
                                                   _parser,
                                                   "testAcquireWriterLock3");

         Runnable writer = new Runnable() {
           @Override
          public void run()
           {
             try
            {
              lock.acquireWriterLock(_parser.setGenId(0,1), _parser.setGenId(1001,1), _parser);
            }
            catch (InterruptedException e)
            {
              log.error(e);
            }
            catch (TimeoutException e)
            {
              log.error(e);
            }
           }
         };

         Thread writerThread = new Thread(writer);
         writerThread.start();

         try
         {
           Thread.sleep(100);
         } catch ( InterruptedException ie) { throw new RuntimeException(ie); }

         AssertJUnit.assertTrue(lock.isWriterWaiting());
         AssertJUnit.assertFalse(lock.isWriterIn());
         lock.releaseReaderLock(token1);

         try
         {
           Thread.sleep(100);
         } catch ( InterruptedException ie) { throw new RuntimeException(ie); }
         AssertJUnit.assertTrue(lock.isWriterWaiting());
         AssertJUnit.assertFalse(lock.isWriterIn());
         lock.releaseReaderLock(token2);

         try
         {
           writerThread.join(1000);
         } catch (InterruptedException ie) {throw new RuntimeException(ie); }

         AssertJUnit.assertTrue(lock.isWriterIn());
         AssertJUnit.assertFalse(lock.isWriterWaiting());
         AssertJUnit.assertFalse(writerThread.isAlive());
         lock.releaseReaderLock(token3);
         lock.releaseWriterLock(_parser);
     }


     {
       /*
        * When Readers with different GenIds present
        */
       LockToken token1 = lock.acquireReaderLock(_parser.setGenId(10, 1),
                                                 _parser.setGenId(200, 1),
                                                 _parser,
                                                 "testAcquireWriterLock4");
       LockToken token2 = lock.acquireReaderLock(_parser.setGenId(10,1),
                                                 _parser.setGenId(2000,1),
                                                 _parser,
                                                 "testAcquireWriterLock5");
       LockToken token3 = lock.acquireReaderLock(2000, 3000, _parser, "testAcquireWriterLock6");

       Runnable writer = new Runnable() {
         @Override
        public void run()
         {
View Full Code Here

  }

  @Test
  public void testShiftReaderLock() throws Exception {
    RangeBasedReaderWriterLock lock = new RangeBasedReaderWriterLock();
    LockToken token = lock.acquireReaderLock(10, 200,_parser, "testShiftReaderLock");
    lock.shiftReaderLockStart(token, 50,_parser);
    AssertJUnit.assertEquals(50, token._id.start);
    AssertJUnit.assertEquals(200, token._id.end);
    lock.acquireWriterLock(0, 40,_parser);
    lock.releaseWriterLock(_parser);
View Full Code Here

TOP

Related Classes of com.linkedin.databus.core.util.RangeBasedReaderWriterLock.LockToken

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.