@@ -179,3 +179,37 @@ def consumer(ctx, producer_id):
179179 assert client .get_kv_value (producer_id , "status" ) == "done"
180180 finally :
181181 runtime .shutdown (100 )
182+
183+
184+ def test_kv_read_modify_write_counter (provider ):
185+ client = Client (provider )
186+ runtime = Runtime (provider , PyRuntimeOptions (dispatcher_poll_interval_ms = 50 ))
187+
188+ @runtime .register_activity ("ProcessBatch" )
189+ def process_batch (_ctx , input ):
190+ return f"processed:{ input } "
191+
192+ @runtime .register_orchestration ("BatchProcessor" )
193+ def batch_processor (ctx , _input ):
194+ for batch_name in ["alpha" , "beta" , "gamma" ]:
195+ processed = int (ctx .get_kv_value ("batches_processed" ) or "0" )
196+ result = yield ctx .schedule_activity ("ProcessBatch" , batch_name )
197+ ctx .set_kv_value ("batches_processed" , str (processed + 1 ))
198+ ctx .set_kv_value ("last_result" , result )
199+
200+ return ctx .get_kv_value ("batches_processed" ) or "0"
201+
202+ runtime .start ()
203+
204+ try :
205+ instance_id = uid ("batch-processor" )
206+ client .start_orchestration (instance_id , "BatchProcessor" , "" )
207+
208+ result = client .wait_for_orchestration (instance_id , 5_000 )
209+ assert result .status == "Completed"
210+ assert result .output == "3"
211+
212+ assert client .get_kv_value (instance_id , "batches_processed" ) == "3"
213+ assert client .get_kv_value (instance_id , "last_result" ) == "processed:gamma"
214+ finally :
215+ runtime .shutdown (100 )
0 commit comments