@@ -348,7 +348,10 @@ def apply(job)
348348 end
349349
350350 def apply_signal ( job )
351- defn = signal_handlers [ job . signal_name ] || signal_handlers [ nil ]
351+ # Get signal definition, falling back to dynamic if not present and not reserved
352+ defn = signal_handlers [ job . signal_name ]
353+ defn = signal_handlers [ nil ] if !defn && !Internal ::ProtoUtils . reserved_name? ( job . signal_name )
354+
352355 handler_exec =
353356 if defn
354357 HandlerExecution . new ( name : job . signal_name , update_id : nil , unfinished_policy : defn . unfinished_policy )
@@ -381,37 +384,38 @@ def apply_signal(job)
381384 end
382385
383386 def apply_query ( job )
384- # TODO(cretz): __temporal_workflow_metadata
385- defn = case job . query_type
386- when '__stack_trace'
387- Workflow ::Definition ::Query . new (
388- name : '__stack_trace' ,
389- to_invoke : proc { scheduler . stack_trace }
390- )
391- else
392- query_handlers [ job . query_type ] || query_handlers [ nil ]
393- end
394387 schedule do
395- unless defn
396- raise "Query handler for #{ job . query_type } expected but not found, " \
397- "known queries: [#{ query_handlers . keys . compact . sort . join ( ', ' ) } ]"
398- end
388+ # If it's a built-in, run it without interceptors, otherwise do normal behavior
389+ # TODO(cretz): __temporal_workflow_metadata
390+ result = if job . query_type == '__stack_trace'
391+ scheduler . stack_trace
392+ else
393+ # Get query definition, falling back to dynamic if not present and not reserved
394+ defn = query_handlers [ job . query_type ]
395+ defn = query_handlers [ nil ] if !defn && !Internal ::ProtoUtils . reserved_name? ( job . query_type )
396+
397+ unless defn
398+ raise "Query handler for #{ job . query_type } expected but not found, " \
399+ "known queries: [#{ query_handlers . keys . compact . sort . join ( ', ' ) } ]"
400+ end
401+
402+ with_context_frozen do
403+ @inbound . handle_query (
404+ Temporalio ::Worker ::Interceptor ::Workflow ::HandleQueryInput . new (
405+ id : job . query_id ,
406+ query : job . query_type ,
407+ args : begin
408+ convert_handler_args ( payload_array : job . arguments , defn :)
409+ rescue StandardError => e
410+ raise "Failed converting query input arguments: #{ e } "
411+ end ,
412+ definition : defn ,
413+ headers : ProtoUtils . headers_from_proto_map ( job . headers , @payload_converter ) || { }
414+ )
415+ )
416+ end
417+ end
399418
400- result = with_context_frozen do
401- @inbound . handle_query (
402- Temporalio ::Worker ::Interceptor ::Workflow ::HandleQueryInput . new (
403- id : job . query_id ,
404- query : job . query_type ,
405- args : begin
406- convert_handler_args ( payload_array : job . arguments , defn :)
407- rescue StandardError => e
408- raise "Failed converting query input arguments: #{ e } "
409- end ,
410- definition : defn ,
411- headers : ProtoUtils . headers_from_proto_map ( job . headers , @payload_converter ) || { }
412- )
413- )
414- end
415419 add_command (
416420 Bridge ::Api ::WorkflowCommands ::WorkflowCommand . new (
417421 respond_to_query : Bridge ::Api ::WorkflowCommands ::QueryResult . new (
@@ -435,7 +439,10 @@ def apply_query(job)
435439 end
436440
437441 def apply_update ( job )
438- defn = update_handlers [ job . name ] || update_handlers [ nil ]
442+ # Get update definition, falling back to dynamic if not present and not reserved
443+ defn = update_handlers [ job . name ]
444+ defn = update_handlers [ nil ] if !defn && !Internal ::ProtoUtils . reserved_name? ( job . name )
445+
439446 handler_exec =
440447 ( HandlerExecution . new ( name : job . name , update_id : job . id , unfinished_policy : defn . unfinished_policy ) if defn )
441448 schedule ( handler_exec :) do
0 commit comments