pg-boss 9.0.2 → 10.0.0-beta1
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/README.md +9 -22
- package/package.json +3 -8
- package/src/attorney.js +74 -85
- package/src/boss.js +97 -132
- package/src/contractor.js +14 -0
- package/src/db.js +40 -0
- package/src/index.js +65 -55
- package/src/manager.js +211 -115
- package/src/migrationStore.js +127 -71
- package/src/plans.js +336 -291
- package/src/timekeeper.js +4 -6
- package/src/tools.js +28 -0
- package/src/worker.js +3 -3
- package/types.d.ts +16 -34
- package/version.json +1 -1
- package/coverage/lcov-report/attorney.js.html +0 -1342
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/boss.js.html +0 -850
- package/coverage/lcov-report/contractor.js.html +0 -322
- package/coverage/lcov-report/db.js.html +0 -208
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -251
- package/coverage/lcov-report/index.js.html +0 -634
- package/coverage/lcov-report/manager.js.html +0 -1930
- package/coverage/lcov-report/migrationStore.js.html +0 -604
- package/coverage/lcov-report/plans.js.html +0 -2224
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/timekeeper.js.html +0 -814
- package/coverage/lcov-report/worker.js.html +0 -382
- package/coverage/lcov.info +0 -2058
package/src/migrationStore.js
CHANGED
|
@@ -64,6 +64,133 @@ function migrate (value, version, migrations) {
|
|
|
64
64
|
|
|
65
65
|
function getAll (schema) {
|
|
66
66
|
return [
|
|
67
|
+
{
|
|
68
|
+
release: '10.0.0',
|
|
69
|
+
version: 21,
|
|
70
|
+
previous: 20,
|
|
71
|
+
install: [
|
|
72
|
+
`DROP INDEX ${schema}.job_singletonKey`,
|
|
73
|
+
`DROP INDEX ${schema}.job_singleton_queue`,
|
|
74
|
+
`DROP INDEX ${schema}.job_singletonOn`,
|
|
75
|
+
`DROP INDEX ${schema}.job_singletonKeyOn`,
|
|
76
|
+
`DROP INDEX ${schema}.job_fetch`,
|
|
77
|
+
`DROP INDEX ${schema}.job_name`,
|
|
78
|
+
|
|
79
|
+
`ALTER TABLE ${schema}.job ADD COLUMN deadletter text`,
|
|
80
|
+
`ALTER TABLE ${schema}.job ADD COLUMN policy text`,
|
|
81
|
+
`ALTER TABLE ${schema}.job DROP COLUMN on_complete`,
|
|
82
|
+
|
|
83
|
+
// update state enum
|
|
84
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state TYPE text`,
|
|
85
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state DROP DEFAULT`,
|
|
86
|
+
`ALTER TABLE ${schema}.archive ALTER COLUMN state TYPE text`,
|
|
87
|
+
|
|
88
|
+
`DROP TABLE IF EXISTS ${schema}.archive_backup`,
|
|
89
|
+
`ALTER TABLE ${schema}.archive RENAME to archive_backup`,
|
|
90
|
+
`ALTER INDEX ${schema}.archive_archivedon_idx RENAME to archive_backup_archivedon_idx`,
|
|
91
|
+
|
|
92
|
+
`DROP TYPE ${schema}.job_state`,
|
|
93
|
+
`CREATE TYPE ${schema}.job_state AS ENUM ('created','retry','active','completed','cancelled','failed')`,
|
|
94
|
+
|
|
95
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state TYPE ${schema}.job_state USING state::${schema}.job_state`,
|
|
96
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state SET DEFAULT 'created'::${schema}.job_state`,
|
|
97
|
+
|
|
98
|
+
`DELETE FROM ${schema}.job WHERE name LIKE '__pgboss__%'`,
|
|
99
|
+
|
|
100
|
+
// set up job partitioning
|
|
101
|
+
`ALTER TABLE ${schema}.job RENAME TO job_default`,
|
|
102
|
+
`ALTER TABLE ${schema}.job_default DROP CONSTRAINT IF EXISTS job_pkey`,
|
|
103
|
+
|
|
104
|
+
`CREATE TABLE ${schema}.job (
|
|
105
|
+
id uuid not null default gen_random_uuid(),
|
|
106
|
+
name text not null,
|
|
107
|
+
priority integer not null default(0),
|
|
108
|
+
data jsonb,
|
|
109
|
+
state ${schema}.job_state not null default('created'),
|
|
110
|
+
retryLimit integer not null default(0),
|
|
111
|
+
retryCount integer not null default(0),
|
|
112
|
+
retryDelay integer not null default(0),
|
|
113
|
+
retryBackoff boolean not null default false,
|
|
114
|
+
startAfter timestamp with time zone not null default now(),
|
|
115
|
+
startedOn timestamp with time zone,
|
|
116
|
+
singletonKey text,
|
|
117
|
+
singletonOn timestamp without time zone,
|
|
118
|
+
expireIn interval not null default interval '15 minutes',
|
|
119
|
+
createdOn timestamp with time zone not null default now(),
|
|
120
|
+
completedOn timestamp with time zone,
|
|
121
|
+
keepUntil timestamp with time zone NOT NULL default now() + interval '14 days',
|
|
122
|
+
output jsonb,
|
|
123
|
+
deadletter text,
|
|
124
|
+
policy text,
|
|
125
|
+
CONSTRAINT job_pkey PRIMARY KEY (name, id)
|
|
126
|
+
) PARTITION BY LIST (name)`,
|
|
127
|
+
|
|
128
|
+
`ALTER TABLE ${schema}.job ATTACH PARTITION ${schema}.job_default DEFAULT`,
|
|
129
|
+
|
|
130
|
+
`CREATE TABLE ${schema}.archive (LIKE ${schema}.job)`,
|
|
131
|
+
`ALTER TABLE ${schema}.archive ADD CONSTRAINT archive_pkey PRIMARY KEY (name, id)`,
|
|
132
|
+
`ALTER TABLE ${schema}.archive ADD archivedOn timestamptz NOT NULL DEFAULT now()`,
|
|
133
|
+
`CREATE INDEX archive_archivedon_idx ON ${schema}.archive(archivedon)`,
|
|
134
|
+
`CREATE INDEX archive_name_idx ON ${schema}.archive(name)`,
|
|
135
|
+
|
|
136
|
+
`CREATE INDEX job_fetch ON ${schema}.job (name text_pattern_ops, startAfter) INCLUDE (priority, createdOn, id) WHERE state < 'active'`,
|
|
137
|
+
`CREATE INDEX job_name ON ${schema}.job (name text_pattern_ops)`,
|
|
138
|
+
`CREATE UNIQUE INDEX job_policy_short ON ${schema}.job (name) WHERE state = 'created' AND policy = 'short'`,
|
|
139
|
+
`CREATE UNIQUE INDEX job_policy_singleton ON ${schema}.job (name) WHERE state = 'active' AND policy = 'singleton'`,
|
|
140
|
+
`CREATE UNIQUE INDEX job_policy_stately ON ${schema}.job (name, state) WHERE state <= 'active' AND policy = 'stately'`,
|
|
141
|
+
`CREATE UNIQUE INDEX job_throttle_key ON ${schema}.job (name, singletonKey) WHERE state <= 'completed' AND singletonOn IS NULL`,
|
|
142
|
+
`CREATE UNIQUE INDEX job_throttle_on ON ${schema}.job (name, singletonOn, COALESCE(singletonKey, '')) WHERE state <= 'completed' AND singletonOn IS NOT NULL`,
|
|
143
|
+
|
|
144
|
+
`ALTER TABLE ${schema}.version ADD COLUMN monitored_on timestamp with time zone`,
|
|
145
|
+
|
|
146
|
+
`CREATE TABLE ${schema}.queue (
|
|
147
|
+
name text primary key,
|
|
148
|
+
policy text,
|
|
149
|
+
retry_limit int,
|
|
150
|
+
retry_delay int,
|
|
151
|
+
retry_backoff bool,
|
|
152
|
+
expire_seconds int,
|
|
153
|
+
retention_minutes int,
|
|
154
|
+
dead_letter text,
|
|
155
|
+
created_on timestamp with time zone not null default now()
|
|
156
|
+
)`
|
|
157
|
+
],
|
|
158
|
+
uninstall: [
|
|
159
|
+
`DROP INDEX ${schema}.job_policy_stately`,
|
|
160
|
+
`DROP INDEX ${schema}.job_policy_short`,
|
|
161
|
+
`DROP INDEX ${schema}.job_policy_singleton`,
|
|
162
|
+
`DROP INDEX ${schema}.job_throttle_on`,
|
|
163
|
+
`DROP INDEX ${schema}.job_throttle_key`,
|
|
164
|
+
`DROP INDEX ${schema}.job_fetch`,
|
|
165
|
+
`DROP INDEX ${schema}.job_name`,
|
|
166
|
+
`ALTER TABLE ${schema}.job DETACH PARTITION ${schema}.job_default`,
|
|
167
|
+
`DROP TABLE ${schema}.job`,
|
|
168
|
+
`ALTER TABLE ${schema}.job_default RENAME TO job`,
|
|
169
|
+
`DROP TABLE IF EXISTS ${schema}.archive_backup`,
|
|
170
|
+
`DROP INDEX ${schema}.archive_name_idx`,
|
|
171
|
+
`ALTER TABLE ${schema}.job DROP COLUMN deadletter`,
|
|
172
|
+
`ALTER TABLE ${schema}.job DROP COLUMN policy`,
|
|
173
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state TYPE text`,
|
|
174
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state DROP DEFAULT`,
|
|
175
|
+
`ALTER TABLE ${schema}.archive ALTER COLUMN state TYPE text`,
|
|
176
|
+
`DROP TYPE ${schema}.job_state`,
|
|
177
|
+
`CREATE TYPE ${schema}.job_state AS ENUM ('created','retry','active','completed','expired','cancelled','failed')`,
|
|
178
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state TYPE ${schema}.job_state USING state::${schema}.job_state`,
|
|
179
|
+
`ALTER TABLE ${schema}.job ALTER COLUMN state SET DEFAULT 'created'::${schema}.job_state`,
|
|
180
|
+
`ALTER TABLE ${schema}.job ADD COLUMN on_complete bool NOT NULL DEFAULT false`,
|
|
181
|
+
`ALTER TABLE ${schema}.archive ALTER COLUMN state TYPE ${schema}.job_state USING state::${schema}.job_state`,
|
|
182
|
+
`ALTER TABLE ${schema}.archive DROP COLUMN policy`,
|
|
183
|
+
`ALTER TABLE ${schema}.archive DROP CONSTRAINT archive_pkey`,
|
|
184
|
+
`CREATE INDEX job_fetch ON ${schema}.job (name text_pattern_ops, startAfter) WHERE state < 'active'`,
|
|
185
|
+
`CREATE INDEX job_name ON ${schema}.job (name text_pattern_ops)`,
|
|
186
|
+
`CREATE UNIQUE INDEX job_singletonOn ON ${schema}.job (name, singletonOn) WHERE state < 'expired' AND singletonKey IS NULL`,
|
|
187
|
+
`CREATE UNIQUE INDEX job_singletonKeyOn ON ${schema}.job (name, singletonOn, singletonKey) WHERE state < 'expired'`,
|
|
188
|
+
`CREATE UNIQUE INDEX job_singletonKey ON ${schema}.job (name, singletonKey) WHERE state < 'completed' AND singletonOn IS NULL AND NOT singletonKey LIKE '\\_\\_pgboss\\_\\_singleton\\_queue%'`,
|
|
189
|
+
`CREATE UNIQUE INDEX job_singleton_queue ON ${schema}.job (name, singletonKey) WHERE state < 'active' AND singletonOn IS NULL AND singletonKey LIKE '\\_\\_pgboss\\_\\_singleton\\_queue%'`,
|
|
190
|
+
`DROP TABLE ${schema}.queue`,
|
|
191
|
+
`ALTER TABLE ${schema}.version DROP COLUMN monitored_on`
|
|
192
|
+
]
|
|
193
|
+
},
|
|
67
194
|
{
|
|
68
195
|
release: '7.4.0',
|
|
69
196
|
version: 20,
|
|
@@ -97,77 +224,6 @@ function getAll (schema) {
|
|
|
97
224
|
uninstall: [
|
|
98
225
|
`DROP TABLE ${schema}.subscription`
|
|
99
226
|
]
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
release: '6.1.1',
|
|
103
|
-
version: 18,
|
|
104
|
-
previous: 17,
|
|
105
|
-
install: [
|
|
106
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN on_complete SET DEFAULT false`
|
|
107
|
-
]
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
release: '6.0.0',
|
|
111
|
-
version: 17,
|
|
112
|
-
previous: 16,
|
|
113
|
-
install: [
|
|
114
|
-
`DROP INDEX ${schema}.job_singletonKey`,
|
|
115
|
-
`CREATE UNIQUE INDEX job_singletonKey ON ${schema}.job (name, singletonKey) WHERE state < 'completed' AND singletonOn IS NULL AND NOT singletonKey = '__pgboss__singleton_queue'`,
|
|
116
|
-
`CREATE UNIQUE INDEX job_singleton_queue ON ${schema}.job (name, singletonKey) WHERE state < 'active' AND singletonOn IS NULL AND singletonKey = '__pgboss__singleton_queue'`,
|
|
117
|
-
`CREATE INDEX IF NOT EXISTS job_fetch ON ${schema}.job (name text_pattern_ops, startAfter) WHERE state < 'active'`,
|
|
118
|
-
`ALTER TABLE ${schema}.job ADD output jsonb`,
|
|
119
|
-
`ALTER TABLE ${schema}.archive ADD output jsonb`,
|
|
120
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN on_complete SET DEFAULT false`,
|
|
121
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN keepuntil SET DEFAULT now() + interval '14 days'`
|
|
122
|
-
],
|
|
123
|
-
uninstall: [
|
|
124
|
-
`DROP INDEX ${schema}.job_fetch`,
|
|
125
|
-
`DROP INDEX ${schema}.job_singleton_queue`,
|
|
126
|
-
`DROP INDEX ${schema}.job_singletonKey`,
|
|
127
|
-
`CREATE UNIQUE INDEX job_singletonKey ON ${schema}.job (name, singletonKey) WHERE state < 'completed' AND singletonOn IS NULL`,
|
|
128
|
-
`ALTER TABLE ${schema}.job DROP COLUMN output`,
|
|
129
|
-
`ALTER TABLE ${schema}.archive DROP COLUMN output`,
|
|
130
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN on_complete SET DEFAULT true`,
|
|
131
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN keepuntil SET DEFAULT now() + interval '30 days'`
|
|
132
|
-
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
release: '5.2.0',
|
|
136
|
-
version: 16,
|
|
137
|
-
previous: 15,
|
|
138
|
-
install: [
|
|
139
|
-
`ALTER TABLE ${schema}.job ADD on_complete boolean`,
|
|
140
|
-
`UPDATE ${schema}.job SET on_complete = true`,
|
|
141
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN on_complete SET DEFAULT true`,
|
|
142
|
-
`ALTER TABLE ${schema}.job ALTER COLUMN on_complete SET NOT NULL`,
|
|
143
|
-
`ALTER TABLE ${schema}.archive ADD on_complete boolean`
|
|
144
|
-
],
|
|
145
|
-
uninstall: [
|
|
146
|
-
`ALTER TABLE ${schema}.job DROP COLUMN on_complete`,
|
|
147
|
-
`ALTER TABLE ${schema}.archive DROP COLUMN on_complete`
|
|
148
|
-
]
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
release: '5.0.6',
|
|
152
|
-
version: 15,
|
|
153
|
-
previous: 14,
|
|
154
|
-
install: [
|
|
155
|
-
`ALTER TABLE ${schema}.version ADD cron_on timestamp with time zone`
|
|
156
|
-
],
|
|
157
|
-
uninstall: [
|
|
158
|
-
`ALTER TABLE ${schema}.version DROP COLUMN cron_on`
|
|
159
|
-
]
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
release: '5.0.0',
|
|
163
|
-
version: 14,
|
|
164
|
-
previous: 13,
|
|
165
|
-
install: [
|
|
166
|
-
`ALTER TABLE ${schema}.version ADD maintained_on timestamp with time zone`
|
|
167
|
-
],
|
|
168
|
-
uninstall: [
|
|
169
|
-
`ALTER TABLE ${schema}.version DROP COLUMN maintained_on`
|
|
170
|
-
]
|
|
171
227
|
}
|
|
172
228
|
]
|
|
173
229
|
}
|