231231 WORKFLOW : {'log_records' : 10 }
232232}
233233
234+ # Data types for protobuf memory reset
235+ RESET_PROTOBUF_TYPES = {
236+ TASKS ,
237+ TASK_PROXIES ,
238+ FAMILIES ,
239+ FAMILY_PROXIES ,
240+ WORKFLOW ,
241+ }
242+
234243# internal runtime to protobuf field name mapping
235244RUNTIME_CFG_MAP_TO_FIELD = {
236245 'completion' : 'completion' ,
@@ -421,6 +430,10 @@ def apply_delta(key, delta, data):
421430
422431 # Merge in updated fields
423432 if getattr (delta , 'updated' , False ):
433+ # Flag for clearing memory accumulation
434+ reset_protobuf = False
435+ if key in RESET_PROTOBUF_TYPES :
436+ reset_protobuf = True
424437 if key == WORKFLOW :
425438 # Clear fields that require overwrite with delta
426439 field_set = {f .name for f , _ in delta .updated .ListFields ()}
@@ -437,6 +450,10 @@ def apply_delta(key, delta, data):
437450 lst = getattr (data [key ], field_name )
438451 while len (lst ) > max_len :
439452 lst .pop (0 )
453+
454+ # Clear memory accumulation
455+ if reset_protobuf :
456+ data [key ] = reset_protobuf_object (PbWorkflow , data [key ])
440457 else :
441458 for element in delta .updated :
442459 try :
@@ -446,8 +463,9 @@ def apply_delta(key, delta, data):
446463 if field .name in CLEAR_FIELD_MAP [key ]:
447464 data_element .ClearField (field .name )
448465 data_element .MergeFrom (element )
466+
449467 # Clear memory accumulation
450- if key in ( TASKS , FAMILIES ) :
468+ if reset_protobuf :
451469 data [key ][element .id ] = reset_protobuf_object (
452470 MESSAGE_MAP [key ],
453471 data_element
@@ -461,10 +479,6 @@ def apply_delta(key, delta, data):
461479 )
462480 continue
463481
464- # Clear memory accumulation
465- if key == WORKFLOW :
466- data [key ] = reset_protobuf_object (PbWorkflow , data [key ])
467-
468482 # Prune data elements
469483 if hasattr (delta , 'pruned' ):
470484 # UIS flag to prune workflow, set externally.
0 commit comments