Couchbase возвращает ошибку при успехе

Я использую couchbase для хранения профилей пользователей и их балансов. Как вы можете видеть из приведенного ниже кода, я пытаюсь спамить запросы couchbase, чтобы обеспечить долговечность сайта. В базе данных есть пользователь с идентификатором 'u:: 23' и его баланс равен '6'. Я ожидаю, что скрипт будет вычитать баланс столько раз, сколько он будет положительным, но проблема в том, что couchbase просто возвращает 3 ошибки, и баланс превращается из "6" в "0". Если я попытаюсь убрать интервал и просто выйду из простой функции, все будет работать как положено: баланс превратится из "6" в "4". Вы когда-нибудь испытывали ту же проблему?

Код:

const couchbase = require('couchbase');
const cluster = new couchbase.Cluster('couchbase://localhost');

console.log('Connecting to btc');
let bucket = cluster.openBucket('btc', err => {
    if (err) {
        console.log(err);
    } else {
        console.log('Connected to btc');

        let timer = setInterval(() => {
            bucket.getAndLock('u::23', (err, doc) => {
                if (err) return console.log(err);
                if (doc.value.balance <= 0) {
                    return clearInterval(timer);
                }

                console.log(doc.cas);
                doc.value.balance -= 2;
                bucket.replace('u::23', doc.value, {
                    cas: doc.cas,
                    persist_to: 1
                }, (err, doc) => {
                    if (err) return console.log(err);
                    console.log('----------', 'DONE', '----------');
                });
            });
        }, 90);
    }
});

Выход:

Connecting to btc
Connected to btc
CouchbaseCas<1505835358213832704>
CouchbaseCas<1505835358303092736>
{ CouchbaseError
    at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
    at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
  message: 'Durability requirements failed',
  code: undefined,
  innerError:
   { CouchbaseError
     message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
     code: 12 } }
CouchbaseCas<1505835358393335808>
{ CouchbaseError
    at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
    at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
  message: 'Durability requirements failed',
  code: undefined,
  innerError:
   { CouchbaseError
     message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
     code: 12 } }
{ CouchbaseError
    at _endureError (/var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1004:19)
    at /var/node/crypto/shared/node_modules/couchbase/lib/bucket.js:1037:18
  message: 'Durability requirements failed',
  code: undefined,
  innerError:
   { CouchbaseError
     message: 'The key already exists in the server. If you have supplied a CAS then the key exists with a CAS value different than specified',
     code: 12 } }

0 ответов

Другие вопросы по тегам