16
16
read /3 , next_segment_boundary /1 , bounds /1 , start /2 , stop /1 ]).
17
17
18
18
-export ([add_queue_ttl /0 , avoid_zeroes /0 , store_msg_size /0 , store_msg /0 ]).
19
- -export ([scan_queue_segments /3 ]).
19
+ -export ([scan_queue_segments /3 , scan_queue_segments / 4 ]).
20
20
21
21
% % Migrates from global to per-vhost message stores
22
22
-export ([move_to_per_vhost_stores /1 ,
255
255
256
256
-spec erase (rabbit_amqqueue :name ()) -> 'ok' .
257
257
258
- erase (Name ) ->
259
- # qistate { dir = Dir } = blank_state (Name ),
258
+ erase (# resource { virtual_host = VHost } = Name ) ->
259
+ VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
260
+ # qistate { dir = Dir } = blank_state (VHostDir , Name ),
260
261
erase_index_dir (Dir ).
261
262
262
263
% % used during variable queue purge when there are no pending acks
@@ -278,8 +279,9 @@ reset_state(#qistate{ queue_name = Name,
278
279
-spec init (rabbit_amqqueue :name (),
279
280
on_sync_fun (), on_sync_fun ()) -> qistate ().
280
281
281
- init (Name , OnSyncFun , OnSyncMsgFun ) ->
282
- State = # qistate { dir = Dir } = blank_state (Name ),
282
+ init (# resource { virtual_host = VHost } = Name , OnSyncFun , OnSyncMsgFun ) ->
283
+ VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
284
+ State = # qistate { dir = Dir } = blank_state (VHostDir , Name ),
283
285
false = rabbit_file :is_file (Dir ), % % is_file == is file or dir
284
286
State # qistate {on_sync = OnSyncFun ,
285
287
on_sync_msg = OnSyncMsgFun }.
@@ -290,9 +292,10 @@ init(Name, OnSyncFun, OnSyncMsgFun) ->
290
292
{'undefined' | non_neg_integer (),
291
293
'undefined' | non_neg_integer (), qistate ()}.
292
294
293
- recover (Name , Terms , MsgStoreRecovered , ContainsCheckFun ,
294
- OnSyncFun , OnSyncMsgFun ) ->
295
- State = blank_state (Name ),
295
+ recover (# resource { virtual_host = VHost } = Name , Terms , MsgStoreRecovered ,
296
+ ContainsCheckFun , OnSyncFun , OnSyncMsgFun ) ->
297
+ VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
298
+ State = blank_state (VHostDir , Name ),
296
299
State1 = State # qistate {on_sync = OnSyncFun ,
297
300
on_sync_msg = OnSyncMsgFun },
298
301
CleanShutdown = Terms /= non_clean_shutdown ,
@@ -549,17 +552,16 @@ erase_index_dir(Dir) ->
549
552
false -> ok
550
553
end .
551
554
552
- blank_state (QueueName ) ->
553
- Dir = queue_dir (QueueName ),
555
+ blank_state (VHostDir , QueueName ) ->
556
+ Dir = queue_dir (VHostDir , QueueName ),
554
557
blank_state_name_dir_funs (QueueName ,
555
558
Dir ,
556
559
fun (_ ) -> ok end ,
557
560
fun (_ ) -> ok end ).
558
561
559
- queue_dir (# resource { virtual_host = VHost } = QueueName ) ->
562
+ queue_dir (VHostDir , QueueName ) ->
560
563
% % Queue directory is
561
564
% % {node_database_dir}/msg_stores/vhosts/{vhost}/queues/{queue}
562
- VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
563
565
QueueDir = queue_name_to_dir_name (QueueName ),
564
566
filename :join ([VHostDir , " queues" , QueueDir ]).
565
567
@@ -725,9 +727,13 @@ queue_index_walker_reader(QueueName, Gatherer) ->
725
727
end , ok , QueueName ),
726
728
ok = gatherer :finish (Gatherer ).
727
729
728
- scan_queue_segments (Fun , Acc , QueueName ) ->
730
+ scan_queue_segments (Fun , Acc , # resource { virtual_host = VHost } = QueueName ) ->
731
+ VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
732
+ scan_queue_segments (Fun , Acc , VHostDir , QueueName ).
733
+
734
+ scan_queue_segments (Fun , Acc , VHostDir , QueueName ) ->
729
735
State = # qistate { segments = Segments , dir = Dir } =
730
- recover_journal (blank_state (QueueName )),
736
+ recover_journal (blank_state (VHostDir , QueueName )),
731
737
Result = lists :foldr (
732
738
fun (Seg , AccN ) ->
733
739
segment_entries_foldr (
@@ -1465,12 +1471,13 @@ drive_transform_fun(Fun, Hdl, Contents) ->
1465
1471
drive_transform_fun (Fun , Hdl , Contents1 )
1466
1472
end .
1467
1473
1468
- move_to_per_vhost_stores (# resource {} = QueueName ) ->
1474
+ move_to_per_vhost_stores (# resource {virtual_host = VHost } = QueueName ) ->
1469
1475
OldQueueDir = filename :join ([queues_base_dir (), " queues" ,
1470
1476
queue_name_to_dir_name_legacy (QueueName )]),
1471
- NewQueueDir = queue_dir (QueueName ),
1477
+ VHostDir = rabbit_vhost :msg_store_dir_path (VHost ),
1478
+ NewQueueDir = queue_dir (VHostDir , QueueName ),
1472
1479
_ = rabbit_log_upgrade :info (" About to migrate queue directory '~s ' to '~s '" ,
1473
- [OldQueueDir , NewQueueDir ]),
1480
+ [OldQueueDir , NewQueueDir ]),
1474
1481
case rabbit_file :is_dir (OldQueueDir ) of
1475
1482
true ->
1476
1483
ok = rabbit_file :ensure_dir (NewQueueDir ),
0 commit comments