当我使用gocql ScanCAS / Scan在计数器表上执行UPDATE查询时,即使应用了查询,也总是返回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执行了轻量级交易(这在计数器表上是不允许的),但使用常规Scan却得到了相同的结果:
if err := session.Query(
updateQueryString,
user,
project,
resourceName).
Scan(
&user,
&project,
&resourceName,
&revision,
); err != nil {
return err
}
这里的关键思想是增加计数器并以原子方式检索修订的新值。因此,如果有人知道如何实现这一目标或代码有什么问题,我将不胜感激。
谢谢。