Skip to content

Commit d1bffd0

Browse files
author
Daniil Fedotov
committed
Work in progress: Migration to vhost based message store
1 parent ec15e97 commit d1bffd0

File tree

1 file changed

+51
-8
lines changed

1 file changed

+51
-8
lines changed

src/rabbit_variable_queue.erl

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2675,16 +2675,19 @@ transform_store(Store, TransformFun) ->
26752675

26762676
move_messages_to_vhost_store() ->
26772677
Queues = list_persistent_queues(),
2678-
OldStore = run_old_persistent_store(),
2678+
% Maybe recover old store.
2679+
{RecoveryTerms, StartFunState} = start_recovery_terms(Queues),
2680+
OldStore = run_old_persistent_store(RecoveryTerms, StartFunState),
2681+
NewStoreSup = start_new_store_sup(),
26792682
Migrations = spawn_for_each(fun(Queue) ->
2680-
migrate_queue(Queue, OldStore)
2683+
migrate_queue(Queue, OldStore, NewStoreSup)
26812684
end, Queues),
26822685
wait(Migrations),
26832686
delete_old_store(OldStore).
26842687

2685-
migrate_queue(Queue, OldStore) ->
2686-
OldStoreClient = get_client(OldStore),
2687-
NewStoreClient = get_new_store_client(Queue),
2688+
migrate_queue(Queue, OldStore, NewStoreSup) ->
2689+
OldStoreClient = get_old_client(OldStore),
2690+
NewStoreClient = get_new_store_client(Queue, NewStoreSup),
26882691
walk_queue_index(
26892692
fun(MessageIdInStore) ->
26902693
Msg = get_msg_from_store(OldStoreClient),
@@ -2693,11 +2696,22 @@ migrate_queue(Queue, OldStore) ->
26932696
Queue).
26942697

26952698

2696-
get_new_store_client(Queue) ->
2699+
get_new_store_client(Queue, NewStoreSup) ->
26972700
Vhost = queue_vhost(Queue),
2698-
Store = run_persistent_store(Vhost),
2699-
get_client(Store).
2701+
get_new_client(NewStoreSup, Vhost).
27002702

2703+
get_new_client(NewStoreSup, VHost) ->
2704+
rabbit_msg_store_vhost_sup:client_init(NewStoreSup,
2705+
rabbit_guid:gen(),
2706+
fun(_,_) -> ok end,
2707+
fun() -> ok end,
2708+
VHost).
2709+
2710+
get_old_client(OldStore) ->
2711+
rabbit_msg_store:client_init(OldStore,
2712+
rabbit_guid:gen(),
2713+
fun(_,_) -> ok end,
2714+
fun() -> ok end).
27012715

27022716
list_persistent_queues() ->
27032717
Node = node(),
@@ -2710,3 +2724,32 @@ list_persistent_queues() ->
27102724
mnesia:read(rabbit_queue, Name, read) =:= []]))
27112725
end).
27122726

2727+
start_recovery_terms(Queues) ->
2728+
{AllTerms, StartFunState} = rabbit_queue_index:start(Queues),
2729+
Refs = [Ref || Terms <- AllTerms,
2730+
Terms /= non_clean_shutdown,
2731+
begin
2732+
Ref = proplists:get_value(persistent_ref, Terms),
2733+
Ref =/= undefined
2734+
end],
2735+
{Refs, StartFunState}.
2736+
2737+
run_old_persistent_store(Refs, StartFunState) ->
2738+
OldStoreName = old_persistent_msg_store.
2739+
ok = rabbit_sup:start_child(OldStoreName, rabbit_msg_store,
2740+
[OldStoreName, rabbit_mnesia:dir(),
2741+
Refs, StartFunState]),
2742+
OldStoreName.
2743+
2744+
run_persistent_store(Vhost) ->
2745+
2746+
2747+
?PERSISTENT_MSG_STORE.
2748+
2749+
start_new_store_sup() ->
2750+
% Start persistent store sup without recovery.
2751+
ok = rabbit_sup:start_child(?PERSISTENT_MSG_STORE, rabbit_msg_store_vhost_sup,
2752+
[?PERSISTENT_MSG_STORE, rabbit_mnesia:dir(),
2753+
undefined, {fun (ok) -> finished end, ok}]),
2754+
?PERSISTENT_MSG_STORE.
2755+

0 commit comments

Comments
 (0)