Windows: only retry failed files if exec is newer than dbdir

This commit is contained in:
Jean-Francois Dockes 2019-03-06 18:42:28 +01:00
parent be57d0153a
commit a67ce0a1e8
5 changed files with 37 additions and 7 deletions

View File

@ -16,25 +16,51 @@
*/ */
#include "autoconfig.h" #include "autoconfig.h"
#include "checkretryfailed.h"
#include "safesysstat.h"
#include <string> #include <string>
#include <vector> #include <vector>
#include "rclconfig.h" #include "rclconfig.h"
#include "execmd.h" #include "execmd.h"
#include "log.h" #include "log.h"
#include "checkretryfailed.h" #include "pathut.h"
#include "recollindex.h"
using namespace std; using namespace std;
bool checkRetryFailed(RclConfig *conf, bool record) bool checkRetryFailed(RclConfig *conf, bool record)
{ {
#ifdef _WIN32 #ifdef _WIN32
return true; // Under Windows we only retry if the recollindex program is newer
// than the index
struct stat st;
string path(thisprog);
if (path_suffix(path).empty()) {
path = path + ".exe";
}
if (path_fileprops(path, &st) != 0) {
LOGERR("checkRetryFailed: can't stat the program file: " <<
thisprog << endl);
return false;
}
time_t exetime = st.st_mtime;
if (path_fileprops(conf->getDbDir(), &st) != 0) {
// Maybe it just does not exist.
LOGDEB("checkRetryFailed: can't stat the index directory: " <<
conf->getDbDir() << endl);
return false;
}
time_t dbtime = st.st_mtime;
return exetime > dbtime;
#else #else
string cmd; string cmd;
if (!conf->getConfParam("checkneedretryindexscript", cmd)) { if (!conf->getConfParam("checkneedretryindexscript", cmd)) {
LOGDEB("checkRetryFailed: 'checkneedretryindexscript' not set in config\n" ); LOGDEB("checkRetryFailed: 'checkneedretryindexscript' "
"not set in config\n");
// We could toss a dice ? Say no retry in this case. // We could toss a dice ? Say no retry in this case.
return false; return false;
} }

View File

@ -427,7 +427,7 @@ bool runWebFilesMoverScript(RclConfig *config)
} }
static const char *thisprog; string thisprog;
static const char usage [] = static const char usage [] =
"\n" "\n"
@ -483,7 +483,7 @@ static void
Usage(FILE *where = stderr) Usage(FILE *where = stderr)
{ {
FILE *fp = (op_flags & OPT_h) ? stdout : stderr; FILE *fp = (op_flags & OPT_h) ? stdout : stderr;
fprintf(fp, "%s: Usage: %s", thisprog, usage); fprintf(fp, "%s: Usage: %s", path_getsimple(thisprog).c_str(), usage);
fprintf(fp, "Recoll version: %s\n", Rcl::version_string().c_str()); fprintf(fp, "Recoll version: %s\n", Rcl::version_string().c_str());
exit((op_flags & OPT_h)==0); exit((op_flags & OPT_h)==0);
} }
@ -565,7 +565,7 @@ int main(int argc, char **argv)
o_reexec->init(argc, argv); o_reexec->init(argc, argv);
#endif #endif
thisprog = argv[0]; thisprog = path_absolute(argv[0]);
argc--; argv++; argc--; argv++;
while (argc > 0 && **argv == '-') { while (argc > 0 && **argv == '-') {
@ -697,7 +697,10 @@ int main(int argc, char **argv)
indexerFlags &= ~ConfIndexer::IxFNoRetryFailed; indexerFlags &= ~ConfIndexer::IxFNoRetryFailed;
} else { } else {
if (checkRetryFailed(config, false)) { if (checkRetryFailed(config, false)) {
LOGDEB("recollindex: files in error will be retried\n");
indexerFlags &= ~ConfIndexer::IxFNoRetryFailed; indexerFlags &= ~ConfIndexer::IxFNoRetryFailed;
} else {
LOGDEB("recollindex: files in error will not be retried\n");
} }
} }

View File

@ -43,5 +43,6 @@ extern void addIdxReason(std::string who, std::string reason);
class ReExec; class ReExec;
extern ReExec *o_reexec; extern ReExec *o_reexec;
extern std::string thisprog;
#endif /* _recollindex_h_included_ */ #endif /* _recollindex_h_included_ */

View File

@ -39,7 +39,6 @@ SOURCES += \
../../common/utf8fn.cpp \ ../../common/utf8fn.cpp \
../../index/webqueue.cpp \ ../../index/webqueue.cpp \
../../index/webqueuefetcher.cpp \ ../../index/webqueuefetcher.cpp \
../../index/checkretryfailed.cpp \
../../index/fetcher.cpp \ ../../index/fetcher.cpp \
../../index/exefetcher.cpp \ ../../index/exefetcher.cpp \
../../index/fsfetcher.cpp \ ../../index/fsfetcher.cpp \

View File

@ -15,6 +15,7 @@ DEFINES += RCL_MONITOR
SOURCES += \ SOURCES += \
../../index/recollindex.cpp \ ../../index/recollindex.cpp \
../../index/checkretryfailed.cpp \
../../index/rclmonprc.cpp \ ../../index/rclmonprc.cpp \
../../index/rclmonrcv.cpp ../../index/rclmonrcv.cpp