Sfoglia il codice sorgente

#953 Protect the background processing against corrupted (incomplete) objects.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3231 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 11 anni fa
parent
commit
af5d7cba30
1 ha cambiato i file con 18 aggiunte e 2 eliminazioni
  1. 18 2
      core/asynctask.class.inc.php

+ 18 - 2
core/asynctask.class.inc.php

@@ -40,8 +40,24 @@ class ExecAsyncTask implements iBackgroundProcess
 		$iProcessed = 0;
 		while ((time() < $iTimeLimit) && ($oTask = $oSet->Fetch()))
 		{
-			$oTask->Set('started', time());
-			$oTask->DBUpdate();
+			try
+			{
+				$oTask->Set('started', time());
+				$oTask->DBUpdate();
+			}
+			catch(Exception $e)
+			{
+				// Corrupted task !! (for example: "Failed to reload object")
+				IssueLog::Error('Failed to process async task #'.$oTask->GetKey().' - reason: '.$e->getMessage().' - fatal error, deleting the task.');
+			   	if ($oTask->Get('event_id') != 0)
+			   	{
+			   		$oEventLog = MetaModel::GetObject('Event', $oTask->Get('event_id'));
+			   		$oEventLog->Set('message', 'Failed, corrupted data: '.$e->getMessage());
+			   		$oEventLog->DBUpdate();
+				}
+				$oTask->DBDelete();
+				continue; // end of processing for this task
+			}
 
 			try
 			{