Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
Repo info
  • Aug 26 07:19
    coveralls commented #1051
  • Aug 22 09:06
    merlinosayimwen edited #1051
  • Aug 22 09:02
    merlinosayimwen opened #1051
  • Aug 22 07:23
    bhowmikdebarshi commented #343
  • Aug 22 07:22
    bhowmikdebarshi commented #343
  • Aug 14 01:06
    peterkong752 opened #1050
  • Aug 11 13:50
    johnou commented #1043
  • Aug 09 18:24
    doctorpangloss commented #1048
  • Aug 09 17:28
    doctorpangloss opened #1049
  • Aug 09 00:43
    doctorpangloss edited #1048
  • Aug 09 00:43
    doctorpangloss opened #1048
  • Jul 23 08:28
    johnou edited #1041
  • Jul 23 08:27
    johnou edited #1041
  • Jul 22 18:19
    johnou commented #1043
  • Jul 22 18:00
    coveralls commented #1043
  • Jul 22 17:34
    johnou commented #1043
  • Jul 22 07:49
    npepinpe synchronize #1043
  • Jul 18 14:30

    johnou on master

    Avoid unnecessary retrying of d… (compare)

  • Jul 18 14:30
    johnou closed #1047
  • Jul 18 14:30
    johnou closed #1046
Alexander Richter

Also, I seem to be having trouble to join a client node to a cluster. I have tried that with a three-node-cluster and a single-node cluster. This is the code I am connecting the client with:

AtomixBuilder atomixBuilder = Atomix.builder()

 Atomix atomix = atomixBuilder.build().start().join();

From the logs, which I have attached below, it looks like the client successfully connects to the cluster, but for some reason, the CompletableFuture returned from start() never completes at all. By debugging, I have figured out that the last line that is actually executed is .thenApply(v -> null); in AtomixCluster.java on line 279. The cluster is definitely running, as I can successfully send requests to distributed primitives.

This is the logging output of atomix at the debug level. One more thing that might be helpful: I can see heartbeat messages being sent back and forth at the trace level.

2018-11-14 16:41:51,197 [INFO ] [atomix-partition-group-membership-service-0] io.atomix.primitive.partition.impl.DefaultPartitionGroupMembershipService - Started
2018-11-14 16:41:51,210 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.utils.serializer.Namespace - (no name): class io.atomix.primitive.partition.GroupMember already registered as 502. Skipping 553.
2018-11-14 16:41:51,211 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.utils.serializer.Namespace - (no name): class io.atomix.cluster.MemberId already registered as 503. Skipping 554.
2018-11-14 16:41:51,212 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.utils.serializer.Namespace - (no name): class io.atomix.primitive.partition.MemberGroupId already registered as 504. Skipping 555.
2018-11-14 16:41:51,212 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.utils.serializer.Namespace - (no name): class io.atomix.primitive.partition.PartitionId already registered as 505. Skipping 556.
2018-11-14 16:41:51,214 [INFO ] [atomix-cluster-heartbeat-sender] io.atomix.cluster.impl.DefaultClusterMembershipService - node1 - Member updated: Member{id=node1, address=, properties={}}
2018-11-14 16:41:51,218 [INFO ] [atomix-partition-group-membership-service-0] io.atomix.primitive.partition.impl.HashBasedPrimaryElectionService - Started
2018-11-14 16:41:51,228 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.primitive.partition.impl.HashBasedPrimaryElection - client - Recomputed term for partition PartitionId{id=1, group=system}: PrimaryTerm{term=1, primary=GroupMember{memberId=node1, groupId=node1}, candidates=[]}
2018-11-14 16:41:51,229 [DEBUG] [netty-messaging-event-nio-client-1] io.atomix.cluster.messaging.impl.NettyMessagingService - - No handler for message type primary-election-counter-system-1 from localhost:8200
2018-11-14 16:41:51,245 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.protocols.backup.partition.impl.PrimaryBackupPartitionClient - Successfully started client for PartitionId{id=1, group=system}
2018-11-14 16:41:51,246 [INFO ] [atomix-partition-group-membership-service-0] io.atomix.protocols.backup.partition.PrimaryBackupPartitionGroup - Started
2018-11-14 16:41:51,252 [DEBUG] [atomix-partition-group-membership-service-0] io.atomix.primitive.session.impl.RecoveringSessionClient - SessionClient{system-partition-1} - Opening proxy session
2018-11-14 16:41:52,182 [DEBUG] [atomix-cluster-event-executor-0] io.atomix.cluster.messaging.impl.NettyMessagingService - Established a new connection to
2018-11-14 16:41:54,145 [DEBUG] [primary-election-0] io.atomix.primitive.partition.impl.HashBasedPrimaryElection - cli
Wayne Hunter
I have a strange situation. When I add Atomix to an existing multi-module Maven project which is an application server that will be deployed to Kubernetes. The CompletableFuture call at atomix.start().join() never completes. However if I put the same code into a seperate Maven project, then the cluster Future completes and the code continues to execute.
Jordan Halterman
Do you see any warnings being logged? Usually if the future doesn’t complete it’s because Atomix can’t find partitions to use, and it will log a warning indicating that. But if partition groups are configured locally then that is indeed strange
Wayne Hunter
The only warning is: 2018-11-14 19:25:54 WARN AbstractChannel:131 - A non-root user can't receive a broadcast packet if the socket is not bound to a wildcard address; binding to a non-wildcard address (localhost/ anyway as requested.
Even if I run the code in isolation not coupled to the app server startup but as isolated classes from a test harness, the cluster doesn’t fully start. My colleague and I have been head scratching the last couple days.
Wayne Hunter

When I kill the process, I notice in the log that Atomix then joins:
2018-11-14 19:40:58 DEBUG ThreadPoolAsynchronousRunner:730 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@6398e5a6 -- Running DeadlockDetector[Exiting. No pending tasks.]
2018-11-14 19:41:04 INFO Member:71 - Stopping: Atomix{partitions=io.atomix.primitive.partition.impl.DefaultPartitionService@17053079}
Joined: Atomix{partitions=io.atomix.primitive.partition.impl.DefaultPartitionService@17053079}
2018-11-14 19:41:04 INFO CorePrimitivesService:381 - Stopped

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

Jordan Halterman
that’s really strange
what’s the last Started message logged?
seems like killing it is unblocking a thread or something
Alexander Richter
In my case, it seems like atomix has at least found all the partition groups, since they're all bootstrapped from the cluster node. And the DefaultPartitionGroupMembershipService also appears to be started. Is there anything that you think could cause atomix to hang at this point?
Wayne Hunter
I’m not sure, there are a lot of dependencies in the project. I’ll try only starting Atomix without anything else and report how I get on.
Junbo Ruan
@kuujo hi
Alexander Richter
By isolating dependencies from my project, I found that atomix seems to be incompatible with Google Guice. As soon as I add that dependency via gradle, atomix won't start anymore because it is getting stuck at io.atomix.primitive.session.impl.RecoveringSessionClient - SessionClient{system-partition-1} - Opening proxy session. Has anyone ever had this issue before?
Alexander Richter
Nvm, I guess i just have a general problem with my dependencies, going to work this out today...

I re-run an election when an LeaderElection's state changes like this:

        election.addStateChangeListener(state -> {
            LOGGER.warn("election state changed, current state is: " + state);
            if (state == PrimitiveState.EXPIRED) {
            if (state == PrimitiveState.SUSPENDED) {
            if (state == PrimitiveState.CONNECTED) {

I'm not sure if this is ok, because I got error like this :

2018-11-14 18:50:26 [ERROR] [io.atomix.utils.concurrent.ThreadPoolContext.lambda$new$0(ThreadPoolContext.java:83) raft-partition-group-data-5] __|An uncaught exception occurred
        at io.atomix.core.election.impl.BlockingLeaderElection.complete(BlockingLeaderElection.java:109)
        at io.atomix.core.election.impl.BlockingLeaderElection.run(BlockingLeaderElection.java:49)
        at cn.ac.iie.di.ban.data.exchange.runner.server.DERunnerServer.lambda$initGroup$2(DERunnerServer.java:270)
        at io.atomix.primitive.proxy.impl.DefaultProxyClient.lambda$onStateChange$8(DefaultProxyClient.java:180)
        at java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:891)
        at java.util.concurrent.CopyOnWriteArraySet.forEach(CopyOnWriteArraySet.java:404)
        at io.atomix.primitive.proxy.impl.DefaultProxyClient.onStateChange(DefaultProxyClient.java:180)
        at io.atomix.primitive.proxy.impl.DefaultProxyClient.lambda$null$0(DefaultProxyClient.java:75)
        at io.atomix.primitive.session.impl.BlockingAwareSessionClient.lambda$null$0(BlockingAwareSessionClient.java:50)
        at io.atomix.utils.concurrent.ThreadPoolContext.lambda$new$0(ThreadPoolContext.java:81)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

The at cn.ac.iie.di.ban.data.exchange.runner.server.DERunnerServer.lambda$initGroup$2(DERunnerServer.java:270) is just here:

if (state == PrimitiveState.SUSPENDED) {
        **        election.run(atomix.getMembershipService().getLocalMember().id()); **
I'm using version 3.0.7
Wayne Hunter
We’re using Guice in the project too. I’ll see what happens once removed. Thanks
Wayne Hunter
I updated my JDK and enabled trace. My issue appears to be with Netty during the atomic.start() call.
2018-11-16 12:14:49 DEBUG NettyMessagingService:262 - Failed to initialize native (epoll) transport. Reason: failed to load the required native library. Proceeding with nio.
2018-11-16 12:14:49 DEBUG NioEventLoop:76 - -Dio.netty.noKeySetOptimization: false
2018-11-16 12:14:49 DEBUG NioEventLoop:76 - -Dio.netty.selectorAutoRebuildThreshold: 512
2018-11-16 12:14:49 DEBUG PlatformDependent:71 - Platform: MacOS
2018-11-16 12:14:49 DEBUG PlatformDependent0:76 - -Dio.netty.noUnsafe: false
2018-11-16 12:14:49 DEBUG PlatformDependent0:76 - Java version: 11
2018-11-16 12:14:49 DEBUG PlatformDependent0:71 - sun.misc.Unsafe.theUnsafe: available
2018-11-16 12:14:49 DEBUG PlatformDependent0:71 - sun.misc.Unsafe.copyMemory: available
2018-11-16 12:14:49 DEBUG PlatformDependent0:71 - java.nio.Buffer.address: available
2018-11-16 12:14:49 DEBUG PlatformDependent0:91 - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
    at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
    at io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:224)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:218)
    at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:208)
    at io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:79)
    at io.netty.channel.nio.NioEventLoop.newTaskQueue(NioEventLoop.java:258)
    at io.netty.util.concurrent.SingleThreadEventExecutor.<init>(SingleThreadEventExecutor.java:165)
    at io.netty.channel.SingleThreadEventLoop.<init>(SingleThreadEventLoop.java:58)
    at io.netty.channel.nio.NioEventLoop.<init>(NioEventLoop.java:141)
    at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:127)
    at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:36)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:58)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:47)
    at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:77)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:72)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:59)
    at io.atomix.cluster.messaging.impl.NettyMessagingService.initEventLoopGroup(NettyMessagingService.java:265)
    at io.atomix.cluster.messaging.impl.NettyMessagingService.start(NettyMessagingService.java:166)
    at io.atomix.cluster.AtomixCluster.startServices(AtomixCluster.java:300)
    at io.atomix.core.Atomix.startServices(Atomix.java:852)
    at io.atomix.cluster.AtomixCluster.start(AtomixCluster.java:293)
    at io.atomix.core.Atomix.start(Atomix.java:840)
2018-11-16 12:14:49 DEBUG PlatformDependent0:81 - java.nio.Bits.unaligned: unavailable true
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
    at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
    at io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:273)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:266)
2018-11-16 12:14:49 DEBUG ResourceLeakDetector:81 - -Dio.netty.leakDetection.level: simple
2018-11-16 12:14:49 DEBUG ResourceLeakDetector:81 - -Dio.netty.leakDetection.targetRecords: 4
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.numHeapArenas: 16
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.numDirectArenas: 16
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.pageSize: 8192
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.maxOrder: 11
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.chunkSize: 16777216
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.tinyCacheSize: 512
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.smallCacheSize: 256
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.normalCacheSize: 64
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.cacheTrimInterval: 8192
2018-11-16 12:14:49 DEBUG PooledByteBufAllocator:76 - -Dio.netty.allocator.useCacheForAllThreads: true
2018-11-16 12:14:49 DEBUG InternalThreadLocalMap:76 - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
2018-11-16 12:14:49 DEBUG InternalThreadLocalMap:76 - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
2018-11-16 12:14:49 DEBUG DefaultChannelId:76 - -Dio.netty.processId: 10112 (auto-detected)
2018-11-16 12:14:49 DEBUG NetUtil:76 - -Djava.net.preferIPv4Stack: false
2018-11-16 12:14:49 DEBUG NetUtil:76 - -Djava.net.preferIPv6Addresses: false
2018-11-16 12:14:49 DEBUG NetUtil:86 - Loopback interface: lo0 (lo0, 0:0:0:0:0:0:0:1%lo0)
2018-11-16 12:14:49 DEBUG NetUtil:81 - Failed to get SOMAXCONN from sysctl and file /proc/sys/net/core/somaxconn. Default: 128
2018-11-16 12:14:49 DEBUG DefaultChannelId:76 - -Dio.netty.machineId: ac:de:48:ff:fe:00:11:22 (auto-detected)
2018-11-16 12:14:49 DEBUG ByteBufUtil:76 - -Dio.netty.allocator.type: pooled
2018-11-16 12:14:49 DEBUG ByteBufUtil:76 - -Dio.netty.threadLocalDirectBufferSize: 0
2018-11-16 12:14:49 DEBUG ByteBufUtil:76 - -Dio.netty.maxThreadLocalCharBufferSize: 16384
Hello, when using a Raft Partition Group with a AtomicMap, I sometimes get a io.atomix.primitive.PrimitiveException$Timeout error when adding values to the map while I manually kill nodes. Would someone be willing to help me with this? Don't think it warrants a github issue.
hi,sir,How can I listen a leader node change event? i don't find it in website. my atomix version is 3.0.8.
There is a way to get Raft partition leaders, but those are just informative methods. The (strongly) recommended way to do any sort of leader election is using the leader election primitives which provide events, support for multiple leaders, support for leader transfer, prioritization, etc
Junbo Ruan
@kuujo when not setting multicast, 'group' property in MultipcastConfig may be null in some environment
NettyBroadcastService.Builder will throw NullPointerException
Jordan Halterman
Got a fix for it? Submit a PR?
Hi! I am trying to build an atomix cluster with 3 nodes. 2 of them start fine. But the last one starts but raises an exception. io.atomix.s torage.StorageException: Failed to acquire storage lock; ensure each Raft server is configured with a distinct storage directory. Can someone explain to me why does causes this error?
Jordan Halterman
@miniarak according to the message they’re all trying to store data in the same folder on the same node. If you’re running them on the same node then you have to configure the storageDirectory for Raft partitions to be different for each node
Jordan Halterman
In code it’s .withStorageDirectory on RaftPartitionGroup builders, and in configuration it’s storage.directory
Otherwise they’re all trying to get a lock on the same directory to write the same log files. Of course, in a real cluster with multiple nodes you don’t have this problem.
Also, please join the Slack workspace! Soon I will just start responding to questions with a link to Slack to try to force these threads to move over there.
@kuujo Thank you!...And how do I join the Slack workspace?
Jordan Halterman
There’s a link above or in the README
@kuujo sir,I feel the custom primitive some overdesign. config,buider,proxy,sync,async....,it's too much interface need to be implement...
Lukasz Antoniak

Hi Team! I am trying to replace ZooKeeper with Atomix. We use ZooKeeper as strongly consistent store to persist cluster state and notify nodes when peers are joining or leaving the cluster. Strong consistency implies usage of Raft. For development and unit-testing purpose, I have tried to setup single node Raft cluster. Unfortunately, atomix.start().join() never completes.

cluster {
  clusterId: "atomix"
  node {
    id: member1
    address: "localhost:5001"
  multicast {
    enabled: true
  discovery {
    type: multicast

managementGroup {
  type: raft
  partitions: 1
  members: [member1]
  storage {
    directory: "/tmp/atomix/mgmt"
    # memory or disk
    level: memory

partitionGroups.raft {
  type: raft
  partitions: 1
  members: [member1]
  storage {
    directory: "/tmp/atomix/pg"
    # memory or disk
    level: memory

Any hints?

Lukasz Antoniak

Actually one time it was hanging, and now I receive message about port binding. I have verified with lsof that nothing listens on 5001. After changing the port to any random value, issue still persists.

[2018-12-16 09:04:21,204] INFO RaftServer{raft-partition-1}{role=CANDIDATE} - Starting election (io.atomix.protocols.raft.roles.CandidateRole:165)
[2018-12-16 09:04:21,205] INFO RaftServer{raft-partition-1} - Transitioning to LEADER (io.atomix.protocols.raft.impl.RaftContext:170)
[2018-12-16 09:04:21,206] INFO RaftServer{raft-partition-1} - Found leader member1 (io.atomix.protocols.raft.impl.RaftContext:170)
[2018-12-16 09:04:21,209] INFO Started (io.atomix.protocols.raft.partition.RaftPartitionGroup:210)
[2018-12-16 09:04:21,209] INFO Started (io.atomix.primitive.partition.impl.DefaultPartitionService:196)
[2018-12-16 09:04:21,559] INFO Started (io.atomix.core.impl.CoreTransactionService:384)
[2018-12-16 09:04:21,559] INFO Started (io.atomix.core.impl.CorePrimitivesService:360)
[2018-12-16 09:04:22,512] INFO 3.0.8 (revision 5b38cc built on 2018-11-13 15:47:34)
[2018-12-16 09:04:22,521] WARN Failed to bind TCP server to port due to {} (io.atomix.cluster.messaging.impl.NettyMessagingService:558)
java.net.BindException: Address already in use

I have tried versions 3.0.6, 3.0.8 and 3.1.0-beta2.

Lukasz Antoniak
Argh, many apologies. I have hooked up Atomix in place where I create ZK client and it turned out to be twice in unit-tests. All works fine!
Lukasz Antoniak
Hi team! Any plans to support ephemeral entries in AtomicDocumentTree?
jose igancio hernandez velasco
hi, I'm trying to connect an onos node to an atomix cluster by changing the cluster.json without restarting the onos service. Onos detects the change in the file but does not make the new connection.
Is it possible to do this without having to stop the onos service?
Jordan Halterman
Nope it’s not possible. In past releases we detected the configuration change and restarted the container, but that proved to be pretty buggy. There’s not really a difference between how that was done and just stopping, configuring, and restarting the node though.

Please join Slack!

We are no longer monitoring this channel, which is why nobody’s getting responses. Gitter has never been very easy to monitor, so we moved to Slack. The following link is a permanent invite to the Slack workspace:
Hey! I'm trying to startup a cluster with two computer in the same LAN but, dispite in the same machine the cluster works, in two computer nothing seems to starts. The console prints multiple time Connection timeout... What can I do?
Vikram G Palakurthi
Hello everyone, first thanks for the great api. I am trying to refer docs and all of the links point to http which is being blocked since I am behind the corporate proxy. Can the website be updated so it could use the right protocol, thanks.
Hello everyone. I'm working on a project that needs to replicate a map to several host and maintain serializable consistency level. Atomix seems to be a prefect tool for this. In our scenario, read is frequent (2w qps on average on a 3 node cluster) and write is rare ( 1 qps at maxium ). Are there any benchmark of Atomix's performance with regard to r/w qps ? or any suggestions on whether should I use Atomix in this senario?

we want to deploy atomix cluster in kubernetes . we tried with helm but atomix pods are failing k8s-admin@k8s-master:~/atomix-helm$ kubectl describe pod test2-atomix-0
Name: test2-atomix-0
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: <none>
Labels: app=test2-atomix
Annotations: <none>
Status: Pending
Controlled By: StatefulSet/test2-atomix
Init Containers:
Image: ubuntu:16.04
Port: <none>
Host Port: <none>
/scripts/create-config.sh --nodes=$ATOMIX_NODES > /config/atomix.properties
/config from system-config (rw)
/scripts from init-scripts (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-498sp (ro)
Image: atomix/atomix:3.0.6
Ports: 5678/TCP, 5679/TCP
Host Ports: 0/TCP, 0/TCP
cpu: 500m
memory: 512Mi
Liveness: http-get http://:5678/v1/status delay=60s timeout=10s period=10s #success=1 #failure=3
Readiness: http-get http://:5678/v1/status delay=10s timeout=10s period=10s #success=1 #failure=6
/etc/atomix/system from system-config (rw)
/etc/atomix/user from user-config (rw)
/var/lib/atomix from data (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-498sp (ro)
Type Status
PodScheduled False
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: data-test2-atomix-0
ReadOnly: false
Type: ConfigMap (a volume populated by a ConfigMap)
Name: test2-atomix-init-scripts
Optional: false
Type: ConfigMap (a volume populated by a ConfigMap)
Name: test2-atomix-config
Optional: false
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
SizeLimit: <unset>
Type: Secret (a volume populated by a Secret)
SecretName: default-token-498sp
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Type Reason Age From Message

Warning FailedScheduling 82s (x30 over 41m) default-scheduler pod has unbound immediate PersistentVolumeClaims
But Persistent volume claim is in pending state k8s-admin@k8s-master:~/atomix-helm$ kubectl get pvc data-test2-atomix-0
data-test2-atomix-0 Pending

Johno Crawford

Please join Slack!

We are no longer monitoring this channel, which is why nobody’s getting responses. Gitter has never been very easy to monitor, so we moved to Slack. The following link is a permanent invite to the Slack workspace:


In order to form a ONOS cluster with we must create an Atomix cluster first. My all three Atomix nodes and three ONOS nodes are same 3 physical hosts.

I am facing problems running Atomix cluster. The first Atomix node is running correctly and displaying following outputs:

13:39:55.911 [main] INFO io.atomix.core.Atomix - 3.0.7 (revision 9e8e73 built on 2018-10-11 18:07:26)

13:39:56.241 [netty-messaging-event-epoll-server-0] INFO i.a.c.m.impl.NettyMessagingService - TCP server listening for connections on
13:39:56.243 [netty-messaging-event-epoll-server-0] INFO i.a.c.m.impl.NettyMessagingService - Started
13:39:56.306 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.d.BootstrapDiscoveryProvider - Joined
13:39:56.306 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.i.DefaultClusterMembershipService - atomix-1 - Member activated: Member{id=atomix-1, address=, properties={}}
13:39:56.308 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.i.DefaultClusterMembershipService - Started
13:39:56.309 [atomix-cluster-0] INFO i.a.c.m.i.DefaultClusterCommunicationService - Started
13:39:56.311 [atomix-cluster-0] INFO i.a.c.m.i.DefaultClusterEventService - Started
13:39:56.318 [atomix-0] INFO i.a.p.p.i.DefaultPartitionGroupMembershipService - Started
13:39:56.337 [atomix-0] INFO i.a.p.p.i.HashBasedPrimaryElectionService - Started
13:39:56.371 [atomix-0] INFO i.a.p.r.p.impl.RaftPartitionServer - Starting server for partition PartitionId{id=1, group=system}
13:39:56.577 [raft-server-system-partition-1] INFO i.a.protocols.raft.impl.RaftContext - RaftServer{system-partition-1} - Transitioning to FOLLOWER
13:40:00.157 [raft-server-system-partition-1] WARN i.a.p.raft.roles.FollowerRole - RaftServer{system-partition-1}{role=FOLLOWER} - java.net.ConnectException
13:40:00.158 [raft-server-system-partition-1] WARN i.a.p.raft.roles.FollowerRole - RaftServer{system-partition-1}{role=FOLLOWER} - java.net.ConnectException

The problem is getting occured while running second and third Atomix nodes. While running those two nodes Atomix log displays "Failed to acquire storage lock; ensure each Raft server is configured with a distinct storage directory". Full logs are given below:

13:54:13.743 [main] INFO io.atomix.core.Atomix - 3.0.7 (revision 9e8e73 built on 2018-10-11 18:07:26)

13:54:13.984 [netty-messaging-event-epoll-server-0] INFO i.a.c.m.impl.NettyMessagingService - TCP server listening for connections on
13:54:13.985 [netty-messaging-event-epoll-server-0] INFO i.a.c.m.impl.NettyMessagingService - Started
13:54:14.342 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.d.BootstrapDiscoveryProvider - Joined
13:54:14.343 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.i.DefaultClusterMembershipService - atomix-2 - Member activated: Member{id=atomix-2, address=, properties={}}
13:54:14.345 [atomix-bootstrap-heartbeat-receiver] INFO i.a.c.i.DefaultClusterMembershipService - Started
13:54:14.345 [atomix-cluster-0] INFO i.a.c.m.i.DefaultClusterCommunicationService - Started
13:54:14.348 [atomix-cluster-0] INFO i.a.c.m.i.DefaultClusterEventService - Started
13:54:14.464 [atomix-cluster-heartbeat-sender] INFO i.a.c.i.DefaultClusterMembershipService - atomix-1 - Member updated: Member{id=atomix-1, address=, properties={}}
13:54:14.622 [atomix-partition-group-membership-service-0] INFO i.a.p.p.i.DefaultPartitionGroupMembershipService - Started
13:54:14.638 [atomix-partition-group-membership-service-0] INFO i.a.p.p.i.HashBasedPrimaryElectionService - Started
13:54:14.673 [atomix-partition-group-membership-service-0] INFO i.a.p.r.p.impl.RaftPartitionServer - Starting server for partition PartitionId{id=1, group=system}
Exception in thread "main" java.util.concurrent.CompletionException: io.atomix.storage.StorageException: Failed to acquire storage lock; ensure each Raft server is configured with a distinct storage directory