Node.js - соединение узла-oracledb зависает в Docker через 2 часа инактивации - PullRequest
0 голосов
/ 31 марта 2020

Я столкнулся со странной проблемой, я использую node-oracledb v4.2, и когда я развертываю приложение в контейнере, я могу получить данные из БД, это простой запрос выбора.

Статистика пула в это время -

Pool statistics:
...total up time (milliseconds): 1026553
...total connection requests: 38
...total requests enqueued: 0
...total requests dequeued: 0
...total requests failed: 0
...total request timeouts: 0
...max queue length: 0
...sum of time in queue (milliseconds): 0
...min time in queue (milliseconds): 0
...max time in queue (milliseconds): 0
...avg time in queue (milliseconds): 0
...pool connections in use: 0
...pool connections open: 2
Related pool attributes:
...poolAlias: default
...queueTimeout (milliseconds): 60000
...poolMin: 0
...poolMax: 10
...poolIncrement: 2
...poolTimeout (seconds): 60
...poolPingInterval: 60
...sessionCallback: undefined
...stmtCacheSize: 30
Pool status:
...status: 6000

После 2 часов бездействия, когда я вызываю сервис, мы получаем ошибку, и кажется, что conn = await oracledb.getConnection (); не возвращает никакого соединения из пула, и он зависает

Статистика пула в это время

Pool statistics:
...total up time (milliseconds): 8298059
...total connection requests: 46
...total requests enqueued: 0
...total requests dequeued: 0
...total requests failed: 0
...total request timeouts: 0
...max queue length: 0
...sum of time in queue (milliseconds): 0
...min time in queue (milliseconds): 0
...max time in queue (milliseconds): 0
...avg time in queue (milliseconds): 0

Я застрял не уверен, что происходит, пожалуйста, предложите

Обновленный комментарий -

Я использую приведенную ниже docker конфигурацию

FROM oraclelinux:7-slim

RUN  yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
     yum-config-manager --disable ol7_developer_EPEL --enable ol7_oracle_instantclient && \
     yum -y install nodejs oracle-instantclient19.5-basiclite && \
     rm -rf /var/cache/yum

Обновлено 2

function simpleExecute(statement, binds = [], opts = {}) {
    return new Promise(async (resolve, reject) => {
      let conn;

      opts.outFormat = oracledb.OBJECT;
      opts.autoCommit = true;

      try {
        conn = await oracledb.getConnection();
        logger.info("Got Connection"+(await oracledb.getConnection()).oracleServerVersion);
        const result = await conn.execute(statement, binds, opts);
        logger.info("Got Result");
        resolve(result);
      } catch (err) {
        logger.info("Error"+err);
        reject(err);

      } finally {
        if (conn) { // conn assignment worked, need to close
          try {
            await conn.release();
            logger.info("Connection closed");
          } catch (err) {
            logger.info("Connection closed error"+err);
          }
        }
      }
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...