Some more clarifications about the changes :

when we write a LogEdit, we have two cases :
1) we write a ChangeDataContainer
2) we write a Transaction state

In the first case, we serialize the data in the log( LogEdit, sync) method using the current transaction logRecord, then we call the log( UserLogRecord, sync) method which will write the record in the WAL. In the second case, we simply call the log( UserLogRecord, sync) without having to grab the current transaction, as we already are dealing with a transaction. The places where this is done are :
 DefaultTxnManager.abortReadWriteTxn
 DefaultTxnManager.beginReadWriteTxn
 DefaultTxnManager.commitReadWriteTxn

I created a LogEdit.injectData( userLogRecord, type ) to have one single place to manage the serialization of a LogEdit instance (ChangeDataContainer ot TxnStateChange) instead of 4, and to be able to add some log.debug() in one single place instead of 4. This does not change the logic of this part of the code.

Regarding the added type, as I explained in another mail, I did that to be sure we can handle cases where we wil have something not expected like a sequence of TXN_BEGIN/TXN_COMMIT without any DATA_CONTAINER. Here is an exemple of the trace I get with a simple Add request :


Serializing : TxnStateChange[-9223372036854775808/TXN_BEGIN]
Serializing : TxnStateChange[-9223372036854775804/TXN_COMMIT]

Serializing : TxnStateChange[-9223372036854775808/TXN_BEGIN]
Serializing : DataChangeContainer(ou=system, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, -9223372036854775808)
{
IndexChange '1.3.6.1.4.1.18060.0.4.1.2.50': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, ParentIdAndRdn<96512910-d92d-49c4-ac8a-20d28c4ff57c, 'cn=test'>> IndexChange '2.5.4.0': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, person>
    IndexChange '2.5.4.0': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, top>
IndexChange '1.3.6.1.4.1.18060.0.4.1.2.4': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, 96512910-d92d-49c4-ac8a-20d28c4ff57c> IndexChange '1.3.6.1.4.1.18060.0.4.1.2.43': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2> IndexChange '1.3.6.1.4.1.4203.666.1.7': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, 20120314234251.077000Z#000000#000#000000> IndexChange '1.3.6.1.1.16.4': <ADD, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2, 866e5898-6aaa-4e84-96f2-c423bb6ef8b2>
    EntryAddDelete : ADD
Entry
    dn[n]: cn=test,ou=system
    objectclass: person
    objectclass: top
    cn: test
    sn: TEST
    entryParentId: 96512910-d92d-49c4-ac8a-20d28c4ff57c
    entryUUID: 866e5898-6aaa-4e84-96f2-c423bb6ef8b2
    createTimestamp: 20120314234251Z
    creatorsName: 0.9.2342.19200300.100.1.1=admin,2.5.4.11=system
    entryCSN: 20120314234251.077000Z#000000#000#000000

}
Serializing : TxnStateChange[-9223372036854775802/TXN_COMMIT]


I slightly modified some of the read/writeExternal methods too, especially the one that serailize the index. Call it premature optimization... At least, those changes are local to those methods.

Hope it helps to understand the changes

--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to