diff --git a/core/store/primitives/pom.xml b/core/store/primitives/pom.xml
index ee89881..1622751 100644
--- a/core/store/primitives/pom.xml
+++ b/core/store/primitives/pom.xml
@@ -70,7 +70,7 @@
         <dependency>
             <groupId>io.atomix</groupId>
             <artifactId>atomix</artifactId>
-            <version>2.0.0-alpha1</version>
+            <version>2.0.0-raft-beta1</version>
         </dependency>
 
         <dependency>
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StorageNamespaces.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StorageNamespaces.java
index 2db6aff..e0e3ad7 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StorageNamespaces.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StorageNamespaces.java
@@ -158,7 +158,6 @@
             .register(MemberId.class)
             .register(SessionId.class)
             .register(RaftMember.Type.class)
-            .register(RaftMember.Status.class)
             .register(Instant.class)
             .register(Configuration.class)
             .register(AtomixAtomicCounterMapOperations.class)
@@ -198,7 +197,6 @@
             .register(DefaultRaftMember.class)
             .register(MemberId.class)
             .register(RaftMember.Type.class)
-            .register(RaftMember.Status.class)
             .register(Instant.class)
             .register(Configuration.class)
             .register(AtomixAtomicCounterMapOperations.class)
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
index c1ea37c..c161c21 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
@@ -40,6 +40,7 @@
     private final Logger log = getLogger(getClass());
 
     private static final int MAX_ENTRIES_PER_LOG_SEGMENT = 32768;
+    private static final int MAX_SEGMENT_SIZE = 1024 * 1024 * 64;
     private final MemberId localMemberId;
     private final StoragePartition partition;
     private final Supplier<RaftServerProtocol> protocol;
@@ -102,6 +103,7 @@
                         .withSerializer(new AtomixSerializerAdapter(Serializer.using(StorageNamespaces.RAFT_STORAGE)))
                         .withDirectory(dataFolder)
                         .withMaxEntriesPerSegment(MAX_ENTRIES_PER_LOG_SEGMENT)
+                        .withMaxSegmentSize(MAX_SEGMENT_SIZE)
                         .build());
         StoragePartition.RAFT_SERVICES.forEach(builder::addService);
         return builder.build();
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorServiceTest.java
index d3b6343..f640a81 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixLeaderElectorServiceTest.java
@@ -15,9 +15,11 @@
  */
 package org.onosproject.store.primitives.resources.impl;
 
+import java.util.concurrent.ScheduledExecutorService;
+
 import io.atomix.protocols.raft.ReadConsistency;
 import io.atomix.protocols.raft.cluster.MemberId;
-import io.atomix.protocols.raft.impl.RaftServerContext;
+import io.atomix.protocols.raft.impl.RaftContext;
 import io.atomix.protocols.raft.protocol.RaftServerProtocol;
 import io.atomix.protocols.raft.service.ServiceId;
 import io.atomix.protocols.raft.service.ServiceType;
@@ -64,7 +66,7 @@
         expect(context.serviceId()).andReturn(ServiceId.from(1)).anyTimes();
         expect(context.executor()).andReturn(mock(ThreadContext.class)).anyTimes();
 
-        RaftServerContext server = mock(RaftServerContext.class);
+        RaftContext server = mock(RaftContext.class);
         expect(server.getProtocol()).andReturn(mock(RaftServerProtocol.class));
 
         replay(context, server);
@@ -85,7 +87,8 @@
                         ReadConsistency.LINEARIZABLE,
                         5000,
                         context,
-                        server),
+                        server,
+                        mock(ScheduledExecutorService.class)),
                 System.currentTimeMillis()));
 
         try (SnapshotWriter writer = snapshot.openWriter()) {
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
index 7073bb5..e117ba5 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
@@ -169,7 +169,6 @@
             .register(MemberId.class)
             .register(SessionId.class)
             .register(RaftMember.Type.class)
-            .register(RaftMember.Status.class)
             .register(Instant.class)
             .register(Configuration.class)
             .register(AtomixAtomicCounterMapOperations.class)
@@ -212,7 +211,6 @@
             .register(DefaultRaftMember.class)
             .register(MemberId.class)
             .register(RaftMember.Type.class)
-            .register(RaftMember.Status.class)
             .register(Instant.class)
             .register(Configuration.class)
             .register(byte[].class)
@@ -457,25 +455,9 @@
         }
 
         @Override
-        public Status getStatus() {
-            return Status.AVAILABLE;
-        }
-
-        @Override
         public Instant getLastUpdated() {
             return Instant.now();
         }
-
-        @Override
-        public void addStatusChangeListener(Consumer<Status> listener) {
-
-        }
-
-        @Override
-        public void removeStatusChangeListener(Consumer<Status> listener) {
-
-        }
-
         @Override
         public CompletableFuture<Void> promote() {
             return null;
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
index 44ebd52..2c46073 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
@@ -17,10 +17,11 @@
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.concurrent.ScheduledExecutorService;
 
 import io.atomix.protocols.raft.ReadConsistency;
 import io.atomix.protocols.raft.cluster.MemberId;
-import io.atomix.protocols.raft.impl.RaftServerContext;
+import io.atomix.protocols.raft.impl.RaftContext;
 import io.atomix.protocols.raft.protocol.RaftServerProtocol;
 import io.atomix.protocols.raft.service.ServiceId;
 import io.atomix.protocols.raft.service.ServiceType;
@@ -67,7 +68,7 @@
         expect(context.serviceId()).andReturn(ServiceId.from(1)).anyTimes();
         expect(context.executor()).andReturn(mock(ThreadContext.class)).anyTimes();
 
-        RaftServerContext server = mock(RaftServerContext.class);
+        RaftContext server = mock(RaftContext.class);
         expect(server.getProtocol()).andReturn(mock(RaftServerProtocol.class));
 
         replay(context, server);
@@ -80,7 +81,8 @@
                 ReadConsistency.LINEARIZABLE,
                 5000,
                 context,
-                server);
+                server,
+                mock(ScheduledExecutorService.class));
 
         AtomixWorkQueueService service = new AtomixWorkQueueService();
         service.init(context);
