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