diff OrthancServer/Scheduler/ModifyInstanceCommand.cpp @ 1099:060e8918d7a4

More fault-tolerant commands in Lua scripts
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 07 Aug 2014 10:02:22 +0200
parents 187ed107a59f
children 6e7e5ed91c2d
line wrap: on
line diff
--- a/OrthancServer/Scheduler/ModifyInstanceCommand.cpp	Tue Aug 05 16:18:45 2014 +0200
+++ b/OrthancServer/Scheduler/ModifyInstanceCommand.cpp	Thu Aug 07 10:02:22 2014 +0200
@@ -44,24 +44,32 @@
     {
       LOG(INFO) << "Modifying resource " << *it;
 
-      std::auto_ptr<ParsedDicomFile> modified;
-
+      try
       {
-        ServerContext::DicomCacheLocker lock(context_, *it);
-        modified.reset(lock.GetDicom().Clone());
-      }
+        std::auto_ptr<ParsedDicomFile> modified;
 
-      modification_.Apply(*modified);
+        {
+          ServerContext::DicomCacheLocker lock(context_, *it);
+          modified.reset(lock.GetDicom().Clone());
+        }
+
+        modification_.Apply(*modified);
 
-      DicomInstanceToStore toStore;
-      toStore.SetParsedDicomFile(*modified);
-      // TODO other metadata
-      toStore.AddMetadata(ResourceType_Instance, MetadataType_ModifiedFrom, *it);
+        DicomInstanceToStore toStore;
+        toStore.SetParsedDicomFile(*modified);
+        // TODO other metadata
+        toStore.AddMetadata(ResourceType_Instance, MetadataType_ModifiedFrom, *it);
+
+        std::string modifiedId;
+        context_.Store(modifiedId, toStore);
 
-      std::string modifiedId;
-      context_.Store(modifiedId, toStore);
-
-      outputs.push_back(modifiedId);
+        // Only chain with other commands if this command succeeds
+        outputs.push_back(modifiedId);
+      }
+      catch (OrthancException& e)
+      {
+        LOG(ERROR) << "Unable to modify instance " << *it << " in a Lua script: " << e.What();
+      }
     }
 
     return true;