diff --git a/src/commons/DBWriter.cpp b/src/commons/DBWriter.cpp index 40f8711f6..ae652dcea 100644 --- a/src/commons/DBWriter.cpp +++ b/src/commons/DBWriter.cpp @@ -581,7 +581,7 @@ void DBWriter::mergeResults(const char *outFileName, const char *outFileNameInde // merge index mergeIndex(indexFileNames, dataFilenames.size(), mergedSizes); - } else { + } else if (dataFilenames.size() == 1) { std::vector& filenames = dataFilenames[0]; if (filenames.size() == 1) { // In single thread dbreader mode it will create a .0 @@ -590,12 +590,25 @@ void DBWriter::mergeResults(const char *outFileName, const char *outFileNameInde } else { DBReader::moveDatafiles(filenames, outFileName); } - } - if (indexNeedsToBeSorted) { - DBWriter::sortIndex(indexFileNames[0], outFileNameIndex, lexicographicOrder); - FileUtil::remove(indexFileNames[0]); } else { - FileUtil::move(indexFileNames[0], outFileNameIndex); + FILE *outFh = FileUtil::openAndDelete(outFileName, "w"); + if (fclose(outFh) != 0) { + Debug(Debug::ERROR) << "Cannot close data file " << outFileName << "\n"; + EXIT(EXIT_FAILURE); + } + outFh = FileUtil::openAndDelete(outFileNameIndex, "w"); + if (fclose(outFh) != 0) { + Debug(Debug::ERROR) << "Cannot close index file " << outFileNameIndex << "\n"; + EXIT(EXIT_FAILURE); + } + } + if (dataFilenames.size() > 0) { + if (indexNeedsToBeSorted) { + DBWriter::sortIndex(indexFileNames[0], outFileNameIndex, lexicographicOrder); + FileUtil::remove(indexFileNames[0]); + } else { + FileUtil::move(indexFileNames[0], outFileNameIndex); + } } Debug(Debug::INFO) << "Time for merging to " << FileUtil::baseName(outFileName) << ": " << timer.lap() << "\n"; } diff --git a/src/prefiltering/Prefiltering.cpp b/src/prefiltering/Prefiltering.cpp index aebbde3d9..06d0504a7 100644 --- a/src/prefiltering/Prefiltering.cpp +++ b/src/prefiltering/Prefiltering.cpp @@ -633,13 +633,13 @@ void Prefiltering::runMpiSplits(const std::string &resultDB, const std::string & // merge output databases mergePrefilterSplits(resultDB, resultDBIndex, splitFiles); } else { - Debug(Debug::ERROR) << "Aborting. No results were computed!\n"; - EXIT(EXIT_FAILURE); + DBWriter writer(resultDB.c_str(), resultDBIndex.c_str(), 1, compressed, Parameters::DBTYPE_PREFILTER_RES); + writer.open(); + writer.close(); } delete [] results; } - } #endif @@ -696,6 +696,11 @@ int Prefiltering::runSplits(const std::string &resultDB, const std::string &resu if (runSplit(resultDB.c_str(), resultDBIndex.c_str(), fromSplit, merge)) { hasResult = true; } + } else if (splitProcessCount == 0) { + DBWriter writer(resultDB.c_str(), resultDBIndex.c_str(), 1, compressed, Parameters::DBTYPE_PREFILTER_RES); + writer.open(); + writer.close(); + hasResult = false; } return hasResult;