pipeproc
Version:
Multi-process log processing for nodejs
66 lines (65 loc) • 2.25 kB
JavaScript
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 transaction_1 = require("./transaction");
const resumeDisableProc_1 = require("./resumeDisableProc");
const d = debug_1.default("pipeproc:node");
function reclaimProc(db, activeProcs, procName, callback) {
const myProc = activeProcs.find(p => p.name === procName);
if (!myProc) {
return callback(new Error("invalid_proc"));
}
if (myProc.status === "disabled") {
return callback(new Error("proc_is_disabled"));
}
if (myProc.lastAckedRange === myProc.lastClaimedRange) {
return callback(new Error("nothing_to_reclaim"));
}
d("reclaiming proc:", myProc.name);
const tx = transaction_1.transaction(db);
const prefix = `~~system~~#proc#${myProc.topic}#${myProc.name}#`;
tx.add([{
key: `${prefix}lastClaimedRange`,
value: myProc.previousClaimedRange
}, {
key: `${prefix}reclaims`,
value: `${myProc.reclaims + 1}`
}]);
tx.commitUpdate(function (err) {
if (err) {
callback(err);
}
else {
myProc.lastClaimedRange = myProc.previousClaimedRange;
myProc.reclaims = myProc.reclaims + 1;
executeStrategy(db, activeProcs, myProc, function (strategyErr) {
if (err) {
callback(strategyErr);
}
else {
callback(null, myProc.lastClaimedRange);
}
});
}
});
}
exports.reclaimProc = reclaimProc;
function executeStrategy(db, activeProcs, myProc, callback) {
if (myProc.onMaxReclaimsReached === "disable" &&
myProc.reclaims >= myProc.maxReclaims && myProc.maxReclaims !== -1) {
resumeDisableProc_1.disableProc(db, activeProcs, myProc.name, function (err) {
if (err) {
callback(err);
}
else {
callback();
}
});
}
else {
callback();
}
}
;