为什么用Sequelize启动事务时有时节点进程挂起?

时间:2019-02-04 14:11:43

标签: node.js sequelize.js

我使用Sequelize 3.x / PostgreSql 9.6并执行下一个代码:

async create(rawUser, rawMeta) {
    let transaction = await models.sequelize.transaction();
    logger.info('User creating - Transaction started');
    try {
        // creating record in User table
        let options = {
            include: [ models.UserMeta ],
            transaction: transaction
        };

        rawUser.UserMetum = rawMeta;

        let createdUser = await models.User.create(rawUser, options);

        // Set user's id as sort_order
        await models.User.update({'sort_order': createdUser.id}, {
            where: {'id': createdUser.id},
            transaction: transaction,
            fields: ['sort_order']
        });

        let res = await transaction.commit();

        if (!res) {
            throw new CustomError('Error was occured during creating user', 422, 'TRANSACTION_ERROR');
        }

        events.emit('user.create', createdUser, createdUser.UserMetum);

        logger.info(`User #${createdUser.id} was created`);

        return createdUser;
    } catch (e) {
        logger.error('User creating - error:', e);

        await transaction.rollback();
        throw e;
    }
}

有时没有创建用户,并且在日志中只有下一行:

Executing (39545abe-031b-4a8b-bff6-7ab45552a49a): START TRANSACTION;
Executing (39545abe-031b-4a8b-bff6-7ab45552a49a): SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
info: [Object.create (/usr/src/be/services/user.js:625:20)] User creating - Transaction started

然后,将不处理所有对API的请求。同时,DB运行良好,并使用psql执行查询。我无法不断重现此错误。

请推荐我如何找出这种行为的原因。

0 个答案:

没有答案
相关问题