These are chat archives for atomix/atomix
@abeep there’s no way to implement conflict resolution because by definition there are no conflicts in the consensus algorithm. There’s a global total ordering of events that are serialized through a single node (for each partition), so there are no conflicts to resolve. There’s no bound within which to resolve conflicts either - e.g. conflicting writes that occur at the same logical time. All operations occur at a distinct point in logical time. The only time that conflicts occur is within the context of multiple operations, e.g. within a transaction. In that case it would be possible to resolve conflicting transactions (which are typically accepted/rejected based on locks/isolation levels). But for normal operations, you’d have to first create conflicts to resolve them, and that seems pointless.
Conflict resolution would make sense in the context of
EventuallyConsistentMap where timestamps can match for conflicting writes, but we haven’t copied that primitive over to Atomix yet.
this.cache = atomix.<K, V>consistentMapBuilder(id) .withSerializer(createSerializer()) .withConsistency(Consistency.LINEARIZABLE) .withPersistence(Persistence.PERSISTENT) .withReplication(Replication.SYNCHRONOUS) .withRecovery(Recovery.RECOVER) .withMaxRetries(5) .build();
this.cache = atomix.<K, V>consistentMapBuilder(id) .withSerializer(createSerializer()) .withProtocol(RaftProtocol.builder() .withMaxRetries(5) .build()) //.withConsistency(Consistency.LINEARIZABLE) // .withPersistence(Persistence.PERSISTENT) // .withReplication(Replication.SYNCHRONOUS) // .withRecovery(Recovery.RECOVER) // .withMaxRetries(5) .build();
Caused by: java.lang.NullPointerException at io.atomix.core.map.impl.ConsistentMapProxyBuilder.buildAsync(ConsistentMapProxyBuilder.java:63) at io.atomix.primitive.DistributedPrimitiveBuilder.build(DistributedPrimitiveBuilder.java:196) at com.sulake.orbit.cluster.AtomixConcurrentMap.<init>(AtomixConcurrentMap.java:52) at com.sulake.orbit.cluster.AtomixClusterPeer.lambda$getAtomixCache$1(AtomixClusterPeer.java:121) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at com.sulake.orbit.cluster.AtomixClusterPeer.getAtomixCache(AtomixClusterPeer.java:121)
DATAnode only clusters. The cluster has to be configured with
RaftPartitionGroups to use
RaftProtocol. Need to work on the configuration to make sure it provides sensible defaults. The cluster is getting kind of complicated to configure.