ScanCAS为更新查询返回ErrNotFound

时间:2019-01-17 13:39:03

标签: cassandra cassandra-3.0 gocql

当我使用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
}

这里的关键思想是增加计数器并以原子方式检索修订的新值。因此,如果有人知道如何实现这一目标或代码有什么问题,我将不胜感激。

谢谢。

0 个答案:

没有答案