public void testEntryData()
throws Throwable {
try {
ByteBuffer buffer = ByteBuffer.allocate(1000);
database = new DatabaseImpl("foo", new DatabaseId(1),
env, new DatabaseConfig());
/*
* For each loggable object, can we write the entry data out?
*/
/*
* Tracer records.
*/
Tracer dMsg = new Tracer("Hello there");
writeAndRead(buffer, dMsg, new Tracer());
/*
* LNs
*/
String data = "abcdef";
LN ln = new LN(data.getBytes());
LN lnFromLog = new LN();
writeAndRead(buffer, ln, lnFromLog);
lnFromLog.verify(null);
assertTrue(ln.marshallOutsideWriteLatch());
FileSummaryLN fsLN = new FileSummaryLN(new FileSummary());
FileSummaryLN fsLNFromLog = new FileSummaryLN();
writeAndRead(buffer, fsLN, fsLNFromLog);
assertFalse(fsLN.marshallOutsideWriteLatch());
/*
* INs
*/
IN in = new IN(database,
new byte[] {1,0,1,0},
7, 5);
in.insertEntry(new ChildReference(null,
new byte[] {1,0,1,0},
DbLsn.makeLsn(12, 200)));
in.insertEntry(new ChildReference(null,
new byte[] {1,1,1,0},
DbLsn.makeLsn(29, 300)));
in.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(35, 400)));
/* Write it. */
IN inFromLog = new IN();
writeAndRead(buffer, in, inFromLog);
/*
* IN - long form
*/
in = new IN(database,
new byte[] {1,0,1,0},
7, 5);
in.insertEntry(new ChildReference(null,
new byte[] {1,0,1,0},
DbLsn.makeLsn(12, 200)));
in.insertEntry(new ChildReference(null,
new byte[] {1,1,1,0},
DbLsn.makeLsn(29, 300)));
in.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(1235, 400)));
in.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(0xFFFFFFF0L, 400)));
/* Write it. */
inFromLog = new IN();
writeAndRead(buffer, in, inFromLog);
/*
* BINs
*/
BIN bin = new BIN(database,
new byte[] {3,2,1},
8, 5);
bin.latch();
bin.insertEntry(new ChildReference(null,
new byte[] {1,0,1,0},
DbLsn.makeLsn(212, 200)));
bin.insertEntry(new ChildReference(null,
new byte[] {1,1,1,0},
DbLsn.makeLsn(229, 300)));
bin.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(235, 400)));
BIN binFromLog = new BIN();
writeAndRead(buffer, bin, binFromLog);
binFromLog.verify(null);
bin.releaseLatch();
/*
* DINs
*/
DIN din = new DIN(database,
new byte[] {1,0,0,1},
7,
new byte[] {0,1,1,0},
new ChildReference(null,
new byte[] {1,0,0,1},
DbLsn.makeLsn(10, 100)),
5);
din.insertEntry(new ChildReference(null,
new byte[] {1,0,1,0},
DbLsn.makeLsn(12, 200)));
din.insertEntry(new ChildReference(null,
new byte[] {1,1,1,0},
DbLsn.makeLsn(29, 300)));
din.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(35, 400)));
/* Write it. */
DIN dinFromLog = new DIN();
writeAndRead(buffer, din, dinFromLog);
/*
* DBINs
*/
DBIN dbin = new DBIN(database,
new byte[] {3,2,1},
8,
new byte[] {1,2,3},
5);
dbin.latch();
dbin.insertEntry(new ChildReference(null,
new byte[] {1,0,1,0},
DbLsn.makeLsn(212, 200)));
dbin.insertEntry(new ChildReference(null,
new byte[] {1,1,1,0},
DbLsn.makeLsn(229, 300)));
dbin.insertEntry(new ChildReference(null,
new byte[] {0,0,1,0},
DbLsn.makeLsn(235, 400)));
DBIN dbinFromLog = new DBIN();
writeAndRead(buffer, dbin, dbinFromLog);
dbinFromLog.verify(null);
dbin.releaseLatch();
/*
* Root
*/
DbTree dbTree = new DbTree(env);
DbTree dbTreeFromLog = new DbTree();
writeAndRead(buffer, dbTree, dbTreeFromLog);
/*
* MapLN
*/
MapLN mapLn = new MapLN(database);
MapLN mapLnFromLog = new MapLN();
writeAndRead(buffer, mapLn, mapLnFromLog);
/*
* UserTxn
*/
/*
* Disabled for now because these txns don't compare equal,
* because one has a name of "main" and the other has a name of
* null because it was read from the log.
Txn txn = new Txn(env, new TransactionConfig());
Txn txnFromLog = new Txn();
writeAndRead(buffer, txn, txnFromLog);
txn.commit();
*/
/*
* TxnCommit
*/
TxnCommit commit = new TxnCommit(111, DbLsn.makeLsn(10, 10));
TxnCommit commitFromLog = new TxnCommit();
writeAndRead(buffer, commit, commitFromLog);
/*
* TxnAbort
*/
TxnAbort abort = new TxnAbort(111, DbLsn.makeLsn(11, 11));
TxnAbort abortFromLog = new TxnAbort();
writeAndRead(buffer, abort, abortFromLog);
/*
* TxnPrepare
*/
byte[] gid = new byte[64];
byte[] bqual = new byte[64];
TxnPrepare prepare =
new TxnPrepare(111, new LogUtils.XidImpl(1, gid, bqual));
TxnPrepare prepareFromLog = new TxnPrepare();
writeAndRead(buffer, prepare, prepareFromLog);
prepare =
new TxnPrepare(111, new LogUtils.XidImpl(1, null, bqual));
prepareFromLog = new TxnPrepare();
writeAndRead(buffer, prepare, prepareFromLog);
prepare =
new TxnPrepare(111, new LogUtils.XidImpl(1, gid, null));
prepareFromLog = new TxnPrepare();
writeAndRead(buffer, prepare, prepareFromLog);
/*
* IN delete info
*/
INDeleteInfo info = new INDeleteInfo(77, new byte[1],
new DatabaseId(100));
INDeleteInfo infoFromLog = new INDeleteInfo();
writeAndRead(buffer, info, infoFromLog);
/*
* Checkpoint start