将 Query() 与 Go 客户端一起使用时,Aerospike 随机返回零错误

我正在经历一些奇怪的行为。我正在尝试设置一个小型 web 应用程序,该应用程序使用在 Ubuntu 12.04 服务器上运行的 Aerospike 3.5 社区获取一些数据。我正在使用默认的 aerospike.conf 文件(使用“test”命名空间)并遵循如何在此处查询的示例。


当我尝试使用过滤器查询某些记录时,错误通道随机返回零错误。(此示例指向我的开发数据库实例)。


要多次复制、编译和运行以下命令,您将看到返回的数据或恐慌:


package main


import (

    "fmt"


    "github.com/aerospike/aerospike-client-go"

)


func main() {


    c, err := aerospike.NewClient("52.7.157.46", 3000)

    if err != nil {

        panic(err)

    }


    recs := liststuff(c)


    fmt.Printf("got results: %v", recs)

}


func liststuff(client *aerospike.Client) []*aerospike.Record {


    // fetch some records with a filter

    stm := aerospike.NewStatement("test", "products")

    stm.Addfilter(aerospike.NewEqualFilter("visible", 1))

    fmt.Println("querying...")

    recordset, err := client.Query(nil, stm)

    if err != nil {

        panic(err)

    }


    // collect results into a slice

    recs := []*aerospike.Record{}

L:

    for {

        select {

        case rec, chanOpen := <-recordset.Records:

            if !chanOpen {

                break L

            }

            fmt.Println("found record %v", rec)

            recs = append(recs, rec)

        case err := <-recordset.Errors:

            if err != nil {

                panic(err)

            } else {

                panic(fmt.Errorf("error nil when it should exist"))

            }

            return nil

        }

    }


    return recs

}


慕尼黑8549860
浏览 199回答 3
3回答

蝴蝶不菲

只是为了发布更新,当服务器端的记录流结束时,错误和记录通道都会自动关闭,因此错误通道的值为 nil。所以这毕竟不是错误。我们已经相应地更新了 Aerospike 用户论坛帖子中的主题。

慕妹3242003

我不熟悉 aerospike 包,但运行您的示例代码表明,无论是否返回数据,它总是会发生恐慌。这意味着Errors通道总是发送error或nil。如果这是预期的行为,您必须相应地处理它,并且只有在错误不是nil.nil在通道上发送仍然意味着在通道上正在发送一个值,它将触发 select 语句。因此对 a 的恐慌nil error。您看到的随机性,即有时返回数据,有时不返回是由于 select 语句的性质。如果同时发送 data 和 anil error两种情况都为真,并且 select 将伪随机选择两者之一。如果可以进行一个或多个通信,则通过统一伪随机选择选择可以进行的单个通信。否则,如果存在默认情况,则选择该情况。如果没有默认情况,“select”语句会阻塞,直到至少有一个通信可以继续。如果它首先选择数据通道,它将打印数据,然后在下一次迭代中选择错误通道和恐慌。如果它首先选择错误通道,它会发生恐慌并且数据永远不会打印。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go