奇妙な動作が発生しています。Ubuntu 12.04 サーバーで実行されている Aerospike 3.5 コミュニティを使用してデータをフェッチする小さな webapp をセットアップしようとしています。デフォルトの aerospike.conf ファイル (「test」名前空間を使用) を使用しており、ここで照会する方法の例に従っています。
フィルタを使用していくつかのレコードをクエリしようとすると、Errors チャネルがランダムに nil エラーを返します。(この例は、私の dev データベース インスタンスを指しています)。
以下を複数回複製、コンパイル、実行すると、データが返されるか、パニックが発生します。
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
}