Aerospikeでset内のレコードを全部消そうと思ったらコマンドラインにerrorとしか出なかった

最近会社ではAerospikeを使ってる。
今回はそのKVSで少しハマったことがあったのでメモ。

Aerospikeとは?

KVS Aerospike社の開発するNoSQLでC言語で実装されている。
2014年にオープンソースとして公開されている。

www.aerospike.jp

特徴とかアーキテクチャとかは公式見てください。↓
http://www.aerospike.com/technologies/#technologies

何をしたかったのか

AerospikeにはRDBMSでいうtableにあたるsetというものが存在し、その中にrecordが入る。
このset内のレコードをすべて削除したかった。

検証環境

Aerospike社からDocker Imageが配布されているので、これを検証用として使用する。

# Aerpospikeはデフォルトで3000をLISTENします
$ docker run -it -p 3000:3000 aerospike/aerospike-server:3.14.0 

適当にレコード突っ込む

$ aql
aql> INSERT INTO test.testset (PK, a, b) VALUES ('xyz', 'abc', 123)
aql> INSERT INTO test.testset (PK, a, b) VALUES ('xyz2', 'abc', 123)

消し方

一応公式サイトには2通りの消し方がのってるので順番に使ってみます。

www.aerospike.com

消し方 その①

Aerospikeから提供されているJava製のツールで削除する。

github.com

使い方は簡単で

$ git clone https://github.com/aerospike/delete-set
$ cd delete-set
# jarファイルが出来る
$ mvn clean package
$ java -jar delete-set-1.0.0-jar-with-dependencies.jar -h 127.0.0.1 -p 3000 -n test -s testset
0 INFO  SetDelete  - Host: 127.0.0.1
1 INFO  SetDelete  - Port: 3000
1 INFO  SetDelete  - Name space: test
1 INFO  SetDelete  - Set: testset
197 INFO  SetDelete  - Deleted 1 records from set testset

これで消えてくれる。
とはいえこのためだけにjarを用意するのも何か腑に落ちない。

消し方 その②

Aerospikeから提供されているAerospike Information Tool (asinfo)を使う方法。
次のコマンドをうてば良いらしい。

asinfo -v "set-config:context=namespace;id=<name space>;set=<set name>;set-delete=true;"

こっちのほうが簡単なのではと思って実行してみた。

$ asinfo -v "set-config:context=namespace;id=test;set=testset;set-delete=true;"
error

何も分からんw
知りたいのは何でerrorなのかである。
どこか別の場所に記載がないかとドキュメントも色々あさると次のような記載があった。

truncate introduced in Aerospike Server version 3.12.0, released in March 2017.
set-delete deprecated and works up to Aerospike 3.12.1, released in April 2017.

なるほどw
Aerospikeの3.12.1からはset-deleteはなくなるからtruncate使ってくれよなということらしい。
下記のコマンドで無事recordを全部削除できた。

$ asinfo -v "truncate:namespace=test;set=testset;"
ok

とはいえ error だけはきつのでもうちょい情報くれという感じ。