idCount : idCounts)
{
- long idInIndex = Long.valueOf(idCount.getKey());
+ long idInIndex = Long.parseLong(idCount.getKey());
// Only looks at facet values that fit the query
if (batchStartId <= idInIndex && idInIndex <= batchEndId)
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 a11f3f4ba..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
@@ -43,12 +43,14 @@ import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.Predicate;
+import java.util.stream.Stream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
@@ -236,7 +238,8 @@ public final class SolrContentStore implements Closeable, AccessMode
{
try
{
- return Files.lines(Paths.get(root, ".version"))
+ return Files.readAllLines(Paths.get(root, ".version"))
+ .stream()
.map(Long::parseLong)
.findFirst()
.orElse(NO_VERSION_AVAILABLE);
@@ -250,18 +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();
- tmpFile.renameTo(new File(root, ".version"));
+ // file.renameTo(..) does not work on windows. Use Files.move instead.
+ 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 ee1666778..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
@@ -34,40 +34,10 @@
*/
package org.alfresco.solr.handler;
-import static java.util.List.of;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.ALIAS;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CHECKSUM;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_CONTENT_STORE_FILES;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_DETAILS;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_GET_FILE;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_GET_FILE_LIST;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_INDEX_VERSION;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.COMMAND;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.COMPRESSION;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONF_FILES;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONF_FILE_SHORT;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_FILES;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_FILE_LIST;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_VERSION;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.EXTERNAL;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FILE;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FILE_STREAM;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FileInfo;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.GENERATION;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.INTERNAL;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.MASTER_URL;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.NO_INDEX_REPLICATION_REQUIRED;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.OFFSET;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.SIZE;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.TLOG_FILE;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.TLOG_FILES;
-import static org.alfresco.solr.handler.AlfrescoReplicationHandler.getCheckSum;
-import static org.apache.solr.common.params.CommonParams.JAVABIN;
-import static org.apache.solr.common.params.CommonParams.NAME;
-
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import org.alfresco.solr.content.SolrContentStore;
+import org.apache.commons.io.FilenameUtils;
import org.apache.http.client.HttpClient;
import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.index.IndexCommit;
@@ -152,6 +122,37 @@ import java.util.zip.Adler32;
import java.util.zip.Checksum;
import java.util.zip.InflaterInputStream;
+import static java.util.List.of;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.ALIAS;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CHECKSUM;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_CONTENT_STORE_FILES;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_DETAILS;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_GET_FILE;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_GET_FILE_LIST;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CMD_INDEX_VERSION;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.COMMAND;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.COMPRESSION;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONF_FILES;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONF_FILE_SHORT;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_FILES;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_FILE_LIST;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.CONTENT_STORE_VERSION;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.EXTERNAL;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FILE;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FILE_STREAM;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.FileInfo;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.GENERATION;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.INTERNAL;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.MASTER_URL;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.NO_INDEX_REPLICATION_REQUIRED;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.OFFSET;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.SIZE;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.TLOG_FILE;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.TLOG_FILES;
+import static org.alfresco.solr.handler.AlfrescoReplicationHandler.getCheckSum;
+import static org.apache.solr.common.params.CommonParams.JAVABIN;
+import static org.apache.solr.common.params.CommonParams.NAME;
+
/**
* Provides functionality of downloading changed index files as well as config files and a timer for scheduling fetches from the
* master.
@@ -188,6 +189,13 @@ class AlfrescoIndexFetcher
private final Map confFileInfoCache = new HashMap<>();
private volatile Date replicationStartTimeStamp;
private RTimer replicationTimer;
+
+ /**
+ * The map contains the following fields:
+ * NAME : String -> file name(with path for contentstore files)
+ * SIZE : long -> file size
+ * CHECKSUM : long -> checksum
+ */
private volatile List