public void RemoveOffset(MessageOffset messageOffset) { if (CommitPerMessage) { CommitOffset(messageOffset); } else { lock (_removeOffsetLock) { if (Offsets.Remove(messageOffset.Offset)) { RemovedMessageOffsets.Add(messageOffset.Offset, messageOffset); if (Offsets.Count > 0) { ConsumedOffset = Offsets.First() - 1; } else { ConsumedOffset = LastOffset; } } if (ConsumedOffset > LastCommittedOffset) { if (RemovedMessageOffsets.TryRemoveBeforeKey(ConsumedOffset, out var currentMessageOffset)) { CommitOffset(currentMessageOffset); } LastCommittedOffset = ConsumedOffset; } } } }
public void RemoveOffset(MessageOffset messageOffset) { _logger.LogDebug($"{messageOffset.Broker}.{messageOffset.Topic}.{messageOffset.Partition} remove offset {messageOffset.Offset} remain:{Offsets.Count}"); if (CommitPerMessage) { CommitOffset(messageOffset); } else { lock (_removeOffsetLock) { if (Offsets.Remove(messageOffset.Offset)) { RemovedMessageOffsets.Add(messageOffset.Offset, messageOffset); if (Offsets.Count > 0) { ConsumedOffset = Offsets.First() - 1; } else { ConsumedOffset = LastOffset; } } if (ConsumedOffset > LastCommittedOffset) { if (RemovedMessageOffsets.TryRemoveBeforeKey(ConsumedOffset, out var currentMessageOffset)) { CommitOffset(currentMessageOffset); } LastCommittedOffset = ConsumedOffset; } } } }