diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/SolrContentStore.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/SolrContentStore.java index f08dcf288..1a3694a11 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/SolrContentStore.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/SolrContentStore.java @@ -236,9 +236,11 @@ public final class SolrContentStore implements Closeable, AccessMode @Override public long getLastCommittedVersion() { - try(Stream fileStream = Files.lines(Paths.get(root, ".version")) ) + try { - return fileStream.map(Long::parseLong) + return Files.readAllLines(Paths.get(root, ".version")) + .stream() + .map(Long::parseLong) .findFirst() .orElse(NO_VERSION_AVAILABLE); } @@ -251,20 +253,29 @@ public final class SolrContentStore implements Closeable, AccessMode @Override public void setLastCommittedVersion(long version) { + + File tmpFile = new File(root, ".version-" + new SimpleDateFormat(SnapShooter.DATE_FMT, Locale.ROOT).format(new Date())); try { - File tmpFile = new File(root, ".version-" + new SimpleDateFormat(SnapShooter.DATE_FMT, Locale.ROOT).format(new Date())); FileWriter wr = new FileWriter(tmpFile); wr.write(Long.toString(version)); wr.close(); // file.renameTo(..) does not work on windows. Use Files.move instead. - Files.move(tmpFile.toPath(), new File(root, ".version").toPath(), StandardCopyOption.REPLACE_EXISTING); + Files.move(tmpFile.toPath(), new File(root, ".version").toPath(), StandardCopyOption.ATOMIC_MOVE); } catch (IOException exception) { logger.error("Unable to persist the last committed content store version {}. See the stacktrace below for furtger details.", version, exception); + try + { + Files.delete(tmpFile.toPath()); + } + catch (IOException e) + { + logger.error("Unable to delete tmp contentstore version file {}.", version); + } } } diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/handler/AlfrescoIndexFetcher.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/handler/AlfrescoIndexFetcher.java index 536ce0354..bb36889e7 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/handler/AlfrescoIndexFetcher.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/handler/AlfrescoIndexFetcher.java @@ -1714,7 +1714,7 @@ class AlfrescoIndexFetcher try { Files.createDirectories(Paths.get(csFile.getParent())); - Files.copy(tmpFile.toPath(), csFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + Files.move(tmpFile.toPath(), csFile.toPath(), StandardCopyOption.ATOMIC_MOVE); } catch (IOException e) {