HCOLL-343 add an option not to erase old removed entries from ReplicatedChronicleMap

This commit is contained in:
leventov
2015-08-27 00:01:46 +03:00
parent 6cb62cf20b
commit 88843fae92
4 changed files with 32 additions and 1 deletions
@@ -326,6 +326,18 @@ public interface ChronicleHashBuilder<K, H extends ChronicleHash<K, ?, ?, ?>,
*/
B removedEntryCleanupTimeout(long removedEntryCleanupTimeout, TimeUnit unit);
/**
* Configures if replicated Chronicle Hashes, constructed by this builder, should
* completely erase entries, removed some time ago. See {@link #removedEntryCleanupTimeout(
* long, TimeUnit)} for more details on this mechanism.
*
* <p>Default value is {@code true} -- old removed entries are erased with 1 second timeout.
*
* @param cleanupRemovedEntries if stale removed entries should be purged from Chronicle Hash
* @return this builder back
*/
B cleanupRemovedEntries(boolean cleanupRemovedEntries);
/**
* Configures a {@link BytesMarshallerFactory} to be used with {@link
* BytesMarshallableSerializer}, which is a default {@link #objectSerializer ObjectSerializer},
@@ -164,6 +164,7 @@ public final class ChronicleMapBuilder<K, V> implements
// replication
private TimeProvider timeProvider = TimeProvider.SYSTEM;
long cleanupTimeout = 1;
private boolean cleanupRemovedEntries = true;
TimeUnit cleanupTimeoutUnit = TimeUnit.SECONDS;
private BytesMarshallerFactory bytesMarshallerFactory;
@@ -1075,6 +1076,12 @@ public final class ChronicleMapBuilder<K, V> implements
return this;
}
@Override
public ChronicleMapBuilder<K, V> cleanupRemovedEntries(boolean cleanupRemovedEntries) {
this.cleanupRemovedEntries = cleanupRemovedEntries;
return this;
}
TimeProvider timeProvider() {
return timeProvider;
}
@@ -1571,7 +1578,8 @@ public final class ChronicleMapBuilder<K, V> implements
throw new AssertionError("Only one non-null replication should be passed");
ReplicatedChronicleMap result = (ReplicatedChronicleMap) map;
establishCleanupThread(result);
if (cleanupRemovedEntries)
establishCleanupThread(result);
List<Replicator> replicators = new ArrayList<>(2);
if (singleHashReplication != null) {
@@ -197,6 +197,12 @@ public final class ChronicleSetBuilder<K>
return this;
}
@Override
public ChronicleSetBuilder<K> cleanupRemovedEntries(boolean cleanupRemovedEntries) {
chronicleMapBuilder.cleanupRemovedEntries(cleanupRemovedEntries);
return this;
}
@Override
public ChronicleSetBuilder<K> bytesMarshallerFactory(
BytesMarshallerFactory bytesMarshallerFactory) {