public int DoWork() { int workCount = 0; if (CheckForClockTick()) { PollServiceAdapter(); workCount += 1; } if (null != logAdapter) { int polled = logAdapter.Poll(); if (0 == polled) { if (logAdapter.IsConsumed(aeron.CountersReader())) { _consensusModuleProxy.Ack(logAdapter.Position(), ackId++, serviceId); logAdapter.Dispose(); logAdapter = null; } else if (logAdapter.IsImageClosed()) { logAdapter.Dispose(); logAdapter = null; } } workCount += polled; } return(workCount); }
private void ConsumeImage(Image image, BoundedLogAdapter adapter) { while (true) { int workCount = adapter.Poll(); if (workCount == 0) { if (adapter.IsConsumed(aeron.CountersReader())) { _consensusModuleProxy.Ack(image.Position(), ackId++, serviceId); break; } if (image.Closed) { throw new ClusterException("unexpected close of replay"); } } Idle(workCount); } }