neo4j-javascript-driver: Session no longer writeable
When I turned on causal clustering, I got an issue where sessions would expire as no longer writeable.
I had a long-lived handle to the driver in an express app, closed when the app closes. Used like this:
const Mapper = require('./Mapper');
class BoltAdapter {
constructor(driver) {
this.driver = driver;
this.mapper = new Mapper()
}
cypherQueryAsync(query, params) {
let self = this;
return new Promise(function (resolve, reject) {
let session = self.driver.session();
session.readTransaction(transaction => {
transaction.run(query, params).then(result => {
session.close();
resolve(self.mapper.mapToNative(result.records))
}).catch(err => {
session.close();
reject(err)
})
})
})
}
writeQueryAsync(query, params) {
let self = this;
return new Promise(function (resolve, reject) {
let session = self.driver.session();
session.writeTransaction(transaction => {
transaction.run(query, params).then(result => {
session.close();
resolve(self.mapper.mapToNative(result.records))
}).catch(err => {
session.close();
reject(err)
})
})
})
}
close() {
this.driver.close()
}
}
module.exports = BoltAdapter;
Haven’t tested yet, but I’m guessing that if I obtain and close the driver for each transaction each time, it will probably work, however I expected a long lived driver to work, since the driver emits the session.
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Comments: 15 (7 by maintainers)
Hi @jasperblues,
I’ll close this issue for now. Please feel free to update it or open a new one if needed.
I see. Will give it a try, thanks a lot @lutovich!