-
-
Save binarytemple/0afd0691d7c27c3718c750cb96cfcce1 to your computer and use it in GitHub Desktop.
Helper Shell Funs for Riak CS Cleanup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% Shell functions that can be run in `riak-cs attach` | |
%% Peek({S3Bucket, Key}) will fetch an object and display the sibling count and | |
%% the number of manifests in the object. | |
Peek = fun({Bucket, Key}) -> | |
io:format("Peeking at ~p/~p.~n", [Bucket, Key]), | |
{ok, RcPid} = riak_cs_riak_client:checkout(), | |
ManifestBucket = riak_cs_utils:to_bucket_name(objects, Bucket), | |
ok = riak_cs_riak_client:set_bucket_name(RcPid, Bucket), | |
{ok, ManifestPbc} = riak_cs_riak_client:manifest_pbc(RcPid), | |
case riakc_pb_socket:get(ManifestPbc, ManifestBucket, Key, [{r, all}]) of | |
{ok, RiakObject} -> | |
Manifests = riak_cs_manifest:manifests_from_riak_object(RiakObject), | |
io:format("Value Count: ~p. Length : ~p.~n", [riakc_obj:value_count(RiakObject), length(Manifests)]); | |
{error, notfound} -> | |
io:format("Not found ~p/~p.~n", [Bucket, Key]); | |
{error, Reason} -> | |
io:format("Unhandled error in ~p/~p. [~p]~n", [Bucket, Key, Reason]) | |
end, | |
riak_cs_riak_client:checkin(RcPid) | |
end. | |
%% GC_all_manifests({S3Bucket, Key}) will go through all manifests with in the object and | |
%% set them to be garbage collected. | |
GC_all_manifests=fun({Bucket, Key}) -> | |
{ok, RcPid} = riak_cs_riak_client:checkout(), | |
{ok, Obj, _} = riak_cs_manifest:get_manifests(RcPid, Bucket, Key), | |
List = [ B || {B,M} <- lists:flatten([ binary_to_term(V) || V <- riakc_obj:get_values(Obj)])], | |
Res = riak_cs_gc:gc_specific_manifests(List, Obj, Bucket, Key, RcPid), | |
riak_cs_riak_client:checkin(RcPid), | |
Res | |
end. | |
%% Expunge_manifest({Bucket, Key}) will forceably remove a RiakCS Manifest object | |
%% from the supportive Riak backend. | |
Expunge_manifest = fun({Bucket, Key}) -> | |
io:format("Killing ~p/~p.~n", [Bucket, Key]), | |
{ok, RcPid} = riak_cs_riak_client:checkout(), | |
ManifestBucket = riak_cs_utils:to_bucket_name(objects, Bucket), | |
ok = riak_cs_riak_client:set_bucket_name(RcPid, Bucket), | |
{ok, ManifestPbc} = riak_cs_riak_client:manifest_pbc(RcPid), | |
case riakc_pb_socket:delete(ManifestPbc, ManifestBucket, Key) of | |
ok -> | |
io:format("Killed dead.~n", []); | |
{error, notfound} -> | |
io:format("Not found ~p/~p.~n", [Bucket, Key]); | |
{error, Reason} -> | |
io:format("Unhandled error in ~p/~p. [~p]~n", [Bucket, Key, Reason]) | |
end, | |
riak_cs_riak_client:checkin(RcPid) | |
end. | |
%% Force_remove({Bucket, Key}) will inspect the object, gc all of the manifests, | |
%% delete the manifest object from Riak, and verify that it is gone. | |
Force_remove = fun(BKey = {Bucket, Key}) -> | |
Peek(BKey), | |
GC_all_manifests(BKey), | |
Expunge_manifest(BKey), | |
Peek(BKey) | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment