lib/workflow-in-memory-backend.js
function cancelJob(uuid, cb) {
            if (typeof (uuid) === 'undefined') {
                return cb(new e.BackendInternalError(
                  'cancelJob uuid(String) required'));
            }

            jobs[uuid].execution = 'canceled';
            delete jobs[uuid].runner_id;
            if (typeof (jobs[uuid].locks) !== 'undefined') {
                delete locked_targets[uuid];
            }
            return cb(null, jobs[uuid]);
        }
function cancelJob(uuid, cb) {
            if (typeof (uuid) === 'undefined') {
                return cb(new e.BackendInternalError(
                  'cancelJob uuid(String) required'));
            }

            jobs[uuid].execution = 'canceled';
            delete jobs[uuid].runner_id;
            if (typeof (jobs[uuid].locks) !== 'undefined') {
                delete locked_targets[uuid];
            }
            return cb(null, jobs[uuid]);
        }
Unlock the job, mark it as canceled, and remove the runner_id uuid - string, the job uuid. cb - f(err, job) callback will be called with error if something fails, otherwise it'll return the updated job using getJob.