From 255ade26d05e3b5a8680a776d46d2d86c3932e20 Mon Sep 17 00:00:00 2001
From: Robert Butora <robert.butora@inaf.it>
Date: Fri, 26 Apr 2024 11:49:22 +0200
Subject: [PATCH] improves error handling for pixel-cuts (vlkb imcopy)

---
 data-access/engine/src/vlkb/src/imcopy.cpp          | 10 +++-------
 data-access/engine/src/vlkb/src/imcopy.hpp          |  2 +-
 data-access/engine/src/vlkb/src/main.cpp            | 12 +++++++++---
 .../servlet/src/main/java/cutout/CutoutImpl.java    | 13 ++++++++++++-
 4 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/data-access/engine/src/vlkb/src/imcopy.cpp b/data-access/engine/src/vlkb/src/imcopy.cpp
index 51ce015..37f3fdb 100644
--- a/data-access/engine/src/vlkb/src/imcopy.cpp
+++ b/data-access/engine/src/vlkb/src/imcopy.cpp
@@ -31,9 +31,7 @@ int stream_cutout(string pathname, int extnum, string region)
    {
       string pixfilter{ to_cfitsio_format(bnds) };
 
-      int rc = imcopy(pathname, extnum, pixfilter, "dummy");
-      if(rc)
-         std::cout << "rc = " << rc << std::endl;
+      imcopy(pathname, extnum, pixfilter, "dummy");
       return EXIT_SUCCESS;
 
    }
@@ -61,7 +59,7 @@ int fits_copy_image_section2(
 
 
 
-int imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root)
+void imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root)
 {
    LOG_trace(__func__);
 
@@ -97,7 +95,7 @@ int imcopy(std::string filename, int extnum, std::string pixfilter, std::string
       throw runtime_error("fits_open_file to stream failed: " + errmsg);
    }
 
-   int rc = fits_copy_image_section2(fptr, newfptr, expr, &status);
+   fits_copy_image_section2(fptr, newfptr, expr, &status);
    if (status)
    {
       string errmsg{fitsfiles::cfitsio_errmsg(__FILE__, __LINE__, status)};
@@ -118,8 +116,6 @@ int imcopy(std::string filename, int extnum, std::string pixfilter, std::string
       string errmsg{fitsfiles::cfitsio_errmsg(__FILE__, __LINE__, status)};
       throw runtime_error("fits_close_file cut failed: " + errmsg);
    }
-
-   return rc;
 }
 
 
diff --git a/data-access/engine/src/vlkb/src/imcopy.hpp b/data-access/engine/src/vlkb/src/imcopy.hpp
index f58eadb..f973ad9 100644
--- a/data-access/engine/src/vlkb/src/imcopy.hpp
+++ b/data-access/engine/src/vlkb/src/imcopy.hpp
@@ -3,7 +3,7 @@
 
 #include <string>
 
-int imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root);
+void imcopy(std::string filename, int extnum, std::string pixfilter, std::string temp_root);
 int stream_cutout(std::string pathname, int extnum, std::string region);
 #endif
 
diff --git a/data-access/engine/src/vlkb/src/main.cpp b/data-access/engine/src/vlkb/src/main.cpp
index ee5d6c2..af3e0f0 100644
--- a/data-access/engine/src/vlkb/src/main.cpp
+++ b/data-access/engine/src/vlkb/src/main.cpp
@@ -189,9 +189,15 @@ int cmd_imcopy(int argc, char * argv[])
       int extnum = std::stoi(std::string{argv[2]});
       std::string pixfilter{argv[3]};
       std::string temp_root = ((argc == 5) ? argv[4] : "/tmp" );
-      int rc = imcopy(infilename, extnum, pixfilter, temp_root);
-      if(rc)
-         std::cout << "rc = " << rc << std::endl;
+      try
+      {
+         imcopy(infilename, extnum, pixfilter, temp_root);
+      }
+      catch(const std::exception & ex)
+      {
+         std::cerr << ex.what() << std::endl;
+         return EXIT_FAILURE;
+      }
       return EXIT_SUCCESS;
    }
    else
diff --git a/data-access/servlet/src/main/java/cutout/CutoutImpl.java b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
index 9fc4275..f22075e 100644
--- a/data-access/servlet/src/main/java/cutout/CutoutImpl.java
+++ b/data-access/servlet/src/main/java/cutout/CutoutImpl.java
@@ -162,12 +162,14 @@ class CutoutImpl implements Cutout
       {
          /* cutout -> outputStream */
 
+         String pixFilterString = pixels_valid ? pixels : boundsString;
+
          String[] cmdCut = new String[6];
          cmdCut[0] = "/usr/local/bin/vlkb";
          cmdCut[1] = "imcopy";
          cmdCut[2] = absPathname;
          cmdCut[3] = String.valueOf(hdunum-1);
-         cmdCut[4] = pixels_valid ? pixels : boundsString;
+         cmdCut[4] = pixFilterString;
          cmdCut[5] = settings.fitsPaths.cutouts();
 
          if(outputStream == null)
@@ -176,6 +178,15 @@ class CutoutImpl implements Cutout
          ExecCmd execCut = new ExecCmd();
          execCut.doRun(outputStream, cmdCut);
 
+         LOGGER.info("execCut exitValue: " + execCut.exitValue);
+
+         boolean cut_successful = (execCut.exitValue == 0);
+
+         if(!cut_successful)
+         {
+            throw new IllegalArgumentException("cut by pixels not completed for pixels : " + pixFilterString);
+         }
+
          Instant cutDone = Instant.now();
          LOGGER.info("EXECTIME    cutDone: " + Duration.between(start, cutDone));
       }
-- 
GitLab