@@ -12,8 +12,8 @@ def initialize(
1212 config ,
1313 synchronizer ,
1414 telemetry_runtime_producer ,
15- sdk_blocker ,
16- telemetry_synchronizer
15+ telemetry_synchronizer ,
16+ status_manager
1717 )
1818 @synchronizer = synchronizer
1919 notification_manager_keeper = SSE ::NotificationManagerKeeper . new ( config , telemetry_runtime_producer ) do |manager |
@@ -33,55 +33,41 @@ def initialize(
3333 @sse_connected = Concurrent ::AtomicBoolean . new ( false )
3434 @config = config
3535 @telemetry_runtime_producer = telemetry_runtime_producer
36- @sdk_blocker = sdk_blocker
3736 @telemetry_synchronizer = telemetry_synchronizer
37+ @status_manager = status_manager
3838 end
3939
4040 def start
41- if @config . streaming_enabled
42- start_stream
43- start_stream_forked if defined? ( PhusionPassenger )
44- elsif @config . standalone?
45- start_poll
46- end
47-
48- synchronize_telemetry_config
41+ start_thread
42+ PhusionPassenger . on_event ( :starting_worker_process ) { |forked | start_thread if forked } if defined? ( PhusionPassenger )
4943 end
5044
5145 private
5246
53- # Starts tasks if stream is enabled.
54- def start_stream
55- @config . logger . debug ( 'Starting push mode ...' )
56- @synchronizer . sync_all
57- @synchronizer . start_periodic_data_recording
58-
59- start_sse_connection_thread
60- end
47+ def start_thread
48+ @config . threads [ :start_sdk ] = Thread . new do
49+ sleep ( 0.5 ) until @synchronizer . sync_all ( false )
6150
62- def start_poll
63- @config . logger . debug ( 'Starting polling mode ...' )
64- @synchronizer . start_periodic_fetch
65- @synchronizer . start_periodic_data_recording
66- record_telemetry ( Telemetry ::Domain ::Constants ::SYNC_MODE , SYNC_MODE_POLLING )
67- rescue StandardError => e
68- @config . logger . error ( "start_poll error : #{ e . inspect } " )
69- end
51+ @status_manager . ready!
52+ @telemetry_synchronizer . synchronize_config
53+ @synchronizer . start_periodic_data_recording
54+ connected = false
7055
71- # Starts thread which connect to sse and after that fetch splits and segments once.
72- def start_sse_connection_thread
73- @config . threads [ :sync_manager_start_sse ] = Thread . new do
74- begin
56+ if @config . streaming_enabled
57+ @config . logger . debug ( 'Starting Straming mode ...' )
7558 connected = @push_manager . start_sse
76- @synchronizer . start_periodic_fetch unless connected
77- rescue StandardError => e
78- @config . logger . error ( "start_sse_connection_thread error : #{ e . inspect } " )
59+
60+ if defined? ( PhusionPassenger )
61+ PhusionPassenger . on_event ( :starting_worker_process ) { |forked | sse_thread_forked if forked }
62+ end
7963 end
80- end
81- end
8264
83- def start_stream_forked
84- PhusionPassenger . on_event ( :starting_worker_process ) { |forked | start_stream if forked }
65+ unless connected
66+ @config . logger . debug ( 'Starting polling mode ...' )
67+ @synchronizer . start_periodic_fetch
68+ record_telemetry ( Telemetry ::Domain ::Constants ::SYNC_MODE , SYNC_MODE_POLLING )
69+ end
70+ end
8571 end
8672
8773 def process_action ( action )
@@ -165,16 +151,9 @@ def record_telemetry(type, data)
165151 @telemetry_runtime_producer . record_streaming_event ( type , data )
166152 end
167153
168- def synchronize_telemetry_config
169- @config . threads [ :telemetry_config_sender ] = Thread . new do
170- begin
171- @sdk_blocker . wait_unitil_internal_ready unless @config . consumer?
172- @telemetry_synchronizer . synchronize_config
173- rescue SplitIoClient ::SDKShutdownException
174- @telemetry_synchronizer . synchronize_config
175- @config . logger . info ( 'Posting Telemetry config due to shutdown' )
176- end
177- end
154+ def sse_thread_forked
155+ connected = @push_manager . start_sse
156+ @synchronizer . start_periodic_fetch unless connected
178157 end
179158 end
180159 end
0 commit comments