Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.mapdb;
  
  import org.junit.Before;
  import org.junit.Test;
  
  import java.util.Map;
 
 import static org.junit.Assert.*;

Author(s):
Jan Kotek
 
 @SuppressWarnings({ "unchecked""rawtypes" })
 public class AsyncWriteEngineTest extends TestFile{
 
     @Before public void reopenStore() throws IOException {
         assertNotNull();
         if( !=null)
            .close();
          =  new AsyncWriteEngine(new StoreDirect());
     }
 
 
     @Test(timeout = 1000000)
     public void write_fetch_update_delete() throws IOException {
         long recid = .put("aaa".);
         assertEquals("aaa".get(recid.));
         reopenStore();
         assertEquals("aaa".get(recid.));
         .update(recid"bbb".);
         assertEquals("bbb".get(recid.));
         reopenStore();
         assertEquals("bbb".get(recid.));
 
     }
 
 
     @Test(timeout = 0xFFFF)
      public void concurrent_updates_test() throws InterruptedExceptionIOException {
         final int threadNum = 16;
         final int updates = 1000;
         final CountDownLatch latch = new CountDownLatch(threadNum);
         final Map<Integer,Longrecids = new ConcurrentHashMap<IntegerLong>();
 
         for(int i = 0;i<threadNumi++){
             final int num = i;
             new Thread(new Runnable() {
                 @Override public void run() {
                     long recid = .put("START-".);
                     recids.put(numrecid);
                     for(int i = 0;i<updatesi++){
                         String str.get(recid.);
                         str +=num+",";
                         .update(recidstr.);
                     }
                     latch.countDown();
                 }
             }).start();
         }
 
         latch.await();
 
         reopenStore();
 
         assertEquals(recids.size(),threadNum);
         for(int i = 0;i<threadNumi++){
             long recid = recids.get(i);
 
             String expectedStr ="START-";
             for(int j=0;j<updates;j++)
                 expectedStr +=i+",";
 
             String v = .get(recid.);
             assertEquals(expectedStrv);
         }
     }
 
     @Test(timeout = 1000000)
     public void async_commit(){
         final AtomicLong putCounter = new AtomicLong();
         StoreWAL t = new StoreWAL(){
             @Override
             public <A> long put(A valueSerializer<A> serializer) {
                 putCounter.incrementAndGet();
                 return super.put(valueserializer);
             }
 
             @Override
             public <A> void  update(long recid, A valueSerializer<A> serializer) {
                 putCounter.incrementAndGet();
                 super.update(recidvalueserializer);
             }
 
        };
        AsyncWriteEngine a = new AsyncWriteEngine(t);
        byte[] b = new byte[124];
        long max = 100;
        ArrayList<Longl = new ArrayList<Long>();
        for(int i=0;i<max;i++){
            long recid = a.put(b.);
            l.add(recid);
        }
        //make commit just after bunch of records was added,
        // we need to test that all records made it into transaction log
        a.commit();
        assertEquals(maxputCounter.longValue() );
        assertTrue(a.writeCache.isEmpty());
        t.close();
        //now reopen db and check ths
        t = new StoreWAL();
        a = new AsyncWriteEngine(t);
        for(Integer i=0;i<max;i++){
            long recid = l.get(i);
            assertArrayEquals(b, (byte[]) a.get(recid.));
        }
    }
New to GrepCode? Check out our FAQ X