Skip to content

Commit 80ef4d2

Browse files
authored
Merge pull request #9 from npm/jpg619/remove-bluebird
[REMOVE] Bluebird
2 parents 8508358 + 40afcc4 commit 80ef4d2

14 files changed

+155
-143
lines changed

db-session.js

+61-59
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict'
22

33
const DOMAIN_TO_SESSION = new WeakMap()
4-
const Promise = require('bluebird')
54

65
const TxSessionConnectionPair = require('./lib/tx-session-connpair.js')
76
const SessionConnectionPair = require('./lib/session-connpair.js')
@@ -44,20 +43,16 @@ const api = module.exports = {
4443
},
4544

4645
atomic (operation) {
47-
return function atomic$operation () {
48-
return Promise.try(() => {
49-
const args = [].slice.call(arguments)
50-
return api.session.atomic(operation.bind(this), args)
51-
})
46+
return async function atomic$operation () {
47+
const args = [].slice.call(arguments)
48+
return await api.session.atomic(operation.bind(this), args)
5249
}
5350
},
5451

5552
transaction (operation) {
56-
return function transaction$operation () {
57-
return Promise.try(() => {
58-
const args = [].slice.call(arguments)
59-
return api.session.transaction(operation.bind(this), args)
60-
})
53+
return async function transaction$operation () {
54+
const args = [].slice.call(arguments)
55+
return await api.session.transaction(operation.bind(this), args)
6156
}
6257
},
6358

@@ -140,15 +135,16 @@ class Session {
140135
}, operation, args)
141136

142137
const releasePair = getConnPair.then(pair => {
143-
return getResult.reflect().then(result => {
138+
return getResult.then(result => {
144139
this.metrics.onTransactionFinish(baton, operation, args, result)
145-
return result.isFulfilled()
146-
? pair.release()
147-
: pair.release(result.reason())
140+
return pair.release()
141+
}).catch(reason => {
142+
this.metrics.onTransactionFinish(baton, operation, args, reason)
143+
return pair.release(reason)
148144
})
149145
})
150146

151-
return releasePair.return(getResult)
147+
return releasePair.then(() => getResult)
152148
}
153149

154150
atomic (operation, args) {
@@ -209,15 +205,16 @@ class TransactionSession {
209205
}, operation, args)
210206

211207
const releasePair = atomicConnPair.then(pair => {
212-
return getResult.reflect().then(result => {
208+
return getResult.then(result => {
213209
this.metrics.onAtomicFinish(baton, operation, args, result)
214-
return result.isFulfilled()
215-
? pair.release()
216-
: pair.release(result.reason())
210+
return pair.release()
211+
}).catch(reason => {
212+
this.metrics.onAtomicFinish(baton, operation, args, reason)
213+
return pair.release(reason)
217214
})
218215
})
219216

220-
return releasePair.return(getResult)
217+
return releasePair.then(() => getResult)
221218
}
222219

223220
// NB: for use in tests _only_!)
@@ -233,59 +230,64 @@ class AtomicSession extends TransactionSession {
233230
}
234231
}
235232

236-
function Session$RunWrapped (parent,
237-
createSession,
238-
getConnPair,
239-
before,
240-
after,
241-
operation,
242-
args) {
243-
return getConnPair.then(pair => {
233+
function Session$RunWrapped(
234+
parent,
235+
createSession,
236+
getConnPair,
237+
before,
238+
after,
239+
operation,
240+
args
241+
) {
242+
return getConnPair.then((pair) => {
244243
const subdomain = domain.create()
245244
const session = createSession(pair)
246245
parent.metrics.onSubsessionStart(parent, session)
247246
DOMAIN_TO_SESSION.set(subdomain, session)
248247

249248
const runBefore = new Promise((resolve, reject) => {
250-
return pair.connection.query(
251-
before,
252-
err => err ? reject(err) : resolve()
249+
return pair.connection.query(before, (err) =>
250+
err ? reject(err) : resolve()
253251
)
254252
})
255253

256254
return runBefore.then(() => {
257255
const getResult = Promise.resolve(
258-
subdomain.run(() => Promise.try(() => {
259-
return operation.apply(null, args)
260-
}))
256+
subdomain.run(() => {
257+
return Promise.resolve().then(() => {
258+
return operation.apply(null, args)
259+
})
260+
})
261261
)
262262

263-
const reflectedResult = getResult.reflect()
263+
const waitOperation = getResult
264+
.then((result) => {
265+
return Promise.all([
266+
Promise.resolve(result),
267+
Promise.resolve(session.operation),
268+
])
269+
})
270+
.finally(() => {
271+
markInactive(subdomain)
272+
})
264273

265-
const waitOperation = Promise.join(
266-
reflectedResult,
267-
reflectedResult.then(() => session.operation)
268-
)
269-
.finally(markInactive(subdomain))
270-
.return(reflectedResult)
271-
272-
const runCommitStep = waitOperation.then(result => {
273-
return new Promise((resolve, reject) => {
274-
return pair.connection.query(
275-
result.isFulfilled()
276-
? after.success
277-
: after.failure,
278-
err => err ? reject(err) : resolve()
279-
)
274+
const runCommitStep = waitOperation
275+
.then(([result]) => {
276+
return new Promise((resolve, reject) => {
277+
return pair.connection.query(
278+
result ? after.success : after.failure,
279+
(err) => (err ? reject(err) : resolve())
280+
)
281+
})
280282
})
281-
}).then(
282-
() => parent.metrics.onSubsessionFinish(parent, session),
283-
err => {
284-
parent.metrics.onSubsessionFinish(parent, session)
285-
throw err
286-
}
287-
)
288-
return runCommitStep.return(getResult)
283+
.then(
284+
() => parent.metrics.onSubsessionFinish(parent, session),
285+
(err) => {
286+
parent.metrics.onSubsessionFinish(parent, session)
287+
throw err
288+
}
289+
)
290+
return runCommitStep.then(() => getResult)
289291
})
290292
})
291293
}

lib/tx-session-connpair.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
'use strict'
22

3-
const Promise = require('bluebird')
4-
53
const RESOLVE_SYM = Symbol('resolve')
64
const REJECT_SYM = Symbol('reject')
75

package.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@npm/pg-db-session",
3-
"version": "1.4.1",
3+
"version": "1.5.0",
44
"description": "domain-attached database sessions",
55
"main": "db-session.js",
66
"scripts": {
@@ -29,8 +29,5 @@
2929
"pg": "6.1.6",
3030
"standard": "10.0.2",
3131
"tap": "10.3.2"
32-
},
33-
"dependencies": {
34-
"bluebird": "3.5.0"
3532
}
3633
}

test/basic-atomic-concurrency-test.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
'use strict'
22

3-
const Promise = require('bluebird')
43
const test = require('tap').test
54

65
const domain = require('../lib/domain.js')
76
const db = require('../db-session.js')
7+
const delay = require('../utils/delay')
88

99
const LOGS = []
1010

1111
const runOperations = db.transaction(function runOperations (inner) {
1212
return Promise.all(Array.from(Array(4)).map((_, idx) => {
1313
return idx % 2 === 0 ? inner(idx) : db.getConnection().then(connPair => {
1414
LOGS.push(`load ${idx}`)
15-
return Promise.delay(5).then(() => {
15+
return delay(5).then(() => {
1616
LOGS.push(`release ${idx}`)
1717
connPair.release()
1818
})
@@ -22,10 +22,10 @@ const runOperations = db.transaction(function runOperations (inner) {
2222

2323
function runSubOperation (rootIdx) {
2424
return Promise.all(Array.from(Array(4)).map((_, idx) => {
25-
return Promise.delay(5).then(() => {
25+
return delay(5).then(() => {
2626
return db.getConnection().then(connPair => {
2727
LOGS.push(`load ${rootIdx} ${idx}`)
28-
return Promise.delay(5).then(() => {
28+
return delay(5).then(() => {
2929
LOGS.push(`release ${rootIdx} ${idx}`)
3030
connPair.release()
3131
})

test/basic-atomic-error-test.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

3-
const Promise = require('bluebird')
43
const test = require('tap').test
4+
const { promisify } = require('utils')
55

66
const domain = require('../lib/domain.js')
77
const db = require('../db-session.js')
@@ -17,17 +17,25 @@ test('test error in previous query', assert => {
1717
domain1.run(() => {
1818
return db.atomic(() => {
1919
const first = db.getConnection().then(conn => {
20-
return Promise.promisify(conn.connection.query)('ONE')
20+
const queryAsync = promisify(conn.connection.query).bind(conn.connection)
21+
return queryAsync('ONE')
2122
.then(() => conn.release())
22-
.catch(err => conn.release(err))
23+
.catch(err => {
24+
conn.release(err)
25+
throw err
26+
})
2327
})
2428

2529
const second = first.then(() => {
2630
return db.getConnection()
2731
}).then(conn => {
28-
return Promise.promisify(conn.connection.query)('TWO')
32+
const queryAsync = promisify(conn.connection.query).bind(conn.connection)
33+
return queryAsync('TWO')
2934
.then(() => conn.release())
30-
.catch(err => conn.release(err))
35+
.catch(err => {
36+
conn.release(err)
37+
throw err
38+
})
3139
})
3240

3341
return second.then(() => 'expect this value')
@@ -141,7 +149,7 @@ test('test error in ROLLBACK: does not reuse connection', assert => {
141149
pair.release()
142150
throw new Error('any kind of error, really')
143151
})
144-
})().reflect()
152+
})().catch(() => undefined)
145153

146154
const second = db.getConnection().then(pair => {
147155
// with concurrency=1, we will try to re-use
@@ -151,7 +159,7 @@ test('test error in ROLLBACK: does not reuse connection', assert => {
151159
pair.release()
152160
})
153161

154-
return Promise.join(first, second)
162+
return Promise.all([first, second])
155163
})
156164
.catch(err => assert.fail(err))
157165
.finally(() => domain1.exit())
@@ -169,4 +177,4 @@ test('test error in ROLLBACK: does not reuse connection', assert => {
169177
}
170178
}
171179
}
172-
})
180+
})

test/basic-rollback-test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ test('rolling back transaction calls ROLLBACK', assert => {
1616
domain1.run(() => {
1717
return db.transaction(() => {
1818
throw new Error('no thanks')
19-
})().reflect()
19+
})().catch(() => undefined)
2020
})
2121
.then(() => assert.equal(LOGS.join(' '), 'BEGIN ROLLBACK'))
2222
.catch(err => assert.fail(err))
@@ -44,7 +44,7 @@ test('rolling back atomic calls ROLLBACK', assert => {
4444
domain1.run(() => {
4545
return db.atomic(() => {
4646
throw new Error('no thanks')
47-
})().reflect()
47+
})().catch(() => undefined)
4848
})
4949
.then(() => {
5050
assert.equal(LOGS.join('\n').replace(/_[\d_]+$/gm, '_TS'), `

test/basic-session-concurrency-test.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
'use strict'
22

3-
const Promise = require('bluebird')
43
const test = require('tap').test
54

65
const domain = require('../lib/domain.js')
76
const db = require('../db-session.js')
7+
const delay = require('../utils/delay')
88

99
const LOGS = []
1010

11+
1112
test('test root session concurrency=0', assert => {
1213
const start = process.domain
1314
const domain1 = domain.create()
@@ -166,7 +167,7 @@ function runOperations () {
166167
return Promise.all(Array.from(Array(8)).map((_, idx) => {
167168
return db.getConnection().then(connPair => {
168169
LOGS.push(`load ${idx}`)
169-
return Promise.delay(5).then(() => {
170+
return delay(5).then(() => {
170171
LOGS.push(`release ${idx}`)
171172
connPair.release()
172173
})

0 commit comments

Comments
 (0)