UNPKG

@ydbjs/topic

Version:

YDB Topics client for publish-subscribe messaging. Provides at-least-once delivery, exactly-once publishing, FIFO guarantees, and scalable message processing for unstructured data.

47 lines 2.24 kB
import * as assert from 'node:assert'; import { loggers } from '@ydbjs/debug'; let dbg = loggers.topic.extend('reader'); export let _on_commit_offset_response = function on_commit_offset_response(ctx, input) { assert.ok(input.partitionsCommittedOffsets, 'commitOffsetResponse must have partitionsCommittedOffsets'); if (ctx.onCommittedOffset) { for (let part of input.partitionsCommittedOffsets) { let partitionSession = ctx.partitionSessions.get(part.partitionSessionId); if (!partitionSession) { dbg.log('error: commitOffsetResponse for unknown partitionSessionId=%s', part.partitionSessionId); continue; } ctx.onCommittedOffset(partitionSession, part.committedOffset); } } // Resolve all pending commits for the partition sessions. for (let part of input.partitionsCommittedOffsets) { let partitionSessionId = part.partitionSessionId; let committedOffset = part.committedOffset; // Update partition session's committed offset for consistency let partitionSession = ctx.partitionSessions.get(partitionSessionId); if (partitionSession) { partitionSession.partitionCommittedOffset = committedOffset; } // Resolve all pending commits for this partition session. let pendingCommits = ctx.pendingCommits.get(partitionSessionId); if (pendingCommits) { let i = 0; while (i < pendingCommits.length) { let commit = pendingCommits[i]; if (commit.offset <= committedOffset) { // If the commit offset is less than or equal to the committed offset, resolve it. commit.resolve(); pendingCommits.splice(i, 1); // Remove from pending commits } else { i++; } } } // If there are no pending commits for this partition session, remove it from the map. if (pendingCommits && pendingCommits.length === 0) { ctx.pendingCommits.delete(partitionSessionId); } } }; //# sourceMappingURL=_commit_offset_response.js.map