UNPKG

pipeproc

Version:

Multi-process log processing for nodejs

49 lines (48 loc) 1.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = __importDefault(require("debug")); const commitLog_1 = require("./commitLog"); const ack_1 = require("./ack"); const transaction_1 = require("./transaction"); const d = debug_1.default("pipeproc:node"); function ackCommitLog(db, activeTopics, activeProcs, procName, log, callback) { d("ack for proc:", procName); const myProc = activeProcs.find(p => p.name === procName); if (!myProc) { return callback(new Error("invalid_proc"), ["", ""]); } const creationTime = Date.now(); const tx = transaction_1.transaction(db); tx.add(ack_1.prepareAck(db, myProc)); d("acking:", myProc.lastClaimedRange); d("new log(s):\n%O", log); if (Array.isArray(log)) { log.forEach(l => tx.add(commitLog_1.preCommit(db, activeTopics, l, creationTime))); } else { tx.add(commitLog_1.preCommit(db, activeTopics, log, creationTime)); } tx.commitUpdate(function (err, lastAckedAt, commit) { if (err) { callback(err, ["", ""]); } else if (lastAckedAt && (typeof commit === "string" || (Array.isArray(commit) && commit.length > 0))) { myProc.lastAckedRange = myProc.lastClaimedRange; myProc.lastAckedAt = lastAckedAt; myProc.reclaims = 0; if (Array.isArray(log)) { callback(null, [myProc.lastAckedRange, commit]); } else { callback(null, [myProc.lastAckedRange, commit]); } } else { callback(null, ["", ""]); } }); } exports.ackCommitLog = ackCommitLog;