Bladeren bron

Fixes issues while running batch jobs

  - tmp file for globbing inputs would get clobbered by parallel jobs,
    now each job gets it's own temp file based on the glob path. (this
    is imperfect, but works for now)
  - Nicer printing of current file that limits the number of chars
    printed. Also option to append w/ a '\n' instead of a '\r' for
    capturing output in a file. (like w/ condor)
Caleb 6 jaren geleden
bovenliggende
commit
e91fbb1a90
2 gewijzigde bestanden met toevoegingen van 29 en 7 verwijderingen
  1. 7 3
      include/config.hpp
  2. 22 4
      include/dataset.hpp

+ 7 - 3
include/config.hpp

@@ -39,6 +39,7 @@
 #include <sstream>
 #include <sstream>
 
 
 #include <regex>
 #include <regex>
+#include <functional>
 
 
 #include "yaml-cpp/yaml.h"
 #include "yaml-cpp/yaml.h"
 
 
@@ -93,17 +94,20 @@ namespace fv_util {
 
 
 
 
     std::vector<std::string> glob(const std::string& base) {
     std::vector<std::string> glob(const std::string& base) {
+        std::hash<std::string> s_hash;
         std::stringstream ss;
         std::stringstream ss;
-        ss << "ls -1 " << base << " > __tmp__";
+        std::stringstream tmp_filename;
+        tmp_filename << "__tmp" << s_hash(base) << "__";
+        ss << "ls -1 " << base << " > " << tmp_filename.str();
         system(ss.str().c_str());
         system(ss.str().c_str());
 
 
         std::vector<std::string> filenames;
         std::vector<std::string> filenames;
-        std::ifstream f("__tmp__");
+        std::ifstream f(tmp_filename.str());
         std::string line;
         std::string line;
         while (std::getline(f, line)) {
         while (std::getline(f, line)) {
             filenames.push_back(line);
             filenames.push_back(line);
         }
         }
-        std::remove("__tmp__");
+        std::remove(tmp_filename.str().c_str());
         return filenames;
         return filenames;
     }
     }
 
 

+ 22 - 4
include/dataset.hpp

@@ -31,6 +31,7 @@
 #ifndef dataset_hpp
 #ifndef dataset_hpp
 #define dataset_hpp
 #define dataset_hpp
 #include <iostream>
 #include <iostream>
+#include <sstream>
 #include <functional>
 #include <functional>
 
 
 #include <sys/time.h>
 #include <sys/time.h>
@@ -68,6 +69,8 @@ namespace fv {
 
 
         timeval start_time;
         timeval start_time;
         bool stop_requested;
         bool stop_requested;
+        bool silent;
+        bool batch;
 
 
         void print_status() {
         void print_status() {
             size_t m_used = fv_util::getCurrentRSS() / 1024 / 1024;
             size_t m_used = fv_util::getCurrentRSS() / 1024 / 1024;
@@ -92,8 +95,20 @@ namespace fv {
             if (secs_remaining > 0) {
             if (secs_remaining > 0) {
                 time_remaining << secs_remaining << "S";
                 time_remaining << secs_remaining << "S";
             }
             }
-            std::cout << "\rprocessing event: " << current_event + 1 << "/" << get_events()
-                      << " of file: " << get_current_file().filename
+            if (batch) {
+                std::cout << "\n";
+            } else {
+                std::cout << "\r";
+            }
+
+            std::string filename = get_current_file().filename;
+            if (filename.size() > 80) {
+                std::stringstream ss;
+                ss << filename.substr(0,27) << "..." << filename.substr(filename.size() - 50);
+                filename = ss.str();
+            }
+            std::cout << "processing event: " << current_event + 1 << "/" << get_events()
+                      << " of file: " << filename
                       << ", " << m_used <<  "MB used "
                       << ", " << m_used <<  "MB used "
                       << ", " << time_remaining.str() << " est. time remaining"
                       << ", " << time_remaining.str() << " est. time remaining"
                       << std::flush;
                       << std::flush;
@@ -122,8 +137,11 @@ namespace fv {
 
 
     public:
     public:
         DataSet() : stop_requested(false){
         DataSet() : stop_requested(false){
-            max_events = fv_util::the_config->get_max_events();
+            using fv_util::the_config;
+            max_events = the_config->get_max_events();
             the_dataset = this;
             the_dataset = this;
+            silent = the_config->get("silent").as<bool>(false);
+            batch = the_config->get("batch").as<bool>(false);
 
 
             signal(SIGINT, request_stop_callback);
             signal(SIGINT, request_stop_callback);
             signal(SIGTERM, request_stop_callback);
             signal(SIGTERM, request_stop_callback);
@@ -133,7 +151,7 @@ namespace fv {
             if (stop_requested) return false;
             if (stop_requested) return false;
             int current_event = get_current_event();
             int current_event = get_current_event();
             if (current_event == 0) gettimeofday(&start_time, nullptr);
             if (current_event == 0) gettimeofday(&start_time, nullptr);
-            if (verbose and (((current_event + 1) % 500) == 0 or current_event+1 == get_events())) print_status();
+            if (!silent and (((current_event + 1) % 500) == 0 or current_event+1 == get_events())) print_status();
             GenValue::reset();
             GenValue::reset();
             return load_next();
             return load_next();
         }
         }