@@ -1125,11 +1125,31 @@ def receiveMsg_WakeupMessage(self, msg, sender):
1125
1125
elif self .executor_future is not None and self .executor_future .done ():
1126
1126
e = self .executor_future .exception (timeout = 0 )
1127
1127
if e :
1128
- self .logger .exception ("Worker[%s] has detected a benchmark failure. Notifying master..." ,
1129
- str (self .worker_id ), exc_info = e )
1130
- # the exception might be user-defined and not be on the load path of the master worker_coordinator. Hence, it cannot be
1131
- # deserialized on the receiver so we convert it here to a plain string.
1132
- self .send (self .master , actor .BenchmarkFailure ("Error in load generator [{}]" .format (self .worker_id ), str (e )))
1128
+ currentTasks = self .client_allocations .tasks (self .current_task_index )
1129
+ detailed_error = (
1130
+ f"Benchmark operation failed:\n "
1131
+ f"Worker ID: { self .worker_id } \n "
1132
+ f"Task: { ', ' .join (t .task .task .name for t in currentTasks )} \n "
1133
+ f"Workload: { self .workload .name if self .workload else 'Unknown' } \n "
1134
+ f"Test Procedure: { self .workload .selected_test_procedure_or_default } \n "
1135
+ f"Cause: { e .cause if hasattr (e , 'cause' ) and e .cause is not None else 'Unknown' } "
1136
+ )
1137
+ detailed_error += f"\n Error: { str (e )} "
1138
+
1139
+ self .logger .exception (
1140
+ "Worker[%s] has detected a benchmark failure:\n %s" ,
1141
+ str (self .worker_id ),
1142
+ detailed_error ,
1143
+ exc_info = e
1144
+ )
1145
+
1146
+ self .send (
1147
+ self .master ,
1148
+ actor .BenchmarkFailure (
1149
+ detailed_error ,
1150
+ str (e )
1151
+ )
1152
+ )
1133
1153
else :
1134
1154
self .logger .info ("Worker[%s] is ready for the next task." , str (self .worker_id ))
1135
1155
self .executor_future = None
0 commit comments