Когда я выполняю запрос 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
}
Ключевой идеей здесь является увеличение счетчика и получение новых значений ревизии атомарным способом. Поэтому, если кто-нибудь знает, как этого добиться или в чем проблема с кодом, я буду очень признателен.
Спасибо.