use of io.atomix.primitive.service.impl.DefaultBackupInput in project atomix by atomix.
the class BackupRole method requestRestore.
/**
* Requests a restore from the primary.
*/
private void requestRestore(MemberId primary) {
context.protocol().restore(primary, RestoreRequest.request(context.descriptor(), context.currentTerm())).whenCompleteAsync((response, error) -> {
if (error == null && response.status() == PrimaryBackupResponse.Status.OK) {
context.resetIndex(response.index(), response.timestamp());
Buffer buffer = HeapBuffer.wrap(response.data());
int sessions = buffer.readInt();
for (int i = 0; i < sessions; i++) {
context.getOrCreateSession(buffer.readLong(), MemberId.from(buffer.readString()));
}
context.service().restore(new DefaultBackupInput(buffer, context.service().serializer()));
operations.clear();
}
}, context.threadContext());
}
use of io.atomix.primitive.service.impl.DefaultBackupInput in project atomix by atomix.
the class AtomicSemaphoreTest method testSnapshot.
@Test
public void testSnapshot() throws Exception {
AbstractAtomicSemaphoreService service = new DefaultAtomicSemaphoreService(new AtomicSemaphoreServiceConfig().setInitialCapacity(10));
Field available = AbstractAtomicSemaphoreService.class.getDeclaredField("available");
available.setAccessible(true);
Field holders = AbstractAtomicSemaphoreService.class.getDeclaredField("holders");
holders.setAccessible(true);
Field waiterQueue = AbstractAtomicSemaphoreService.class.getDeclaredField("waiterQueue");
waiterQueue.setAccessible(true);
Field timers = AbstractAtomicSemaphoreService.class.getDeclaredField("timers");
timers.setAccessible(true);
available.set(service, 10);
Map<Long, Integer> holdersMap = new HashMap<>();
holdersMap.put((long) 1, 2);
holdersMap.put((long) 3, 4);
holdersMap.put((long) 5, 6);
holders.set(service, holdersMap);
// Class<?> waiter = Class.forName("io.atomix.core.semaphore.impl.DistributedSemaphoreService$Waiter");
// LinkedList<Object> waiterLinkedList = new LinkedList<>();
//
// waiterLinkedList.add(waiter.getConstructors()[0].newInstance(service,10L, 20L, 30L, 40, Long.MAX_VALUE));
// waiterQueue.set(service, waiterLinkedList);
Buffer buffer = HeapBuffer.allocate();
service.backup(new DefaultBackupOutput(buffer, service.serializer()));
AbstractAtomicSemaphoreService serviceRestore = new DefaultAtomicSemaphoreService(new AtomicSemaphoreServiceConfig().setInitialCapacity(10));
serviceRestore.restore(new DefaultBackupInput(buffer.flip(), service.serializer()));
assertEquals(10, available.get(serviceRestore));
assertEquals(holdersMap, holders.get(serviceRestore));
// assertEquals(waiterQueue.get(serviceRestore), waiterLinkedList);
// assertEquals(1, ((Map) (timers.get(serviceRestore))).keySet().size());
}
use of io.atomix.primitive.service.impl.DefaultBackupInput in project atomix by atomix.
the class DefaultLeaderElectionServiceTest method testSnapshot.
@Test
public void testSnapshot() throws Exception {
ServiceContext context = mock(ServiceContext.class);
when(context.serviceType()).thenReturn(LeaderElectionType.instance());
when(context.serviceName()).thenReturn("test");
when(context.serviceId()).thenReturn(PrimitiveId.from(1));
when(context.wallClock()).thenReturn(new WallClock());
Session session = mock(Session.class);
when(session.sessionId()).thenReturn(SessionId.from(1));
when(context.currentSession()).thenReturn(session);
DefaultLeaderElectionService service = new DefaultLeaderElectionService();
service.init(context);
service.register(session);
byte[] id = "a".getBytes();
service.run(id);
Buffer buffer = HeapBuffer.allocate();
service.backup(new DefaultBackupOutput(buffer, service.serializer()));
service = new DefaultLeaderElectionService();
service.init(context);
service.register(session);
service.restore(new DefaultBackupInput(buffer.flip(), service.serializer()));
Leadership<byte[]> value = service.getLeadership();
assertNotNull(value);
assertArrayEquals(id, value.leader().id());
}
use of io.atomix.primitive.service.impl.DefaultBackupInput in project atomix by atomix.
the class DefaultDistributedQueueServiceTest method testSnapshot.
@Test
@SuppressWarnings("unchecked")
public void testSnapshot() throws Exception {
ServiceContext context = mock(ServiceContext.class);
when(context.serviceType()).thenReturn(DistributedSetType.instance());
when(context.serviceName()).thenReturn("test");
when(context.serviceId()).thenReturn(PrimitiveId.from(1));
when(context.wallClock()).thenReturn(new WallClock());
Session session = mock(Session.class);
when(session.sessionId()).thenReturn(SessionId.from(1));
DefaultDistributedQueueService service = new DefaultDistributedQueueService();
service.init(context);
service.add("foo");
Buffer buffer = HeapBuffer.allocate();
service.backup(new DefaultBackupOutput(buffer, service.serializer()));
service = new DefaultDistributedQueueService();
service.restore(new DefaultBackupInput(buffer.flip(), service.serializer()));
assertEquals("foo", service.remove());
}
use of io.atomix.primitive.service.impl.DefaultBackupInput in project atomix by atomix.
the class DefaultDistributedNavigableSetServiceTest method testSnapshot.
@Test
@SuppressWarnings("unchecked")
public void testSnapshot() throws Exception {
ServiceContext context = mock(ServiceContext.class);
when(context.serviceType()).thenReturn(DistributedSetType.instance());
when(context.serviceName()).thenReturn("test");
when(context.serviceId()).thenReturn(PrimitiveId.from(1));
when(context.wallClock()).thenReturn(new WallClock());
Session session = mock(Session.class);
when(session.sessionId()).thenReturn(SessionId.from(1));
DefaultDistributedNavigableSetService service = new DefaultDistributedNavigableSetService();
service.init(context);
service.add("foo");
Buffer buffer = HeapBuffer.allocate();
service.backup(new DefaultBackupOutput(buffer, service.serializer()));
service = new DefaultDistributedNavigableSetService();
service.restore(new DefaultBackupInput(buffer.flip(), service.serializer()));
assertTrue(service.contains("foo"));
}
Aggregations