@budibase/backend-core 2.6.19-alpha.31 → 2.6.19-alpha.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/backend-core",
3
- "version": "2.6.19-alpha.31",
3
+ "version": "2.6.19-alpha.35",
4
4
  "description": "Budibase backend core libraries used in server and worker",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "dependencies": {
23
23
  "@budibase/nano": "10.1.2",
24
24
  "@budibase/pouchdb-replication-stream": "1.2.10",
25
- "@budibase/types": "2.6.19-alpha.31",
25
+ "@budibase/types": "2.6.19-alpha.35",
26
26
  "@shopify/jest-koa-mocks": "5.0.1",
27
27
  "@techpass/passport-openidconnect": "0.3.2",
28
28
  "aws-cloudfront-sign": "2.2.0",
@@ -102,5 +102,5 @@
102
102
  }
103
103
  }
104
104
  },
105
- "gitHead": "46abe5917ecc3ed921f10dfd9aff09f1970f80c3"
105
+ "gitHead": "2e6bc8435cb14649a8cc000a76d661fc121f21d1"
106
106
  }
@@ -1,4 +1,6 @@
1
+ import Redlock from "redlock";
1
2
  import { LockOptions } from "@budibase/types";
3
+ export declare function newRedlock(opts?: Redlock.Options): Promise<Redlock>;
2
4
  declare type SuccessfulRedlockExecution<T> = {
3
5
  executed: true;
4
6
  result: T;
@@ -7,5 +9,5 @@ declare type UnsuccessfulRedlockExecution = {
7
9
  executed: false;
8
10
  };
9
11
  declare type RedlockExecution<T> = SuccessfulRedlockExecution<T> | UnsuccessfulRedlockExecution;
10
- export declare const doWithLock: <T>(opts: LockOptions, task: () => Promise<T>) => Promise<RedlockExecution<T>>;
12
+ export declare function doWithLock<T>(opts: LockOptions, task: () => Promise<T>): Promise<RedlockExecution<T>>;
11
13
  export {};
@@ -35,39 +35,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.doWithLock = void 0;
38
+ exports.doWithLock = exports.newRedlock = void 0;
39
39
  const redlock_1 = __importDefault(require("redlock"));
40
40
  const init_1 = require("./init");
41
41
  const types_1 = require("@budibase/types");
42
42
  const context = __importStar(require("../context"));
43
43
  const environment_1 = __importDefault(require("../environment"));
44
- const getClient = (type, opts) => __awaiter(void 0, void 0, void 0, function* () {
45
- if (type === types_1.LockType.CUSTOM) {
46
- return newRedlock(opts);
47
- }
48
- if (environment_1.default.isTest() && type !== types_1.LockType.TRY_ONCE) {
49
- return newRedlock(OPTIONS.TEST);
50
- }
51
- switch (type) {
52
- case types_1.LockType.TRY_ONCE: {
53
- return newRedlock(OPTIONS.TRY_ONCE);
54
- }
55
- case types_1.LockType.DEFAULT: {
56
- return newRedlock(OPTIONS.DEFAULT);
44
+ function getClient(type, opts) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ if (type === types_1.LockType.CUSTOM) {
47
+ return newRedlock(opts);
57
48
  }
58
- case types_1.LockType.DELAY_500: {
59
- return newRedlock(OPTIONS.DELAY_500);
49
+ if (environment_1.default.isTest() && type !== types_1.LockType.TRY_ONCE) {
50
+ return newRedlock(OPTIONS.TEST);
60
51
  }
61
- default: {
62
- throw new Error(`Could not get redlock client: ${type}`);
52
+ switch (type) {
53
+ case types_1.LockType.TRY_ONCE: {
54
+ return newRedlock(OPTIONS.TRY_ONCE);
55
+ }
56
+ case types_1.LockType.TRY_TWICE: {
57
+ return newRedlock(OPTIONS.TRY_TWICE);
58
+ }
59
+ case types_1.LockType.DEFAULT: {
60
+ return newRedlock(OPTIONS.DEFAULT);
61
+ }
62
+ case types_1.LockType.DELAY_500: {
63
+ return newRedlock(OPTIONS.DELAY_500);
64
+ }
65
+ default: {
66
+ throw new Error(`Could not get redlock client: ${type}`);
67
+ }
63
68
  }
64
- }
65
- });
69
+ });
70
+ }
66
71
  const OPTIONS = {
67
72
  TRY_ONCE: {
68
73
  // immediately throws an error if the lock is already held
69
74
  retryCount: 0,
70
75
  },
76
+ TRY_TWICE: {
77
+ retryCount: 1,
78
+ },
71
79
  TEST: {
72
80
  // higher retry count in unit tests
73
81
  // due to high contention.
@@ -91,56 +99,64 @@ const OPTIONS = {
91
99
  retryDelay: 500,
92
100
  },
93
101
  };
94
- const newRedlock = (opts = {}) => __awaiter(void 0, void 0, void 0, function* () {
95
- let options = Object.assign(Object.assign({}, OPTIONS.DEFAULT), opts);
96
- const redisWrapper = yield (0, init_1.getLockClient)();
97
- const client = redisWrapper.getClient();
98
- return new redlock_1.default([client], options);
99
- });
100
- const doWithLock = (opts, task) => __awaiter(void 0, void 0, void 0, function* () {
101
- const redlock = yield getClient(opts.type, opts.customOptions);
102
- let lock;
103
- try {
104
- // determine lock name
105
- // by default use the tenantId for uniqueness, unless using a system lock
106
- const prefix = opts.systemLock ? "system" : context.getTenantId();
107
- let name = `lock:${prefix}_${opts.name}`;
108
- // add additional unique name if required
109
- if (opts.resource) {
110
- name = name + `_${opts.resource}`;
111
- }
112
- // create the lock
113
- lock = yield redlock.lock(name, opts.ttl);
114
- // perform locked task
115
- // need to await to ensure completion before unlocking
116
- const result = yield task();
117
- return { executed: true, result };
102
+ function newRedlock(opts = {}) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ let options = Object.assign(Object.assign({}, OPTIONS.DEFAULT), opts);
105
+ const redisWrapper = yield (0, init_1.getLockClient)();
106
+ const client = redisWrapper.getClient();
107
+ return new redlock_1.default([client], options);
108
+ });
109
+ }
110
+ exports.newRedlock = newRedlock;
111
+ function getLockName(opts) {
112
+ // determine lock name
113
+ // by default use the tenantId for uniqueness, unless using a system lock
114
+ const prefix = opts.systemLock ? "system" : context.getTenantId();
115
+ let name = `lock:${prefix}_${opts.name}`;
116
+ // add additional unique name if required
117
+ if (opts.resource) {
118
+ name = name + `_${opts.resource}`;
118
119
  }
119
- catch (e) {
120
- console.warn("lock error");
121
- // lock limit exceeded
122
- if (e.name === "LockError") {
123
- if (opts.type === types_1.LockType.TRY_ONCE) {
124
- // don't throw for try-once locks, they will always error
125
- // due to retry count (0) exceeded
126
- console.warn(e);
127
- return { executed: false };
120
+ return name;
121
+ }
122
+ function doWithLock(opts, task) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const redlock = yield getClient(opts.type, opts.customOptions);
125
+ let lock;
126
+ try {
127
+ const name = getLockName(opts);
128
+ // create the lock
129
+ lock = yield redlock.lock(name, opts.ttl);
130
+ // perform locked task
131
+ // need to await to ensure completion before unlocking
132
+ const result = yield task();
133
+ return { executed: true, result };
134
+ }
135
+ catch (e) {
136
+ console.warn("lock error");
137
+ // lock limit exceeded
138
+ if (e.name === "LockError") {
139
+ if (opts.type === types_1.LockType.TRY_ONCE) {
140
+ // don't throw for try-once locks, they will always error
141
+ // due to retry count (0) exceeded
142
+ return { executed: false };
143
+ }
144
+ else {
145
+ console.error(e);
146
+ throw e;
147
+ }
128
148
  }
129
149
  else {
130
150
  console.error(e);
131
151
  throw e;
132
152
  }
133
153
  }
134
- else {
135
- console.error(e);
136
- throw e;
137
- }
138
- }
139
- finally {
140
- if (lock) {
141
- yield lock.unlock();
154
+ finally {
155
+ if (lock) {
156
+ yield lock.unlock();
157
+ }
142
158
  }
143
- }
144
- });
159
+ });
160
+ }
145
161
  exports.doWithLock = doWithLock;
146
162
  //# sourceMappingURL=redlockImpl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redlockImpl.js","sourceRoot":"","sources":["../../../src/redis/redlockImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redlockImpl.js","sourceRoot":"","sources":["../../../src/redis/redlockImpl.ts"],"names":[],"mappings":"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"}