Maybe the end of endless pain and suffering on the Continuous Integration front - take 2.
In ExternalChangeLogTest.ECLReplicationServerFullTest(), debugging somewhat allows to reproduce the problem. The sequence of events is... interesting.
In ECLAfterChangelogTrim(), the last published DeleteMsg might not even have even been received on the other side when the test ends (i.e. ServerReader.run() might never have called/completed calling Session.receive()), hence clearing the changelogDB cannot clear this yet to be received message!
Looking closely at this test, I cannot see any reason to publish this DeleteMsg, so I removed this code. I also took the opportunity to get rid of what look like a useless 1s sleep.
ExternalChangeLogTest.java:
In ECLReplicationServerFullTest(), removed sending a useless DeleteMsg that changes nothing to the test result + removed a useless 1s sleep (Yay!) + removed the call to clearChangelogDB() in the finally block (already called by a @AfterTest)