From 4d82e0c88b6b6fd794640f9fadc0dc974c5cf361 Mon Sep 17 00:00:00 2001 From: Chad Retz Date: Tue, 4 Feb 2025 11:01:01 -0600 Subject: [PATCH 1/2] Support disabling proto load via environment variable --- Makefile | 6 ++++++ .../api/operatorservice/v1/service_services_pb.rb | 2 +- .../api/workflowservice/v1/service_services_pb.rb | 2 +- lib/temporal.rb | 6 ++++-- lib/temporal/connection/grpc.rb | 10 +++++++--- lib/temporal/connection/serializer/base.rb | 8 ++++++-- lib/temporal/testing/replay_tester.rb | 6 +++++- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 6967cb5b..6c3d76fa 100644 --- a/Makefile +++ b/Makefile @@ -6,4 +6,10 @@ PROTO_OUT := lib/gen proto: $(foreach PROTO_DIR,$(PROTO_DIRS),bundle exec grpc_tools_ruby_protoc -Iproto --ruby_out=$(PROTO_OUT) --grpc_out=$(PROTO_OUT) $(PROTO_DIR)*.proto;) + # Need to only load imports if not disabled + sed -i "/require 'temporal/ s|\(.*\)|\1 unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1'|" \ + lib/gen/temporal/api/operatorservice/v1/service_services_pb.rb + sed -i "/require 'temporal/ s|\(.*\)|\1 unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1'|" \ + lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb + .PHONY: proto diff --git a/lib/gen/temporal/api/operatorservice/v1/service_services_pb.rb b/lib/gen/temporal/api/operatorservice/v1/service_services_pb.rb index 44a8c571..1dad652f 100644 --- a/lib/gen/temporal/api/operatorservice/v1/service_services_pb.rb +++ b/lib/gen/temporal/api/operatorservice/v1/service_services_pb.rb @@ -25,7 +25,7 @@ # require 'grpc' -require 'temporal/api/operatorservice/v1/service_pb' +require 'temporal/api/operatorservice/v1/service_pb' unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' module Temporalio module Api diff --git a/lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb b/lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb index 3acb9d26..e7a42c93 100644 --- a/lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb +++ b/lib/gen/temporal/api/workflowservice/v1/service_services_pb.rb @@ -25,7 +25,7 @@ # require 'grpc' -require 'temporal/api/workflowservice/v1/service_pb' +require 'temporal/api/workflowservice/v1/service_pb' unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' module Temporalio module Api diff --git a/lib/temporal.rb b/lib/temporal.rb index b9f49d55..91b69cb3 100644 --- a/lib/temporal.rb +++ b/lib/temporal.rb @@ -1,5 +1,7 @@ -# Protoc wants all of its generated files on the LOAD_PATH -$LOAD_PATH << File.expand_path('./gen', __dir__) +# Protoc wants all of its generated files on the LOAD_PATH. Only require protos if not disabled. +unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' + $LOAD_PATH << File.expand_path('./gen', __dir__) +end require 'securerandom' require 'forwardable' diff --git a/lib/temporal/connection/grpc.rb b/lib/temporal/connection/grpc.rb index f35d2dc3..85f79191 100644 --- a/lib/temporal/connection/grpc.rb +++ b/lib/temporal/connection/grpc.rb @@ -3,11 +3,8 @@ require 'google/protobuf/well_known_types' require 'securerandom' require 'json' -require 'gen/temporal/api/filter/v1/message_pb' require 'gen/temporal/api/workflowservice/v1/service_services_pb' require 'gen/temporal/api/operatorservice/v1/service_services_pb' -require 'gen/temporal/api/enums/v1/workflow_pb' -require 'gen/temporal/api/enums/v1/common_pb' require 'temporal/connection/errors' require 'temporal/connection/interceptors/client_name_version_interceptor' require 'temporal/connection/serializer' @@ -16,6 +13,13 @@ require 'temporal/connection/serializer/schedule' require 'temporal/connection/serializer/workflow_id_reuse_policy' +# Only require protos if not disabled +unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' + require 'gen/temporal/api/filter/v1/message_pb' + require 'gen/temporal/api/enums/v1/workflow_pb' + require 'gen/temporal/api/enums/v1/common_pb' +end + module Temporal module Connection class GRPC diff --git a/lib/temporal/connection/serializer/base.rb b/lib/temporal/connection/serializer/base.rb index 79e8767a..595a73b6 100644 --- a/lib/temporal/connection/serializer/base.rb +++ b/lib/temporal/connection/serializer/base.rb @@ -1,6 +1,10 @@ require 'oj' -require 'gen/temporal/api/common/v1/message_pb' -require 'gen/temporal/api/command/v1/message_pb' + +# Only require protos if not disabled +unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' + require 'gen/temporal/api/common/v1/message_pb' + require 'gen/temporal/api/command/v1/message_pb' +end module Temporal module Connection diff --git a/lib/temporal/testing/replay_tester.rb b/lib/temporal/testing/replay_tester.rb index 6a98c86e..a08617a8 100644 --- a/lib/temporal/testing/replay_tester.rb +++ b/lib/temporal/testing/replay_tester.rb @@ -1,4 +1,3 @@ -require "gen/temporal/api/history/v1/message_pb" require "json" require "temporal/errors" require "temporal/metadata/workflow_task" @@ -6,6 +5,11 @@ require "temporal/workflow/executor" require "temporal/workflow/stack_trace_tracker" +# Only require protos if not disabled +unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' + require "gen/temporal/api/history/v1/message_pb" +end + module Temporal module Testing class ReplayError < StandardError From debe21843b6214995fdcb1e4ea052f2b1075cc18 Mon Sep 17 00:00:00 2001 From: Chad Retz Date: Tue, 4 Feb 2025 14:24:33 -0600 Subject: [PATCH 2/2] Add comments --- lib/temporal/connection/grpc.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/temporal/connection/grpc.rb b/lib/temporal/connection/grpc.rb index 85f79191..9bbed7b7 100644 --- a/lib/temporal/connection/grpc.rb +++ b/lib/temporal/connection/grpc.rb @@ -3,8 +3,6 @@ require 'google/protobuf/well_known_types' require 'securerandom' require 'json' -require 'gen/temporal/api/workflowservice/v1/service_services_pb' -require 'gen/temporal/api/operatorservice/v1/service_services_pb' require 'temporal/connection/errors' require 'temporal/connection/interceptors/client_name_version_interceptor' require 'temporal/connection/serializer' @@ -13,13 +11,17 @@ require 'temporal/connection/serializer/schedule' require 'temporal/connection/serializer/workflow_id_reuse_policy' -# Only require protos if not disabled +# Only require protos if not disabled. This env var is commonly set to work alongside the temporalio/sdk-ruby project. unless ENV['COINBASE_TEMPORAL_RUBY_DISABLE_PROTO_LOAD'] == '1' require 'gen/temporal/api/filter/v1/message_pb' require 'gen/temporal/api/enums/v1/workflow_pb' require 'gen/temporal/api/enums/v1/common_pb' end +# These are gRPC stubs, not protos, and therefore are not disabled when protos are +require 'gen/temporal/api/workflowservice/v1/service_services_pb' +require 'gen/temporal/api/operatorservice/v1/service_services_pb' + module Temporal module Connection class GRPC