簡體   English   中英

ArangoDB事務不會因錯誤而回滾

[英]ArangoDB Transaction doesn't rollback on error

更新:解決方案。 ARANGODB集群不支持交易。 它僅在單個實例上受支持。

我正在嘗試通過arangoJS庫使用事務處理功能。 我將介紹的函數只是一個虛擬函數,該函數插入兩個記錄,然后嘗試獲取不存在的文檔。 獲取不存在的文檔會產生錯誤,並且事務必須回滾。 確實,嘗試獲取不存在的文檔后會生成錯誤。 但是,數據庫不會回滾,並且兩個插入的文檔仍然插入數據庫中。 有人知道如何解決嗎?

"updateCustomer" : function (options, cb) {
    const action = String(function (params) {
        // This code will be executed inside ArangoDB! 
        const db = require('@arangodb').db;
        const aql = require('@arangodb').aql;
        const customer = db._collection('customer');
        try{
            //insert two documents
            db._query(aql`INSERT ${params.user} INTO ${customer} Return NEW`);
            db._query(aql`INSERT ${params.customer} INTO ${customer} Return NEW`);
            //Get a document that doesn't exist
            customer.document('does-not-exist');
        }catch(e){
            throw new Error("Everything is bad");
        }
    });
    let opts = {
        collections : {
            read : ["customer"],
            write : ["customer"]
        },
        action : action,
        params : {user: options, customer: options},
        lockTimeout : 5
    };
    Arango.transaction(opts,(err, result) => {
        console.log("err: " + err);
        console.log("result: " + JSON.stringify(result));
        return cb(err, result);
    });
}

"transaction" : function (options, cb) {
    utils.dbConnect().transaction(options.collections, options.action, options.params, options.lockTimeout, cb);
}

更新:我在單個實例ArangoDB上嘗試了此事務,並且它起作用了。 但是,它在群集上不起作用。 ArangoDB群集上不支持事務處理嗎?

單個文檔操作在arangodb群集中是原子的。 到目前為止還沒有多文檔。 我們目前正在為多文檔操作開發ACID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM