OPENDJ-1177 (CR-3278) Re-implement changelog purging logic
In JEReplicaDB, simplified the logic that handled the internal queue that is used before actually persisting UpdateMsg changes to the underlying Berkeley JE DB.
Simplified the publisher/consumer model (msgQueue.add() / msgQueue.remove()) by relying on a LinkedBlockingQueue and a semaphore, instead of many synchronized blocks and fields that cluttered this code.
JEReplicaDB.java:
Changed msgQueue from LinkedList to LinkedBlockingQueue.
Removed fields queueMaxSize, queueLowmark, queueHimark, queueLowmarkBytes, queueHimarkBytes, queueByteSize and replaced them all with queueSizeBytes Semaphore.
Removed clearQueue() and getChanges().
Added collectAllPermits().
Added immutable CSNLimits class to remove the need for synchronizing on oldest and newest CSNs.
ReplicationDB.java:
In addEntries(), now return the total size of the persisted messages (return type was void).
JEReplicaDBTest.java:
In testTrim(), allowed the test to finish + made the code clearer.
replication.properties:
Added an error message for adding a change to the JEReplicaDB.