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)

Most upvoted comments

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!