@@ -457,12 +457,15 @@ def _auto_persist_trainee(self, trainee_id: str):
457457 if new_file_size <= trainee .file_size * 2 and new_file_size <= trainee .file_size + 10485760 :
458458 return
459459
460- self .amlg .store_entity (
460+ resolved_path = self .resolve_trainee_filepath (trainee_id )
461+ is_persisted = self .amlg .store_entity (
461462 handle = trainee_id ,
462- file_path = self . resolve_trainee_filepath ( trainee_id ) ,
463+ file_path = resolved_path ,
463464 persist = True ,
464465 json_file_params = '{"transactional":true,"flatten":true}'
465466 )
467+ if not is_persisted :
468+ warnings .warn (f'Failed to auto persist Trainee "{ trainee_id } " to file path: { resolved_path } ' , UserWarning )
466469 trainee .file_size = self ._trainee_size (trainee_id )
467470
468471 def _store_session (self , trainee_id : str , session : Session ):
@@ -1084,18 +1087,29 @@ def update_trainee(self, trainee: Mapping | Trainee) -> Trainee:
10841087
10851088 if old_trainee .persistence == 'always' and instance .persistence != 'always' :
10861089 # Manually persist the trainee now, turning off transactional mode.
1087- self .amlg .store_entity (
1088- handle = instance .id ,
1089- file_path = self .resolve_trainee_filepath (instance .id )
1090- )
1090+ resolved_path = self .resolve_trainee_filepath (instance .id )
1091+ is_persisted = self .amlg .store_entity (handle = instance .id , file_path = resolved_path )
1092+ if not is_persisted :
1093+ raise HowsoError (
1094+ f'Failed to update persistence of Trainee "{ instance .id } ", '
1095+ f"could not write Trainee to file path: { resolved_path } " ,
1096+ code = "persist_failed" ,
1097+ )
10911098 elif instance .persistence == 'always' and old_trainee .persistence != 'always' :
10921099 # Manually persist the trainee, turning on transactional mode.
1093- self .amlg .store_entity (
1100+ resolved_path = self .resolve_trainee_filepath (instance .id )
1101+ is_persisted = self .amlg .store_entity (
10941102 handle = instance .id ,
1095- file_path = self . resolve_trainee_filepath ( instance . id ) ,
1103+ file_path = resolved_path ,
10961104 persist = True ,
1097- json_file_params = '{"transactional":true,"flatten":true}'
1105+ json_file_params = '{"transactional":true,"flatten":true}' ,
10981106 )
1107+ if not is_persisted :
1108+ raise HowsoError (
1109+ f'Failed to update persistence of Trainee "{ instance .id } ", '
1110+ f"could not write Trainee to file path: { resolved_path } " ,
1111+ code = "persist_failed" ,
1112+ )
10991113 instance .file_size = self ._trainee_size (instance .id )
11001114
11011115 metadata = {
@@ -1577,10 +1591,18 @@ def release_trainee_resources(self, trainee_id: str):
15771591
15781592 if trainee .persistence in ['allow' , 'always' ]:
15791593 # Persist on unload
1580- self .amlg .store_entity (
1594+ resolved_path = self .resolve_trainee_filepath (trainee_id )
1595+ is_persisted = self .amlg .store_entity (
15811596 handle = trainee_id ,
1582- file_path = self . resolve_trainee_filepath ( trainee_id )
1597+ file_path = resolved_path ,
15831598 )
1599+ if not is_persisted :
1600+ # If persist fails, do not proceed to delete the trainee from memory
1601+ raise HowsoError (
1602+ f'Failed to release resources for Trainee "{ trainee_id } ", '
1603+ f'could not write Trainee to file path: { resolved_path } ' ,
1604+ code = "persist_failed" ,
1605+ )
15841606 elif trainee .persistence == "never" :
15851607 raise HowsoError (
15861608 "Trainees set to never persist may not have their "
@@ -1618,12 +1640,17 @@ def persist_trainee(self, trainee_id: str):
16181640 "persistence option to enable persistence." )
16191641 transactional = (trainee is not None and trainee .persistence == 'always' )
16201642
1621- self .amlg .store_entity (
1643+ resolved_path = self .resolve_trainee_filepath (trainee_id )
1644+ is_persisted = self .amlg .store_entity (
16221645 handle = trainee_id ,
1623- file_path = self . resolve_trainee_filepath ( trainee_id ) ,
1646+ file_path = resolved_path ,
16241647 persist = transactional ,
16251648 json_file_params = '{"transactional":true,"flatten":true}' if transactional else ""
16261649 )
1650+ if not is_persisted :
1651+ raise HowsoError (
1652+ f'Failed to write Trainee "{ trainee_id } " to file path: { resolved_path } ' , code = "persist_failed"
1653+ )
16271654
16281655 if transactional :
16291656 assert trainee is not None
0 commit comments