ScanCAS возвращает ErrNotFound для запросов UPDATE - PullRequest
0 голосов
/ 17 января 2019

Когда я выполняю запрос UPDATE для таблицы счетчиков с помощью gocql, ScanCAS / Scan всегда возвращает ErrNotFound, даже если запрос применяется. Описание таблицы и код ниже:

CREATE TABLE tests.tests_revisions_counters (project text, resourcename text, user text, revision counter, PRIMARY KEY (project, resourcename, user));

updateQueryString is as follows 'UPDATE tests.tests_revisions_counters SET revision = revision + 1 WHERE user = ? AND project = ? AND resourcename = ?;'

var revision int
if applied, err := session.Query(
    updateQueryString,
    user,
    project,
    resourceName).
    ScanCAS(
        &user,
        &project,
        &resourceName,
        &revision,
    ); err != nil {
        return err
    } else if applied != true {
        return ErrIntServerError
    }

Запрос успешно применен, но ScanCAS всегда возвращает ErrNotFound. Я думал, что такое поведение может быть связано с тем, что ScanCAS выполняет легкие транзакции, которые не разрешены для таблицы счетчиков, но я получил тот же результат с обычным сканированием:

if err := session.Query(
    updateQueryString,
    user,
    project,
    resourceName).
    Scan(
        &user,
        &project,
        &resourceName,
        &revision,
    ); err != nil {
    return err
}

Ключевой идеей здесь является увеличение счетчика и получение новых значений ревизии атомарным способом. Поэтому, если кто-нибудь знает, как этого добиться или в чем проблема с кодом, я буду очень признателен.

Спасибо.

...