From 69aba6efc517512bbf408a4975583d73ed21a057 Mon Sep 17 00:00:00 2001
From: kck540 <kyle.klenk@usask.ca>
Date: Tue, 26 Apr 2022 14:27:31 -0400
Subject: [PATCH] added graceful failing for file_access_actor initialization

---
 build/source/actors/FileAccessActor.h     | 23 ++++++++++++++++++++---
 build/source/actors/JobActor.h            |  7 +++++++
 build/source/actors/SummaActor.h          |  5 +++++
 build/source/actors/messageAtoms.h        |  2 ++
 config/fileManager.txt                    | 22 ----------------------
 {config => utils}/fileManager_example.txt |  0
 6 files changed, 34 insertions(+), 25 deletions(-)
 delete mode 100644 config/fileManager.txt
 rename {config => utils}/fileManager_example.txt (100%)

diff --git a/build/source/actors/FileAccessActor.h b/build/source/actors/FileAccessActor.h
index 4750f5a..c8d51e6 100644
--- a/build/source/actors/FileAccessActor.h
+++ b/build/source/actors/FileAccessActor.h
@@ -155,30 +155,47 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) {
     // aout(self) << "Set Up the forcing file" << std::endl;
     ffile_info_C(&indx, self->state.handle_forcFileInfo, &self->state.numFiles, &err);
     if (err != 0) {
-        aout(self) << "Error: ffile_info_C - HRU = " << indx <<
-        " - indxGRU = " << indx << " - refGRU = " << std::endl;
+        aout(self) << "Error: ffile_info_C - File_Access_Actor \n";
+        std::string function = "ffile_info_C";
+        self->send(self->state.parent, file_access_actor_err_v, function);
         self->quit();
+        return;
     }
 
     mDecisions_C(&self->state.num_steps, &err);
     if (err != 0) {
-        aout(self) << "Error: mDecisions - FileAccess Actor " << std::endl;
+        aout(self) << "Error: mDecisions - FileAccess Actor \n";
+        std::string function = "mDecisions_C";
+        self->send(self->state.parent, file_access_actor_err_v, function);
         self->quit();
+        return;
     }
 
     read_pinit_C(&err);
     if (err != 0) {
         aout(self) << "ERROR: read_pinit_C\n";
+        std::string function = "read_pinit_C";
+        self->send(self->state.parent, file_access_actor_err_v, function);
+        self->quit();
+        return;
     }
     
     read_vegitationTables(&err);
     if (err != 0) {
         aout(self) << "ERROR: read_vegitationTables\n";
+        std::string function = "read_vegitationTables";
+        self->send(self->state.parent, file_access_actor_err_v, function);
+        self->quit();
+        return;
     }
 
     Create_Output_File(self->state.handle_ncid, &self->state.numGRU, &self->state.startGRU, &err);
     if (err != 0) {
         aout(self) << "ERROR: Create_OutputFile\n";
+        std::string function = "Create_Output_File";
+        self->send(self->state.parent, file_access_actor_err_v, function);
+        self->quit();
+        return;
     }
     
     
diff --git a/build/source/actors/JobActor.h b/build/source/actors/JobActor.h
index aa7c1db..63abb30 100644
--- a/build/source/actors/JobActor.h
+++ b/build/source/actors/JobActor.h
@@ -165,6 +165,13 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
             self->send(self->state.parent, done_job_v, self->state.numGRUFailed);
             self->quit();
         },
+
+        [=](file_access_actor_err, std::string function) {
+            aout(self) << "Failure in File Access Actor in function" << function << "\n";
+            aout(self) << "Letting Parent Know we are quitting\n";
+            self->send(self->state.parent, err_v);
+            self->quit();
+        }
     // *******************************************************************************************
     // ************************** END INTERFACE WITH FileAccessActor *****************************
     // *******************************************************************************************
diff --git a/build/source/actors/SummaActor.h b/build/source/actors/SummaActor.h
index bdad565..4bfe0e9 100644
--- a/build/source/actors/SummaActor.h
+++ b/build/source/actors/SummaActor.h
@@ -49,6 +49,11 @@ behavior summa_actor(stateful_actor<summa_manager>* self, int startGRU, int numG
 				spawnJob(self);
 			}
 		},
+
+		[=](err) {
+			aout(self) << "Unrecoverable Error: Attempting To Fail Gracefully\n";
+			self->quit();
+		}
 	};
 }
 
diff --git a/build/source/actors/messageAtoms.h b/build/source/actors/messageAtoms.h
index 9f38386..d845c79 100644
--- a/build/source/actors/messageAtoms.h
+++ b/build/source/actors/messageAtoms.h
@@ -5,6 +5,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id)
     // Summa Actor
     CAF_ADD_ATOM(summa, start_summa)
     CAF_ADD_ATOM(summa, done_job)
+    CAF_ADD_ATOM(summa, err)
     // Job Actor
     CAF_ADD_ATOM(summa, done_reading_forcingFile)
     CAF_ADD_ATOM(summa, done_reading_first_forcing_file)
@@ -17,6 +18,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id)
     CAF_ADD_ATOM(summa, run_failure)
     CAF_ADD_ATOM(summa, done_file_access_actor_init)
     CAF_ADD_ATOM(summa, file_access_actor_done)
+    CAF_ADD_ATOM(summa, file_access_actor_err)
     // FileAccess Actor
     CAF_ADD_ATOM(summa, initalize_outputStructure)
     CAF_ADD_ATOM(summa, access_forcing)
diff --git a/config/fileManager.txt b/config/fileManager.txt
deleted file mode 100644
index 3a5a89d..0000000
--- a/config/fileManager.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-controlVersion    'SUMMA_FILE_MANAGER_V3.0.0'
-simStartTime    '1979-01-01 00:00'
-simEndTime    '2019-12-31 23:00'
-tmZoneInfo    'utcTime'
-settingsPath    '/project/gwf/gwf_cmt/kck540/domain_NorthAmerica/settings/SUMMA/'
-forcingPath    '/project/gwf/gwf_cmt/kck540/domain_NorthAmerica/forcing/SummaChunkedData/'
-outputPath    '/scratch/gwf/gwf_cmt/kck540/SummaOutput/SummaActors/Apr-26-2022/netcdf/'
-forcingFreq    'month'
-forcingStart    '1979-01-01'
-decisionsFile    'modelDecisions.txt'
-outputControlFile    'outputControl.txt'
-globalHruParamFile    'localParamInfo.txt'
-globalGruParamFile    'basinParamInfo.txt'
-attributeFile    'attributes.nc'
-trialParamFile    'trialParams.nc'
-forcingListFile    'forcingFileList.txt'
-initConditionFile    'coldState.nc'
-outFilePrefix    'SummaActors'
-vegTableFile    'TBL_VEGPARM.TBL'
-soilTableFile    'TBL_SOILPARM.TBL'
-generalTableFile    'TBL_GENPARM.TBL'
-noahmpTableFile    'TBL_MPTABLE.TBL'
diff --git a/config/fileManager_example.txt b/utils/fileManager_example.txt
similarity index 100%
rename from config/fileManager_example.txt
rename to utils/fileManager_example.txt
-- 
GitLab