denodrivers/postgres

BrokenPipe: Broken pipe (os error 32) not handled in reconnect logic

Opened this issue · 6 comments

I'm currently getting a crash sometimes when connecting to a remote database.

BrokenPipe: Broken pipe (os error 32)
    at write (ext:deno_net/01_net.js:34:21)
    at TcpConn.write (ext:deno_net/01_net.js:97:12)
    at BufWriter.flush (https://deno.land/std@0.160.0/io/buffer.ts:745:40)
    at Connection.#preparedQuery (https://deno.land/x/postgres@v0.17.0/connection/connection.ts:864:27)
    at eventLoopTick (ext:core/01_core.js:183:11)
    at async Connection.query (https://deno.land/x/postgres@v0.17.0/connection/connection.ts:951:16)
    at async Client.#executeQuery (https://deno.land/x/postgres@v0.17.0/client.ts:245:12)
    at async Client.queryObject (https://deno.land/x/postgres@v0.17.0/client.ts:433:12)
    at async Db.executeSql (file:///src/_shared/queue/db.ts:7:20)
    at async Manager.createJob (file:///src/_shared/packages/pg-boss/manager.js:490:20)

Seems like there's a check for connection errors that will reconnect, but not broken pipe errors.

I am getting this one too. Is there any update on it?

Hey, would be helpfully to check what version is being used and if it happens in the newest.

Sure thing, I'm using 1.17.0, but I now see there's 1.17.2, I'm switching now, but I won't be able to recreate the problem for a few hours. My deno version is 1.40.3.

BrokenPipe: Broken pipe (os error 32)
    at write (ext:deno_net/01_net.js:58:21)
    at TcpConn.write (ext:deno_net/01_net.js:130:12)
    at BufWriter.flush (https://deno.land/std@0.160.0/io/buffer.ts:745:40)
    at Connection.#preparedQuery (https://deno.land/x/postgres@v0.17.0/connection/connection.ts:864:27)
    at eventLoopTick (ext:core/01_core.js:64:7)
    at async Connection.query (https://deno.land/x/postgres@v0.17.0/connection/connection.ts:951:16)
    at async Client.#executeQuery (https://deno.land/x/postgres@v0.17.0/client.ts:245:12)
    at async Client.queryObject (https://deno.land/x/postgres@v0.17.0/client.ts:433:12)
    at async file:///.../master/server/utilities/databases.ts:738:32
    at async attemptAsync (file:///.../master/shared/check.ts:134:23) {
  name: "BrokenPipe",
  code: "EPIPE"
}

Same here, using 0.19.2

Latest versions of deno and postgres as of writing this comment. Issue is still there. It happens with transactions that take too long.

I found the actual reason behind it. Whenever you create a transaction and then leave that transaction idle longer than idle_in_transaction_session_timeout, Posgresql server will close the session. And that causes the above error.