Open alxndrsn opened 5 years ago
@alxndrsn Thanks for posting! We'll take a look as soon as possible.
In the mean time, there are a few ways you can help speed things along:
Please remember: never post in a public forum if you believe you've found a genuine security vulnerability. Instead, disclose it responsibly.
For help with questions about Sails, click here.
It seems you can work around this by manually destroying the session postgresql pool, using sails.config.session.store.close();
.
In the example project, this can be done by changing test/config.js
to:
const sails = require('sails');
before(done => {
sails.lift({}, err => {
if (err) { return done(err); }
return done();
});
});
after(done => {
sails.lower(() => {
sails.config.session.store.close();
done();
});
});
@alxndrsn Thanks for exploring this shutdown delay with repro steps and a workaround. At the moment, our primary adapter in development sails-sql will improve upon sails-postgresql so this will be considered among development plans. Any further input of related applications / experiences from the community are welcome.
@johnabrams7 I'd be interested to hear what sails-sql
will do differently to sails-postgresql
; is there any documentation? Will it handle sessions, or will connect-pg-simple
still be required?
@alxndrsn - So far, Postgres support in sails-sql won't be entirely different from the sails-postgresql adapter to start and will require Node v8+. connect-pg-simple
will still be required as far I know. It's more of an effort to bring all the SQL adapters together to allow for more efficient development, releases, db flexibility. I know mysql and mssql have had more improvements in sails-sql, but postgresql improvements will come in good time.
This also prevents sails console
or sails lift
from shutting down quickly.
Again this can be worked around by calling sails.config.session.store.close();
in the callback from sails.lift()
in app.js
:
// Start server
sails.lift(rc('sails'), err => {
if(err) {
console.error('Failed to lift app:', err);
try {
sails.config.session.store.close();
} catch(err2) {
console.error('Error caught trying to shut down postgres session store:', err2);
}
return;
}
sails.log.verbose('App lifted successfully.');
});
@alxndrsn Appreciate the update & workaround! Will get this documented in the postgresql development notes.
@johnabrams7 would it be suitable to add the following to sails-postgresql
?
process.on('SIGTERM', () => {
try {
sails.config.session.store.close();
} catch(err) {
console.error('Error caught trying to shut down postgres session store:', err);
}
});
If so, any pointers where would be a suitable place to put this?
@alxndrsn Actually, sorry just realized connect-pg-simple
is used as the session hook and sails-postgresql
honestly has nothing to do with it π. This being said, a solution would reside in a change to connect-pg-simple
-OR- the session hook itself in Sails without changing connect-pg-simple
.
If you have any ideas for that let us know! π
@johnabrams7 is there a way to add a beforeShutdown
function from the session hook?
@alxndrsn Yes, you could override the session hook by creating api/hooks/session/ and copying whatβs in sails core + modifying the teardown function.
Node version: 10.16.0 Sails version (sails): 1.2.3 ORM hook version (sails-hook-orm): DB adapter & version (e.g. sails-mysql@5.55.5): sails-postgresql 1.0.2
connect-pg-simple
takes 10s to shutdown at the end of tests.Example project at: https://github.com/alxndrsn/sailsjs-connect-pg-simple-shutdown-delay
To recreate: