質問で言ったように、これは特にリクエストライブラリでは非常に簡単だと思ったので、これを行うためのスクリプトを開発しました。Riak keys=true
(つまり、チャンクされていない)モードから始めましたが、大きなバケットでは失敗しました。チャンクモード()に切り替えましkeys=stream
たが、出力は単一のJSONオブジェクトではなく、一連の連結オブジェクトでし{...}{...}...{...}
た(つまり、同僚が、解析した集約されたRiak応答からJSONオブジェクトを分割するための正規表現を提供してくれました順番に処理されます。悪くはありません。コードは次のとおりです。
#!/usr/bin/python
# script to delete all keys in a Riak bucket
import json
import re
import requests
import sys
def processChunk(chunk):
global key_count
obj = json.loads(chunk.group(2))
if 'keys' in obj:
for key in obj['keys']:
r = requests.delete(sys.argv[1] + '/' + key)
print 'delete key', key, 'response', r.status_code
key_count += 1
if len(sys.argv) != 2:
print 'Usage: {0} <http://riak_host:8098/riak/bucket_name>'.format(sys.argv[0])
print 'Set riak_host and bucket_name appropriately for your Riak cluster.'
exit(0)
r = requests.get(sys.argv[1] + '?keys=stream')
content = ''
key_count = 0
for chunk in r.iter_content():
if chunk:
content += chunk
re.sub(r'(?=(^|})({.*?})(?={|$))', processChunk, content)
print 'Deleted', key_count, 'keys'
私の問題はこの時点でほぼ解決されていますが、もっと良い解決策があるのではないかと思います。このページに追加してください。数週間後に代替案が提供されない限り、私は自分の答えを受け入れません。