static { ImmutableMap.Builder<Integer, DRRecordType> b = ImmutableMap.builder(); for (DRRecordType t : DRRecordType.values()) { b.put(t.ordinal(), t); } conversion = b.build(); }
public static synchronized void pushDRBuffer(int partitionId, ByteBuffer buf) { if (logDebug) { System.out.println("Received DR buffer size " + buf.remaining()); AtomicLong haveOpenTransaction = haveOpenTransactionLocal.get(); buf.order(ByteOrder.LITTLE_ENDIAN); // Magic header space for Java for implementing zero copy stuff buf.position(8); while (buf.hasRemaining()) { int startPosition = buf.position(); byte version = buf.get(); int type = buf.get(); int checksum = 0; if (version != 0) System.out.println("Remaining is " + buf.remaining()); switch (DRRecordType.valueOf(type)) { case INSERT: { // Insert if (haveOpenTransaction.get() == -1) { System.out.println("Have insert but no open transaction"); System.exit(-1); } final long tableHandle = buf.getLong(); final int lengthPrefix = buf.getInt(); buf.position(buf.position() + lengthPrefix); checksum = buf.getInt(); System.out.println( "Version " + version + " type INSERT table handle " + tableHandle + " length " + lengthPrefix + " checksum " + checksum); break; } case DELETE: { // Delete if (haveOpenTransaction.get() == -1) { System.out.println("Have insert but no open transaction"); System.exit(-1); } final long tableHandle = buf.getLong(); final int lengthPrefix = buf.getInt(); buf.position(buf.position() + lengthPrefix); checksum = buf.getInt(); System.out.println( "Version " + version + " type DELETE table handle " + tableHandle + " length " + lengthPrefix + " checksum " + checksum); break; } case UPDATE: // Update // System.out.println("Version " + version + " type UPDATE " + checksum " + checksum); break; case BEGIN_TXN: { // Begin txn final long txnId = buf.getLong(); final long spHandle = buf.getLong(); if (haveOpenTransaction.get() != -1) { System.out.println( "Have open transaction txnid " + txnId + " spHandle " + spHandle + " but already open transaction"); System.exit(-1); } haveOpenTransaction.set(spHandle); checksum = buf.getInt(); System.out.println( "Version " + version + " type BEGIN_TXN " + " txnid " + txnId + " spHandle " + spHandle + " checksum " + checksum); break; } case END_TXN: { // End txn final long spHandle = buf.getLong(); if (haveOpenTransaction.get() == -1) { System.out.println( "Have end transaction spHandle " + spHandle + " but no open transaction and its less then last committed " + lastCommittedSpHandle.get().get()); // checksum = buf.getInt(); // break; System.exit(-1); } haveOpenTransaction.set(-1); lastCommittedSpHandle.get().set(spHandle); checksum = buf.getInt(); System.out.println( "Version " + version + " type END_TXN " + " spHandle " + spHandle + " checksum " + checksum); break; } } int calculatedChecksum = DBBPool.getBufferCRC32C(buf, startPosition, buf.position() - startPosition - 4); if (calculatedChecksum != checksum) { System.out.println("Checksum " + calculatedChecksum + " didn't match " + checksum); System.exit(-1); } } } final BBContainer cont = DBBPool.wrapBB(buf); DBBPool.registerUnsafeMemory(cont.address()); cont.discard(); }