use of io.atomix.core.workqueue.Task in project atomix by atomix.
the class DefaultWorkQueueServiceTest method testSnapshot.
@Test
public void testSnapshot() throws Exception {
ServiceContext context = mock(ServiceContext.class);
when(context.serviceType()).thenReturn(WorkQueueType.instance());
when(context.serviceName()).thenReturn("test");
when(context.serviceId()).thenReturn(PrimitiveId.from(1));
Session session = mock(Session.class);
when(session.sessionId()).thenReturn(SessionId.from(1));
when(context.currentSession()).thenReturn(session);
DefaultWorkQueueService service = new DefaultWorkQueueService();
service.init(context);
service.register(session);
service.add(Arrays.asList("Hello world!".getBytes()));
Buffer buffer = HeapBuffer.allocate();
service.backup(new DefaultBackupOutput(buffer, service.serializer()));
service = new DefaultWorkQueueService();
service.init(context);
service.register(session);
service.restore(new DefaultBackupInput(buffer.flip(), service.serializer()));
Collection<Task<byte[]>> value = service.take(1);
assertNotNull(value);
assertEquals(1, value.size());
assertArrayEquals("Hello world!".getBytes(), value.iterator().next().payload());
}
use of io.atomix.core.workqueue.Task in project atomix by atomix.
the class DefaultWorkQueueService method add.
@Override
public void add(Collection<byte[]> items) {
AtomicInteger itemIndex = new AtomicInteger(0);
items.forEach(item -> {
String taskId = String.format("%d:%d:%d", getCurrentSession().sessionId().id(), getCurrentIndex(), itemIndex.getAndIncrement());
unassignedTasks.add(new Task<>(taskId, item));
});
// Send an event to all sessions that have expressed interest in task processing
// and are not actively processing a task.
registeredWorkers.forEach(sessionId -> getSession(sessionId).accept(client -> client.taskAvailable()));
// FIXME: This generates a lot of event traffic.
}
Aggregations