package com.jivesoftware.os.amza.service.replication;
import com.jivesoftware.os.amza.api.partition.VersionedAquarium;
import com.jivesoftware.os.amza.api.partition.VersionedPartitionName;
import com.jivesoftware.os.amza.api.wal.WALUpdated;
import com.jivesoftware.os.amza.service.storage.SystemWALStorage;
import com.jivesoftware.os.amza.service.take.HighwaterStorage;
/**
* @author jonathan.colt
*/
public class SystemPartitionCommitChanges implements CommitChanges {
final StorageVersionProvider storageVersionProvider;
final SystemWALStorage systemWALStorage;
final HighwaterStorage highwaterStorage;
final WALUpdated walUpdated;
public SystemPartitionCommitChanges(
StorageVersionProvider storageVersionProvider,
SystemWALStorage systemWALStorage,
HighwaterStorage highwaterStorage,
WALUpdated walUpdated) {
this.storageVersionProvider = storageVersionProvider;
this.systemWALStorage = systemWALStorage;
this.highwaterStorage = highwaterStorage;
this.walUpdated = walUpdated;
}
@Override
public void commit(VersionedPartitionName versionedPartitionName, CommitTx commitTx) throws Exception {
commitTx.tx(highwaterStorage,
new VersionedAquarium(versionedPartitionName, null),
(prefix, commitable) -> systemWALStorage.update(versionedPartitionName, prefix, commitable, walUpdated));
//TODO reevaluate highwaterStorage.flush(-1, null);
}
@Override
public String toString() {
return "SystemPartitionCommitChanges{" + "systemWALStorage=" + systemWALStorage + '}';
}
}