@@ -295,7 +295,7 @@ defmodule CodebattleWeb.Admin.GroupTournamentController do
295295
296296 defp enqueue_bulk_op ( conn , id , params , action ) do
297297 group_tournament = Context . get_group_tournament! ( id )
298- batch_size = parse_batch_size ( get_in ( params , [ "bulk_repo" , "batch_size" ] ) )
298+ batch_size = parse_bulk_op_batch_size ( action , get_in ( params , [ "bulk_repo" , "batch_size" ] ) )
299299 { label , unit , enqueued , rate_note } = run_bulk_op ( action , group_tournament , batch_size )
300300 { kind , message } = bulk_op_flash ( label , unit , enqueued , rate_note )
301301
@@ -312,11 +312,11 @@ defmodule CodebattleWeb.Admin.GroupTournamentController do
312312 add_viewer_roles: { "add-viewer-role" , & UserGroupTournamentContext . enqueue_bulk_add_viewer_roles / 2 }
313313 }
314314
315- defp run_bulk_op ( :hide , gt , _batch_size ) ,
316- do: { "hide" , "repos" , UserGroupTournamentContext . enqueue_bulk_hide ( gt ) , :chunked }
315+ defp run_bulk_op ( :hide , gt , chunk_size ) ,
316+ do: { "hide" , "repos" , UserGroupTournamentContext . enqueue_bulk_hide ( gt , chunk_size ) , { :chunked , chunk_size } }
317317
318- defp run_bulk_op ( :unveil , gt , _batch_size ) ,
319- do: { "unveil" , "repos" , UserGroupTournamentContext . enqueue_bulk_unveil ( gt ) , :chunked }
318+ defp run_bulk_op ( :unveil , gt , chunk_size ) ,
319+ do: { "unveil" , "repos" , UserGroupTournamentContext . enqueue_bulk_unveil ( gt , chunk_size ) , { :chunked , chunk_size } }
320320
321321 defp run_bulk_op ( action , gt , batch_size ) do
322322 { label , fun } = Map . fetch! ( @ bulk_per_user_ops , action )
@@ -325,8 +325,8 @@ defmodule CodebattleWeb.Admin.GroupTournamentController do
325325
326326 defp bulk_op_flash ( label , _unit , 0 , _rate_note ) , do: { :error , "Nothing to enqueue for #{ label } ." }
327327
328- defp bulk_op_flash ( label , unit , enqueued , :chunked ) ,
329- do: { :info , "Enqueued #{ label } jobs covering #{ enqueued } #{ unit } (chunks of 500 per bulk call)." }
328+ defp bulk_op_flash ( label , unit , enqueued , { :chunked , chunk_size } ) ,
329+ do: { :info , "Enqueued #{ label } jobs covering #{ enqueued } #{ unit } (chunks of #{ chunk_size } per bulk call)." }
330330
331331 defp bulk_op_flash ( label , unit , enqueued , batch_size ) ,
332332 do: { :info , "Enqueued #{ label } jobs for #{ enqueued } #{ unit } (rate: #{ batch_size } jobs/sec)." }
@@ -531,6 +531,11 @@ defmodule CodebattleWeb.Admin.GroupTournamentController do
531531 # even with concurrent runs from other tournaments.
532532 @ default_batch_size 50
533533 @ max_batch_size 100
534+ @ default_repo_chunk_size 500
535+ @ repo_chunk_sizes [ 1 , 10 , 100 , 500 ]
536+
537+ defp parse_bulk_op_batch_size ( action , value ) when action in [ :hide , :unveil ] , do: parse_repo_chunk_size ( value )
538+ defp parse_bulk_op_batch_size ( _action , value ) , do: parse_batch_size ( value )
534539
535540 defp parse_batch_size ( nil ) , do: @ default_batch_size
536541
@@ -544,6 +549,18 @@ defmodule CodebattleWeb.Admin.GroupTournamentController do
544549 defp parse_batch_size ( value ) when is_integer ( value ) and value >= 1 and value <= @ max_batch_size , do: value
545550 defp parse_batch_size ( _ ) , do: @ default_batch_size
546551
552+ defp parse_repo_chunk_size ( nil ) , do: @ default_repo_chunk_size
553+
554+ defp parse_repo_chunk_size ( value ) when is_binary ( value ) do
555+ case value |> String . trim ( ) |> Integer . parse ( ) do
556+ { n , "" } when n in @ repo_chunk_sizes -> n
557+ _ -> @ default_repo_chunk_size
558+ end
559+ end
560+
561+ defp parse_repo_chunk_size ( value ) when value in @ repo_chunk_sizes , do: value
562+ defp parse_repo_chunk_size ( _ ) , do: @ default_repo_chunk_size
563+
547564 def create_token ( conn , % { "id" => id , "group_tournament_token" => token_params } ) do
548565 group_tournament = Context . get_group_tournament! ( id )
549566
0 commit comments