@Override public byte[] bytes() { if ( bytes == null ) bytes = L.uuidAsBytes(mostSignificantBits, leastSignificantBits) ; return bytes ; }
private static void write(String filename, long value) { try { L.writeStringAsUTF8(filename, Long.toString(value)) ; } catch (IOException ex) {} catch (NumberFormatException ex) {} }
public static void quorumServer(String confFile) { // No join. L.async(() -> QuorumPeerMain.main(new String[] {confFile}) ); }
journal.write(JournalEntryType.REDO, cid1, L.stringToByteBuffer(str1)) ; journal.write(JournalEntryType.REDO, cid2, L.stringToByteBuffer(str2)) ; journal.writeJournal(JournalEntry.COMMIT) ; journal.close(); String s1 = L.byteBufferToString(blob1) ; assertEquals(str1,s1) ; String s2 = L.byteBufferToString(blob2) ; assertEquals(str2,s2) ;
@Test public void txn_promote_thread_writer_3() { Transaction txn1 = txnMgr.begin(TxnType.READ_PROMOTE) ; boolean b = txn1.promote() ; assertTrue(b) ; AtomicReference<Transaction> ref = new AtomicReference<>(txn1) ; L.syncOtherThread(()->{ // Should fail. Transaction txn2 = txnMgr.begin(TxnType.WRITE, false) ; ref.set(txn2); }) ; assertNull(ref.get()) ; txn1.abort() ; txn1.end() ; }
@Test public void txn_coord_disable_writers_2() { txnMgr.blockWriters(); Transaction txn = L.syncCallThread(()->txnMgr.begin(TxnType.WRITE, false)) ; assertNull(txn) ; txnMgr.enableWriters(); Transaction txn2 = L.syncCallThread(()-> { Transaction txn1 = txnMgr.begin(TxnType.WRITE, false); assertNotNull(txn1); txn1.abort(); txn1.end(); return txn1; }) ; assertNotNull(txn2) ; }
@Override public String name() { if ( name == null ) name = L.uuidToString(mostSignificantBits, leastSignificantBits) ; return name ; }
/** Run synchronously but on another thread. */ public static void syncOtherThread(Runnable r) { runCallable(()->{ r.run(); return null ; }) ; }
/** Run inside a Lock */ public static <V> V callWithLock(Lock lock, Supplier<V> r) { return callWithBeforeAfter(r, ()->lock.lock(), ()->lock.unlock()) ; }
journal.write(JournalEntryType.REDO, cid1, L.stringToByteBuffer(str1)) ; journal.write(JournalEntryType.REDO, cid2, L.stringToByteBuffer(str2)) ; journal.writeJournal(JournalEntry.COMMIT) ; journal.close(); String s1 = L.byteBufferToString(blob1) ; assertEquals(str1,s1) ; String s2 = L.byteBufferToString(blob2) ; assertEquals(str2,s2) ;
@Test public void txn_promote_thread_writer_3() { Transaction txn1 = txnMgr.begin(TxnType.READ_PROMOTE) ; boolean b = txn1.promote() ; assertTrue(b) ; AtomicReference<Transaction> ref = new AtomicReference<>(txn1) ; L.syncOtherThread(()->{ // Should fail. Transaction txn2 = txnMgr.begin(TxnType.WRITE, false) ; ref.set(txn2); }) ; assertNull(ref.get()) ; txn1.abort() ; txn1.end() ; }
@Test public void txn_coord_disable_writers_2() { txnMgr.blockWriters(); Transaction txn = L.syncCallThread(()->txnMgr.begin(TxnType.WRITE, false)) ; assertNull(txn) ; txnMgr.enableWriters(); Transaction txn2 = L.syncCallThread(()-> { Transaction txn1 = txnMgr.begin(TxnType.WRITE, false); assertNotNull(txn1); txn1.abort(); txn1.end(); return txn1; }) ; assertNotNull(txn2) ; }
@Override public String name() { if ( name == null ) name = L.uuidToString(mostSignificantBits, leastSignificantBits) ; return name ; }
/** Run synchronously but on another thread. */ public static <T> T syncCallThread(Supplier<T> r) { return runCallable(() -> { T t = r.get() ; return t ; }) ; }
@Override public byte[] bytes() { if ( bytes == null ) bytes = L.uuidAsBytes(mostSignificantBits, leastSignificantBits) ; return bytes ; }
@Test public void recoverBlobFile_1() throws Exception { String str = "Hello Journal" ; ComponentId cid = ComponentId.allocLocal() ; // ComponentIdRegistry registry = new ComponentIdRegistry() ; // registry.register(cid, "Blob", 1) ; // Write out a journal. { Journal journal = Journal.create(Location.create(dir.getRoot().getAbsolutePath())) ; journal.write(JournalEntryType.REDO, cid, L.stringToByteBuffer(str)) ; journal.writeJournal(JournalEntry.COMMIT) ; journal.close(); } TransactionCoordinator coord = new TransactionCoordinator(Location.create(dir.getRoot().getAbsolutePath())) ; BufferChannel chan = BufferChannelFile.create(data) ; TransBlob tBlob = new TransBlob(cid, chan) ; coord.add(tBlob) ; coord.start(); ByteBuffer blob = tBlob.getBlob() ; assertNotNull(blob); String s = L.byteBufferToString(blob) ; assertEquals(str,s) ; coord.shutdown(); }
private static void write(String filename, long value) { try { L.writeStringAsUTF8(filename, Long.toString(value)) ; } catch (IOException ex) {} catch (NumberFormatException ex) {} }
@Test public void txn_promote_thread_writer_4() { Transaction txn1 = txnMgr.begin(TxnType.READ_PROMOTE) ; boolean b = txn1.promote() ; assertTrue(b) ; AtomicReference<Transaction> ref = new AtomicReference<>(txn1) ; L.syncOtherThread(()->{ // Should fail. Transaction txn2 = txnMgr.begin(TxnType.WRITE, false) ; ref.set(txn2); }) ; assertNull(ref.get()) ; txn1.abort() ; txn1.end() ; L.syncOtherThread(()->{ // Should suceed Transaction txn2 = txnMgr.begin(TxnType.WRITE, false) ; ref.set(txn2); txn2.abort() ; txn2.end() ; }) ; assertNotNull(ref.get()) ; checkClear() ; }
@Test public void txn_coord_disable_writers_3() { txnMgr.blockWriters(); Transaction txn = L.syncCallThread(() -> { Transaction tx = txnMgr.begin(TxnType.READ, false); tx.end(); return tx; }); assertNotNull(txn) ; txnMgr.enableWriters(); Transaction txn1 = L.syncCallThread(() -> { Transaction tx = txnMgr.begin(TxnType.WRITE, false); tx.commit(); tx.end(); return tx; }); assertNotNull(txn1); Transaction txn2 = L.syncCallThread(() -> { Transaction tx = txnMgr.begin(TxnType.READ, false); tx.end(); return tx; }); assertNotNull(txn2); }
/** A UUID string to bytes */ public static byte[] uuidAsBytes(String str) { return uuidAsBytes(UUID.fromString(str)) ; }