Ctrl K
ComunidadGuías…

lib/driver-continuation-lease.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
function closeTarget(target) {
  if (!target || !target.queryInstance) return;
  try { target.queryInstance.close(); }
  catch (error) {}
}

function begin(source, target, proposalId) {
  var lease = {
    proposalId: proposalId,
    target: target,
    cancelled: false,
    error: null,
    waitingLateStartup: false,
  };
  lease.cancel = function (reason) {
    if (!lease.cancelled) {
      lease.cancelled = true;
      lease.error = reason || "The source received new work during continuation startup.";
      closeTarget(target);
    }
    if (typeof lease.onCancel === "function") return lease.onCancel(lease.error);
  };
  source._driverContinuationLease = lease;
  return lease;
}

function guard(lease, validate) {
  if (!lease || lease.cancelled) return false;
  try {
    var error = validate();
    if (!error) return true;
    lease.cancel(error);
  } catch (error) {
    lease.cancel(error.message || String(error));
  }
  return false;
}

function cancelForHumanMessage(session) {
  var lease = session && session._driverContinuationLease;
  if (!lease || typeof lease.cancel !== "function") return false;
  lease.cancel("New source work arrived during continuation startup.");
  return true;
}

function end(source, lease) {
  if (!source || source._driverContinuationLease !== lease) return false;
  delete source._driverContinuationLease;
  return true;
}

module.exports = { begin: begin, guard: guard, cancelForHumanMessage: cancelForHumanMessage, end: end };