diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/FakeReadOnlySolrContentStore.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/FakeReadOnlySolrContentStore.java
index 43b8ae7c5..64a4b763e 100644
--- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/FakeReadOnlySolrContentStore.java
+++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/content/FakeReadOnlySolrContentStore.java
@@ -67,9 +67,6 @@ public class FakeReadOnlySolrContentStore extends SolrContentStore
.getFields()
.entrySet()
.stream()
- .filter(entry -> {
- SchemaField field = entry.getValue();
- return field.useDocValuesAsStored();})
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
diff --git a/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrClusteringComponent.java b/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrClusteringComponent.java
deleted file mode 100644
index 417e03d42..000000000
--- a/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrClusteringComponent.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (C) 2005-2013 Alfresco Software Limited.
- *
- * This file is part of Alfresco
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-package org.apache.solr.handler.component;
-
-import static org.alfresco.repo.search.adaptor.lucene.QueryConstants.FIELD_SOLR4_ID;
-
-import java.io.IOException;
-import java.lang.invoke.MethodHandles;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.alfresco.solr.AlfrescoCoreAdminHandler;
-import org.alfresco.solr.AlfrescoSolrDataModel;
-import org.alfresco.solr.AlfrescoSolrDataModel.TenantAclIdDbId;
-import org.alfresco.solr.SolrInformationServer;
-import org.alfresco.solr.content.SolrContentStore;
-import org.apache.commons.lang.StringUtils;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexableField;
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.SolrInputDocument;
-import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.SolrResourceLoader;
-import org.apache.solr.handler.clustering.ClusteringEngine;
-import org.apache.solr.handler.clustering.ClusteringParams;
-import org.apache.solr.handler.clustering.DocumentClusteringEngine;
-import org.apache.solr.handler.clustering.SearchClusteringEngine;
-import org.apache.solr.handler.clustering.carrot2.CarrotClusteringEngine;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.search.DocIterator;
-import org.apache.solr.search.DocList;
-import org.apache.solr.search.DocListAndSet;
-import org.apache.solr.util.plugin.SolrCoreAware;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Maps;
-
-/**
- * @author Andy
- *
- */
-public class AlfrescoSolrClusteringComponent extends SearchComponent implements
- SolrCoreAware {
- private static final Logger log = LoggerFactory.getLogger(MethodHandles
- .lookup().lookupClass());
-
-
-
- /**
- * Base name for all component parameters. This name is also used to
- * register this component with SearchHandler.
- */
- public static final String COMPONENT_NAME = "clustering";
-
- /**
- * Declaration-order list of search clustering engines.
- */
- private final LinkedHashMap searchClusteringEngines = Maps
- .newLinkedHashMap();
-
- /**
- * Declaration order list of document clustering engines.
- */
- private final LinkedHashMap documentClusteringEngines = Maps
- .newLinkedHashMap();
-
- /**
- * An unmodifiable view of {@link #searchClusteringEngines}.
- */
- private final Map searchClusteringEnginesView = Collections
- .unmodifiableMap(searchClusteringEngines);
-
- /**
- * Initialization parameters temporarily saved here, the component is
- * initialized in {@link #inform(SolrCore)} because we need to know the
- * core's {@link SolrResourceLoader}.
- *
- * @see #init(NamedList)
- */
- private NamedList initParams;
-
- @Override
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public void init(NamedList args) {
- this.initParams = args;
- super.init(args);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void inform(SolrCore core) {
- if (initParams != null) {
- log.info("Initializing Clustering Engines");
-
- // Our target list of engines, split into search-results and
- // document clustering.
- SolrResourceLoader loader = core.getResourceLoader();
-
- for (Map.Entry entry : initParams) {
- if ("engine".equals(entry.getKey())) {
- NamedList engineInitParams = (NamedList) entry
- .getValue();
- Boolean optional = engineInitParams
- .getBooleanArg("optional");
- optional = (optional == null ? Boolean.FALSE : optional);
-
- String engineClassName = StringUtils.defaultIfBlank(
- (String) engineInitParams.get("classname"),
- CarrotClusteringEngine.class.getName());
-
- // Instantiate the clustering engine and split to
- // appropriate map.
- final ClusteringEngine engine = loader.newInstance(
- engineClassName, ClusteringEngine.class);
- final String name = StringUtils.defaultIfBlank(
- engine.init(engineInitParams, core), "");
-
- if (!engine.isAvailable()) {
- if (optional) {
- log.info("Optional clustering engine not available: "
- + name);
- } else {
- throw new SolrException(ErrorCode.SERVER_ERROR,
- "A required clustering engine failed to initialize, check the logs: "
- + name);
- }
- }
-
- final ClusteringEngine previousEntry;
- if (engine instanceof SearchClusteringEngine) {
- previousEntry = searchClusteringEngines.put(name,
- (SearchClusteringEngine) engine);
- } else if (engine instanceof DocumentClusteringEngine) {
- previousEntry = documentClusteringEngines.put(name,
- (DocumentClusteringEngine) engine);
- } else {
- log.warn("Unknown type of a clustering engine for class: "
- + engineClassName);
- continue;
- }
- if (previousEntry != null) {
- log.warn("Duplicate clustering engine component named '"
- + name + "'.");
- }
- }
- }
-
- // Set up the default engine key for both types of engines.
- setupDefaultEngine("search results clustering",
- searchClusteringEngines);
- setupDefaultEngine("document clustering", documentClusteringEngines);
-
- log.info("Finished Initializing Clustering Engines");
- }
- }
-
- @Override
- public void prepare(ResponseBuilder rb) throws IOException {
- SolrParams params = rb.req.getParams();
- if (!params.getBool(COMPONENT_NAME, false)) {
- return;
- }
- }
-
- @Override
- public void process(ResponseBuilder rb) throws IOException {
- SolrParams params = rb.req.getParams();
- if (!params.getBool(COMPONENT_NAME, false)) {
- return;
- }
-
- final String name = getClusteringEngineName(rb);
- boolean useResults = params.getBool(
- ClusteringParams.USE_SEARCH_RESULTS, false);
- if (useResults == true) {
- SearchClusteringEngine engine = searchClusteringEngines.get(name);
- if (engine != null) {
- checkAvailable(name, engine);
- DocListAndSet results = rb.getResults();
- Map docIds = Maps
- .newHashMapWithExpectedSize(results.docList.size());
- SolrDocumentList solrDocList = docListToSolrDocumentList(
- results.docList, rb.req, docIds);
- Object clusters = engine.cluster(rb.getQuery(), solrDocList,
- docIds, rb.req);
- rb.rsp.add("clusters", clusters);
- } else {
- log.warn("No engine named: " + name);
- }
- }
-
- boolean useCollection = params.getBool(ClusteringParams.USE_COLLECTION,
- false);
- if (useCollection == true) {
- DocumentClusteringEngine engine = documentClusteringEngines
- .get(name);
- if (engine != null) {
- checkAvailable(name, engine);
- boolean useDocSet = params.getBool(
- ClusteringParams.USE_DOC_SET, false);
- NamedList> nl = null;
-
- // TODO: This likely needs to be made into a background task
- // that runs in an executor
- if (useDocSet == true) {
- nl = engine.cluster(rb.getResults().docSet, params);
- } else {
- nl = engine.cluster(params);
- }
- rb.rsp.add("clusters", nl);
- } else {
- log.warn("No engine named: " + name);
- }
- }
- }
-
- private void checkAvailable(String name, ClusteringEngine engine) {
- if (!engine.isAvailable()) {
- throw new SolrException(ErrorCode.SERVER_ERROR,
- "Clustering engine declared, but not available, check the logs: "
- + name);
- }
- }
-
- private String getClusteringEngineName(ResponseBuilder rb) {
- return rb.req.getParams().get(ClusteringParams.ENGINE_NAME,
- ClusteringEngine.DEFAULT_ENGINE_NAME);
- }
-
- public SolrDocumentList docListToSolrDocumentList(DocList docs,
- SolrQueryRequest req, Map ids)
- throws IOException {
-
- SolrDocumentList list = new SolrDocumentList();
- list.setNumFound(docs.matches());
- list.setMaxScore(docs.maxScore());
- list.setStart(docs.offset());
-
- DocIterator dit = docs.iterator();
-
- while (dit.hasNext()) {
- int docid = dit.nextDoc();
-
- Document luceneDoc = req.getSearcher().doc(docid);
- SolrInputDocument input = getSolrInputDocument(luceneDoc, req);
-
- SolrDocument doc = new SolrDocument();
-
- for (String fieldName : input.getFieldNames()) {
-
- doc.addField(fieldName, input.getFieldValue(fieldName));
- }
-
- doc.addField("score", dit.score());
-
- list.add(doc);
-
- if (ids != null) {
- ids.put(doc, Integer.valueOf(docid));
- }
- }
- return list;
- }
-
-
-
- private SolrInputDocument getSolrInputDocument(Document doc,
- SolrQueryRequest req) throws IOException {
- try {
- String id = getFieldValueString(doc, FIELD_SOLR4_ID);
- TenantAclIdDbId tenantAndDbId = AlfrescoSolrDataModel
- .decodeNodeDocumentId(id);
-
- CoreContainer coreContainer = req.getSearcher().getCore().getCoreContainer();
- AlfrescoCoreAdminHandler coreAdminHandler = (AlfrescoCoreAdminHandler) coreContainer.getMultiCoreHandler();
- SolrInformationServer srv = (SolrInformationServer) coreAdminHandler.getInformationServers().get(req.getSearcher().getCore().getName());
- SolrContentStore solrContentStore = srv.getSolrContentStore();
- SolrInputDocument sid = solrContentStore.retrieveDocFromSolrContentStore(
- tenantAndDbId.tenant, tenantAndDbId.dbId);
- return sid;
- } catch (StringIndexOutOfBoundsException e) {
- throw new IOException(e);
- }
- }
-
- private String getFieldValueString(Document doc, String fieldName) {
- IndexableField field = (IndexableField) doc.getField(fieldName);
- String value = null;
- if (field != null) {
- value = field.stringValue();
- }
- return value;
- }
-
- @Override
- public void finishStage(ResponseBuilder rb) {
- SolrParams params = rb.req.getParams();
- if (!params.getBool(COMPONENT_NAME, false)
- || !params.getBool(ClusteringParams.USE_SEARCH_RESULTS, false)) {
- return;
- }
-
- if (rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
- String name = getClusteringEngineName(rb);
- SearchClusteringEngine engine = searchClusteringEngines.get(name);
- if (engine != null) {
- checkAvailable(name, engine);
- SolrDocumentList solrDocList = (SolrDocumentList) rb.rsp
- .getValues().get("response");
- // TODO: Currently, docIds is set to null in distributed
- // environment.
- // This causes CarrotParams.PRODUCE_SUMMARY doesn't work.
- // To work CarrotParams.PRODUCE_SUMMARY under distributed mode,
- // we can choose either one of:
- // (a) In each shard, ClusteringComponent produces summary and
- // finishStage()
- // merges these summaries.
- // (b) Adding doHighlighting(SolrDocumentList, ...) method to
- // SolrHighlighter and
- // making SolrHighlighter uses "external text" rather than
- // stored values to produce snippets.
- Map docIds = null;
- Object clusters = engine.cluster(rb.getQuery(), solrDocList,
- docIds, rb.req);
- rb.rsp.add("clusters", clusters);
- } else {
- log.warn("No engine named: " + name);
- }
- }
- }
-
- /**
- * @return Expose for tests.
- */
- Map getSearchClusteringEnginesView() {
- return searchClusteringEnginesView;
- }
-
- @Override
- public String getDescription() {
- return "A Clustering component";
- }
-
- /**
- * Setup the default clustering engine.
- *
- * @see "https://issues.apache.org/jira/browse/SOLR-5219"
- */
- private static void setupDefaultEngine(
- String type, LinkedHashMap map) {
- // If there's already a default algorithm, leave it as is.
- String engineName = ClusteringEngine.DEFAULT_ENGINE_NAME;
- T defaultEngine = map.get(engineName);
-
- if (defaultEngine == null || !defaultEngine.isAvailable()) {
- // If there's no default algorithm, and there are any algorithms
- // available,
- // the first definition becomes the default algorithm.
- for (Map.Entry e : map.entrySet()) {
- if (e.getValue().isAvailable()) {
- engineName = e.getKey();
- defaultEngine = e.getValue();
- map.put(ClusteringEngine.DEFAULT_ENGINE_NAME, defaultEngine);
- break;
- }
- }
- }
-
- if (defaultEngine != null) {
- log.info("Default engine for " + type + ": " + engineName + " ["
- + defaultEngine.getClass().getSimpleName() + "]");
- } else {
- log.warn("No default engine for " + type + ".");
- }
- }
-}
diff --git a/search-services/alfresco-search/src/main/resources/solr/instance/templates/noRerank/conf/solrconfig.xml b/search-services/alfresco-search/src/main/resources/solr/instance/templates/noRerank/conf/solrconfig.xml
index a51492e56..331a4de85 100644
--- a/search-services/alfresco-search/src/main/resources/solr/instance/templates/noRerank/conf/solrconfig.xml
+++ b/search-services/alfresco-search/src/main/resources/solr/instance/templates/noRerank/conf/solrconfig.xml
@@ -1372,8 +1372,7 @@
http://wiki.apache.org/solr/ClusteringComponent
http://carrot2.github.io/solr-integration-strategies/
-->
-
+
lingo
diff --git a/search-services/alfresco-search/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml b/search-services/alfresco-search/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml
index 63b30325d..60a2dfdae 100644
--- a/search-services/alfresco-search/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml
+++ b/search-services/alfresco-search/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml
@@ -1374,8 +1374,7 @@
http://wiki.apache.org/solr/ClusteringComponent
http://carrot2.github.io/solr-integration-strategies/
-->
-
+
lingo
diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreChangeSetTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreChangeSetTest.java
deleted file mode 100644
index b1eee2dc8..000000000
--- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreChangeSetTest.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2005-2014 Alfresco Software Limited.
- *
- * This file is part of Alfresco
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-package org.alfresco.solr.content;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.search.Query;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-/**
- * Solr ContentStore {@link ChangeSet} test case.
- *
- * @author Andrea Gazzarini
- * @since 1.5
- */
-@RunWith(MockitoJUnitRunner.class)
-@Ignore
-// FIXME: Remove once SEARCH-1687 will be completed
-public class SolrContentStoreChangeSetTest
-{
- private ChangeSet changeSet;
- private final String contentStoreRootFolder = "/tmp";
- private final File rootFolder = new File(contentStoreRootFolder, ChangeSet.CHANGESETS_ROOT_FOLDER_NAME);
-
- @Before
- public void setUp()
- {
- changeSet = new ChangeSet.Builder().withContentStoreRoot(contentStoreRootFolder).build();
- }
-
- @After
- public void tearDown() throws IOException
- {
- changeSet.close();
- FileUtils.cleanDirectory(rootFolder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void nullContentStoreRootFolder_shouldThrowAnException()
- {
- new ChangeSet.Builder().withContentStoreRoot(null).build();
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void nonWriteableContentStoreRootFolder_shouldThrowAnException()
- {
- new ChangeSet.Builder().withContentStoreRoot("/root").build();
- }
-
- @Test
- public void newAddOrReplaceRecord_shouldRemovePreviousDeletion()
- {
- String path ="some/random/dbid.gz";
-
- assertTrue(changeSet.deletes.isEmpty());
- assertTrue(changeSet.adds.isEmpty());
-
- changeSet.delete(path);
-
- assertTrue(String.valueOf(changeSet.deletes), changeSet.deletes.contains(path));
- assertTrue(String.valueOf(changeSet.adds), changeSet.adds.isEmpty());
-
- changeSet.addOrReplace(path);
-
- assertTrue(String.valueOf(changeSet.deletes), changeSet.deletes.isEmpty());
- assertTrue(String.valueOf(changeSet.adds),changeSet.adds.contains(path));
- }
-
- @Test
- public void deletedRecord_shouldRemovePreviousAdd()
- {
- String path ="some/random/dbid.gz";
-
- assertTrue(changeSet.deletes.isEmpty());
- assertTrue(changeSet.adds.isEmpty());
-
- changeSet.addOrReplace(path);
-
- assertTrue(String.valueOf(changeSet.deletes), changeSet.deletes.isEmpty());
- assertTrue(String.valueOf(changeSet.adds), changeSet.adds.contains(path));
-
- changeSet.delete(path);
-
- assertTrue(String.valueOf(changeSet.deletes), changeSet.deletes.contains(path));
- assertTrue(String.valueOf(changeSet.adds),changeSet.adds.isEmpty());
- }
-
- @Test
- public void transientChangeset_doesNothingOnFlush() throws IOException
- {
- ChangeSet changeset = new ChangeSet.Builder().build();
- changeset.addOrReplace("A");
- changeset.delete("B");
-
- assertEquals(1, changeset.deletes.size());
- assertEquals(1, changeset.adds.size());
-
- changeset.flush();
-
- assertEquals(1, changeset.deletes.size());
- assertEquals(1, changeset.adds.size());
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void emptyChangeset_isImmutableDoesntAllowAdds()
- {
- ChangeSet changeset = new ChangeSet.Builder().empty().build();
- changeset.addOrReplace("A");
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void emptyChangeset_isImmutableDoesntAllowDeletes()
- {
- ChangeSet changeset = new ChangeSet.Builder().empty().build();
- changeset.delete("A");
- }
-
- @Test
- public void lastCommittedVersionNotPresentAtVeryBeginning()
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
- }
-
- @Test
- public void lastCommittedVersionNotAvailable_shouldReturnNO_AVAILABLE_VERSION() throws IOException
- {
- changeSet.selectEverything = mock(Query.class);
- when(changeSet.selectEverything.rewrite(any(IndexReader.class))).thenThrow(new RuntimeException());
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
- }
-
- @Test
- public void flushDoesNothingIfThereAreNoChanges() throws IOException
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
-
- changeSet.flush();
-
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
- }
-
- @Test
- public void invalidOrUnknownVersion() throws IOException
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
-
- assertTrue(changeSet.isUnknownVersion(SolrContentStore.NO_VERSION_AVAILABLE));
- assertTrue(changeSet.isUnknownVersion(SolrContentStore.NO_VERSION_AVAILABLE - 1L));
- assertTrue(changeSet.isUnknownVersion(System.currentTimeMillis()));
-
- changeSet.addOrReplace("A1");
- changeSet.addOrReplace("A2");
- changeSet.delete("A3");
- changeSet.delete("A1");
-
- changeSet.flush();
-
- long lastCommittedVersionAfterFirstFlush = changeSet.getLastCommittedVersion();
- assertNotEquals(SolrContentStore.NO_VERSION_AVAILABLE, lastCommittedVersionAfterFirstFlush);
-
- assertTrue(changeSet.isUnknownVersion(System.currentTimeMillis()));
- }
-
- @Test
- public void validVersion() throws IOException
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
-
- assertTrue(changeSet.isUnknownVersion(System.currentTimeMillis()));
-
- changeSet.addOrReplace("A1");
- changeSet.addOrReplace("A2");
- changeSet.delete("A3");
- changeSet.delete("A1");
-
- changeSet.flush();
-
- long lastCommittedVersionAfterFirstFlush = changeSet.getLastCommittedVersion();
-
- changeSet.addOrReplace("B1");
- changeSet.addOrReplace("B2");
- changeSet.delete("B3");
- changeSet.delete("B1");
-
- changeSet.flush();
-
- long lastCommittedVersionAfterSecondFlush = changeSet.getLastCommittedVersion();
- assertNotEquals(lastCommittedVersionAfterSecondFlush, lastCommittedVersionAfterFirstFlush);
-
- assertFalse(changeSet.isUnknownVersion(lastCommittedVersionAfterFirstFlush));
- assertFalse(changeSet.isUnknownVersion(lastCommittedVersionAfterSecondFlush));
- }
-
- @Test
- public void inCaseOfFailure_inputVersionIsConsideredUnknown() throws IOException
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
-
- assertTrue(changeSet.isUnknownVersion(System.currentTimeMillis()));
-
- changeSet.addOrReplace("A1");
- changeSet.addOrReplace("A2");
- changeSet.delete("A3");
- changeSet.delete("A1");
-
- changeSet.flush();
-
- long lastCommittedVersion = changeSet.getLastCommittedVersion();
-
- // Force a NPE exception...
- changeSet.searcher = null;
-
- // ...so a valid version is considered unknown even if it is valid
- assertTrue(changeSet.isUnknownVersion(lastCommittedVersion));
- }
-
- @Test
- public void persistentChangesetsAreMergedBeforeReturningToRequestor() throws IOException
- {
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, changeSet.getLastCommittedVersion());
-
- changeSet.addOrReplace("A1");
- changeSet.addOrReplace("A2");
- changeSet.delete("A3");
- changeSet.delete("A1");
-
- changeSet.flush();
-
- long lastCommittedVersionAfterFirstFlush = changeSet.getLastCommittedVersion();
- assertNotEquals(SolrContentStore.NO_VERSION_AVAILABLE, lastCommittedVersionAfterFirstFlush);
-
- changeSet.addOrReplace("A1");
- changeSet.addOrReplace("A3");
- changeSet.delete("A4");
-
- changeSet.flush();
-
- long lastCommittedVersionAfterSecondFlush = changeSet.getLastCommittedVersion();
- assertNotEquals(lastCommittedVersionAfterFirstFlush, lastCommittedVersionAfterSecondFlush);
-
- ChangeSet changesSinceTheVeryBeginning = changeSet.since(SolrContentStore.NO_VERSION_AVAILABLE);
-
- // ADDS = [A1, A2, A3]
- // DELS = [A4]
- assertEquals(3, changesSinceTheVeryBeginning.adds.size());
- assertEquals(1, changesSinceTheVeryBeginning.deletes.size());
- assertTrue(changesSinceTheVeryBeginning.adds.contains("A1"));
- assertTrue(changesSinceTheVeryBeginning.adds.contains("A2"));
- assertTrue(changesSinceTheVeryBeginning.adds.contains("A3"));
- assertTrue(changesSinceTheVeryBeginning.deletes.contains("A4"));
-
- ChangeSet changesAfterSecondFlush = changeSet.since(lastCommittedVersionAfterFirstFlush);
-
- // ADDS = [A1, A3]
- // DELS = [A4]
- assertEquals(2, changesAfterSecondFlush.adds.size());
- assertEquals(1, changesAfterSecondFlush.deletes.size());
- assertTrue(changesAfterSecondFlush.adds.contains("A1"));
- assertTrue(changesAfterSecondFlush.adds.contains("A3"));
- assertTrue(changesAfterSecondFlush.deletes.contains("A4"));
- }
-}
\ No newline at end of file
diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreTest.java
deleted file mode 100644
index 8e955c15a..000000000
--- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/content/SolrContentStoreTest.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Copyright (C) 2005-2014 Alfresco Software Limited.
- *
- * This file is part of Alfresco
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-package org.alfresco.solr.content;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import org.alfresco.solr.client.NodeMetaData;
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.common.SolrInputDocument;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-
-/**
- * Tests {@link SolrContentStoreTest}
- *
- * @author Derek Hulley
- * @author Andrea Gazzarini
- * @since 1.5
- */
-@RunWith(MockitoJUnitRunner.class)
-// FIXME: Remove once SEARCH-1687 will be completed
-public class SolrContentStoreTest
-{
- private static final String DEFAULT_TENANT = "_DEFAULT_";
-
- private String solrHome;
- private SolrContentStore contentStore;
-
- @Before
- public void setUp()
- {
- solrHome = new File("./target/contentstoretest/" + System.currentTimeMillis()).getAbsolutePath();
- contentStore = new SolrContentStore(solrHome);
- }
-
- @After
- public void tearDown() throws IOException
- {
- contentStore.close();
-
- File rootDir = new File(new SolrContentStore(solrHome).getRootLocation());
- FileUtils.deleteDirectory(rootDir);
- }
-
- @Test
- public void atVeryBeginningAccessModeIsNotSet()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
- }
-
- @Test
- public void whenAccessModeIsNotSetMethodCallsThrowsExceptionOrDoNothing()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- expectIllegalState(contentStore::getLastCommittedVersion);
- expectIllegalState(contentStore::setLastCommittedVersion, System.currentTimeMillis());
- expectIllegalState(contentStore::getChanges, System.currentTimeMillis());
- expectIllegalState(contentStore::removeDocFromContentStore, mock(NodeMetaData.class));
- expectIllegalState(contentStore::storeDocOnSolrContentStore, mock(NodeMetaData.class), mock(SolrInputDocument.class));
-
- try
- {
- contentStore.flushChangeSet();
- fail();
- }
- catch (IOException exception)
- {
- fail();
- }
- catch(IllegalStateException expected)
- {
- // Nothing to be done here
- }
-
- try
- {
- contentStore.storeDocOnSolrContentStore(DEFAULT_TENANT, System.currentTimeMillis(), mock(SolrInputDocument.class));
- fail();
- }
- catch(IllegalStateException expected)
- {
- // Nothing to be done here
- }
- }
-
- @Test
- public void lastCommittedVersionInReadOnlyModeNotFound()
- {
- contentStore.toggleReadOnlyMode(true);
-
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, contentStore.getLastCommittedVersion());
- }
-
- @Test
- public void lastCommittedVersionInReadOnlyModeNotFoundBecauseException() throws IOException
- {
- contentStore.toggleReadOnlyMode(true);
-
- Files.write(new File(contentStore.getRootLocation(), ".version").toPath(), "NAN".getBytes());
-
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, contentStore.getLastCommittedVersion());
- }
-
- @Test
- public void lastCommittedVersionInReadOnlyModeNotFoundBecauseFileIsEmpty() throws IOException
- {
- contentStore.toggleReadOnlyMode(true);
-
- File emptyVersionFile = new File(contentStore.getRootLocation(), ".version");
- emptyVersionFile.createNewFile();
-
- assertEquals(SolrContentStore.NO_VERSION_AVAILABLE, contentStore.getLastCommittedVersion());
- }
-
- @Test
- public void getLastCommittedVersionInReadOnlyMode() throws IOException
- {
- contentStore.toggleReadOnlyMode(true);
-
- long expectedLastCommittedVersion = System.currentTimeMillis();
-
- Files.write(new File(contentStore.getRootLocation(), ".version").toPath(), Long.toString(expectedLastCommittedVersion).getBytes());
-
- assertEquals(expectedLastCommittedVersion, contentStore.getLastCommittedVersion());
- }
-
- @Test
- public void setLastCommittedVersionInReadOnlyMode()
- {
- contentStore.toggleReadOnlyMode(true);
-
- long expectedLastCommittedVersion = System.currentTimeMillis();
- contentStore.setLastCommittedVersion(expectedLastCommittedVersion);
-
- File versionFile = new File(contentStore.getRootLocation(), ".version");
- assertTrue(versionFile.canRead());
-
- assertEquals(expectedLastCommittedVersion, contentStore.getLastCommittedVersion());
- }
-
- @Test
- public void getChangesInReadOnlyModeReturnsAnEmptyMap()
- {
- contentStore.toggleReadOnlyMode(true);
- assertEquals(Collections.>>emptyMap(), contentStore.getChanges(System.currentTimeMillis()));
- }
-
- @Test
- public void transitionFromNotSetToReadOnlyMode()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(true);
-
- assertSame(contentStore.readOnly, contentStore.currentAccessMode);
- }
-
- @Test
- public void transitionFromNotSetToReadWriteMode()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(false);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
- }
-
- @Test
- public void transitionFromReadOnlyToReadWriteMode()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(true);
-
- assertSame(contentStore.readOnly, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(false);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
- }
-
- @Test
- public void transitionFromReadOnlyToReadOnlyHasNoEffect()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(true);
-
- assertSame(contentStore.readOnly, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(true);
-
- assertSame(contentStore.readOnly, contentStore.currentAccessMode);
- }
-
- @Test
- public void transitionFromReadWriteToReadOnlyModeHasNoEffect()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(false);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(true);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
- }
-
- @Test
- public void transitionFromReadWriteToReadWriteHasNoEffect()
- {
- assertSame(contentStore.notYetSet, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(false);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
-
- contentStore.toggleReadOnlyMode(false);
-
- assertSame(contentStore.readWrite, contentStore.currentAccessMode);
- }
-
- @Test(expected = RuntimeException.class)
- public void contentStoreCreation_solrHomeNull_shouldThrowException()
- {
- new SolrContentStore(null);
- }
-
- @Test(expected = RuntimeException.class)
- public void contentStoreCreation_solrHomeEmpty_shouldThrowException()
- {
- new SolrContentStore("");
- }
-
- @Test
- public void contentStoreCreation_solrHomeNotExistSolrContentDirNotDefined_shouldUseDefaultContentStore()
- {
- SolrContentStore solrContentStore = new SolrContentStore(solrHome + "/notExist");
-
- Assert.assertThat(solrContentStore.getRootLocation(), is(solrHome + "/" + SolrContentStore.CONTENT_STORE));
- }
-
- @Test
- public void contentStoreCreation_solrHomeNotExistSolrContentDirDefined_shouldCreateContentStore()
- {
- String testContentDir = solrHome + "/test/content/dir";
- System.setProperty(SolrContentStore.SOLR_CONTENT_DIR, testContentDir);
-
- SolrContentStore solrContentStore = new SolrContentStore(solrHome + "/notExist");
-
- Assert.assertThat(solrContentStore.getRootLocation(), is(testContentDir));
-
- System.clearProperty(SolrContentStore.SOLR_CONTENT_DIR);
- }
-
- @Test
- public void contentStoreCreation_solrHomeExistSolrContentDirDefined_shouldCreateContentStore()
- {
- String testContentDir = solrHome + "/test/content/dir";
- System.setProperty(SolrContentStore.SOLR_CONTENT_DIR, testContentDir);
-
- SolrContentStore solrContentStore = new SolrContentStore(solrHome);
-
- Assert.assertThat(solrContentStore.getRootLocation(), is(testContentDir));
-
- System.clearProperty(SolrContentStore.SOLR_CONTENT_DIR);
- }
-
- @Test
- public void contentStoreCreation_solrHomeExistSolrContentDirNotDefined_shouldUseDefaultContentStore()
- {
- String existSolrHomePath = solrHome + "/exist";
- File existSolrHome = new File(existSolrHomePath);
- existSolrHome.mkdir();
-
- SolrContentStore solrContentStore = new SolrContentStore(existSolrHomePath);
-
- Assert.assertThat(solrContentStore.getRootLocation(), is(solrHome + "/" + SolrContentStore.CONTENT_STORE));
- }
-
- @Test
- public void rootLocation()
- {
- File rootDir = new File(contentStore.getRootLocation());
-
- assertTrue(rootDir.exists());
- assertTrue(rootDir.isDirectory());
- }
-
-
- @Test
- public void storeDocOnSolrContentStore()
- {
- contentStore.toggleReadOnlyMode(false);
-
- SolrInputDocument doc = mock(SolrInputDocument.class);
- long dbid = 111;
- String tenant = "me";
- SolrInputDocument document = contentStore.retrieveDocFromSolrContentStore(tenant, dbid);
- Assert.assertNull(document);
-
- contentStore.storeDocOnSolrContentStore(tenant, dbid, doc);
- document = contentStore.retrieveDocFromSolrContentStore(tenant, dbid);
- Assert.assertNotNull(document);
- }
-
- @Test
- public void storeDocOnSolrContentStoreNodeMetaData()
- {
- contentStore.toggleReadOnlyMode(false);
- SolrInputDocument doc = mock(SolrInputDocument.class);
- NodeMetaData nodeMetaData = mock(NodeMetaData.class);
- SolrInputDocument document = contentStore.retrieveDocFromSolrContentStore(DEFAULT_TENANT, 0);
- Assert.assertNull(document);
-
- contentStore.storeDocOnSolrContentStore(nodeMetaData, doc);
- document = contentStore.retrieveDocFromSolrContentStore(DEFAULT_TENANT, 0);
- Assert.assertNotNull(document);
- }
-
- @Test
- public void removeDocFromContentStore()
- {
- contentStore.toggleReadOnlyMode(false);
- SolrInputDocument doc = mock(SolrInputDocument.class);
- NodeMetaData nodeMetaData = mock(NodeMetaData.class);
- contentStore.storeDocOnSolrContentStore(nodeMetaData, doc);
- SolrInputDocument document = contentStore.retrieveDocFromSolrContentStore(DEFAULT_TENANT, 0);
- Assert.assertNotNull(document);
-
- contentStore.removeDocFromContentStore(nodeMetaData);
- document = contentStore.retrieveDocFromSolrContentStore(DEFAULT_TENANT, 0);
- Assert.assertNull(document);
- }
-
- private void expectIllegalState(Supplier> function)
- {
- try
- {
- function.get();
- fail();
- }
- catch (IllegalStateException expected)
- {
- // Nothing to do, this is expected
- }
- }
-
- private void expectIllegalState(Consumer function, T arg)
- {
- try
- {
- function.accept(arg);
- fail();
- }
- catch (IllegalStateException expected)
- {
- // Nothing to do, this is expected
- }
- }
-
- private void expectIllegalState(Function function, I arg)
- {
- try
- {
- function.apply(arg);
- fail();
- }
- catch (IllegalStateException expected)
- {
- // Nothing to do, this is expected
- }
- }
-
- private void expectIllegalState(BiConsumer function, A arg1, B arg2)
- {
- try
- {
- function.accept(arg1, arg2);
- fail();
- }
- catch (IllegalStateException expected)
- {
- // Nothing to do, this is expected
- }
- }
-}
diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/handler/ContentStoreReplicationIT.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/handler/ContentStoreReplicationIT.java
deleted file mode 100644
index 678afd5ad..000000000
--- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/handler/ContentStoreReplicationIT.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Alfresco Software Limited.
- *
- * This file is part of Alfresco
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- */
-package org.alfresco.solr.handler;
-
-import org.alfresco.solr.AbstractAlfrescoDistributedIT;
-import org.alfresco.solr.client.Acl;
-import org.alfresco.solr.client.AclChangeSet;
-import org.alfresco.solr.client.AclReaders;
-import org.alfresco.solr.client.Node;
-import org.alfresco.solr.client.NodeMetaData;
-import org.alfresco.solr.client.SOLRAPIQueueClient;
-import org.alfresco.solr.client.Transaction;
-import org.apache.commons.io.FileUtils;
-import org.apache.hadoop.util.Time;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.TermQuery;
-import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.client.solrj.SolrClient;
-import org.apache.solr.client.solrj.embedded.JettySolrRunner;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Properties;
-
-import static java.util.Collections.singletonList;
-import static org.alfresco.solr.AlfrescoSolrUtils.getAcl;
-import static org.alfresco.solr.AlfrescoSolrUtils.getAclChangeSet;
-import static org.alfresco.solr.AlfrescoSolrUtils.getAclReaders;
-import static org.alfresco.solr.AlfrescoSolrUtils.getNode;
-import static org.alfresco.solr.AlfrescoSolrUtils.getNodeMetaData;
-import static org.alfresco.solr.AlfrescoSolrUtils.getTransaction;
-import static org.alfresco.solr.AlfrescoSolrUtils.indexAclChangeSet;
-import static org.alfresco.solr.utils.AlfrescoFileUtils.areDirectoryEquals;
-import static org.carrot2.shaded.guava.common.collect.ImmutableList.of;
-
-/**
- * @author Elia Porciani
- *
- * This test check if the synchronization of contentstore between master and slave is done correctly.
- */
-@SolrTestCaseJ4.SuppressSSL
-public class ContentStoreReplicationIT extends AbstractAlfrescoDistributedIT
-{
-
- protected static JettySolrRunner master;
- protected static JettySolrRunner slave;
- protected static SolrClient masterClient;
- protected static SolrClient slaveClient;
-
- protected static Path masterSolrHome;
- protected static Path slaveSolrHome;
-
- protected static Path masterContentStore;
- protected static Path slaveContentStore;
-
- private static Acl acl;
- private static final int MILLIS_TIMOUT = 80000;
-
- @BeforeClass
- public static void createMasterSlaveEnv() throws Exception
- {
- Properties properties = new Properties();
-
- clientShards = new ArrayList<>();
- solrShards = new ArrayList<>();
- solrCollectionNameToStandaloneClient = new HashMap<>();
- jettyContainers = new HashMap<>();
-
- String coreName = "master";
- boolean basicAuth = Boolean.parseBoolean(properties.getProperty("BasicAuth", "false"));
-
- String masterDir = "master" + Time.now();
- String slaveDir = "slave" + Time.now();
-
- String masterKey = masterDir + "/solrHome";
- String slaveKey = slaveDir + "/solrHome";
-
- master = createJetty(masterKey, basicAuth);
- addCoreToJetty(masterKey, coreName, coreName, null);
- startJetty(master);
-
-
- String slaveCoreName = "slave";
- slave = createJetty(slaveKey, basicAuth);
- addCoreToJetty(slaveKey, slaveCoreName, slaveCoreName, null);
- setMasterUrl(slaveKey, slaveCoreName, master.getBaseUrl().toString() + "/master");
-
- startJetty(slave);
-
- String masterStr = buildUrl(master.getLocalPort()) + "/" + coreName;
- String slaveStr = buildUrl(slave.getLocalPort()) + "/" + slaveCoreName;
-
- masterClient = createNewSolrClient(masterStr);
- slaveClient = createNewSolrClient(slaveStr);
-
- masterSolrHome = testDir.toPath().resolve(masterKey);
- slaveSolrHome = testDir.toPath().resolve(slaveKey);
- masterContentStore = testDir.toPath().resolve(masterDir + "/contentstore");
- slaveContentStore = testDir.toPath().resolve(slaveDir + "/contentstore");
-
- AclChangeSet aclChangeSet = getAclChangeSet(1);
-
- acl = getAcl(aclChangeSet);
- AclReaders aclReaders = getAclReaders(aclChangeSet, acl, singletonList("joel"), singletonList("phil"), null);
-
- indexAclChangeSet(aclChangeSet,
- of(acl),
- of(aclReaders));
- }
-
-
- @AfterClass
- public static void cleanupMasterSlave() throws Exception
- {
- master.stop();
- slave.stop();
- FileUtils.deleteQuietly(new File(masterSolrHome.getParent().toUri()));
- FileUtils.deleteQuietly(new File(slaveSolrHome.getParent().toUri()));
-
- SOLRAPIQueueClient.nodeMetaDataMap.clear();
- SOLRAPIQueueClient.transactionQueue.clear();
- SOLRAPIQueueClient.aclChangeSetQueue.clear();
- SOLRAPIQueueClient.aclReadersMap.clear();
- SOLRAPIQueueClient.aclMap.clear();
- SOLRAPIQueueClient.nodeMap.clear();
- SOLRAPIQueueClient.nodeContentMap.clear();
- }
-
-
- @Test
- public void contentStoreReplicationTest() throws Exception
- {
- // ADD 250 nodes and check they are replicated
- int numNodes = 250;
- Transaction bigTxn = getTransaction(0, numNodes);
- List nodes = new ArrayList<>();
- List nodeMetaDatas = new ArrayList<>();
- for(int i = 0; i updateNodes = new ArrayList<>();
- List updateNodeMetaDatas = new ArrayList<>();
- for(int i = numNodes; i < totalNodes; i++) {
- Node node = getNode(i, updateTx, acl, Node.SolrApiNodeStatus.UPDATED);
- updateNodes.add(node);
- NodeMetaData nodeMetaData = getNodeMetaData(node, updateTx, acl, "mike", null, false);
- node.setNodeRef(nodeMetaData.getNodeRef().toString());
- updateNodeMetaDatas.add(nodeMetaData);
- }
-
- indexTransaction(updateTx, updateNodes, updateNodeMetaDatas);
-
- waitForDocCountCore(masterClient,
- luceneToSolrQuery(new TermQuery(new Term("content@s___t@{http://www.alfresco.org/model/content/1.0}content", "world"))),
- numNodes + numUpdates, MILLIS_TIMOUT, System.currentTimeMillis());
-
- filesInMasterContentStore = Files.walk(Paths.get(masterContentStore.toUri().resolve("_DEFAULT_")))
- .filter(Files::isRegularFile)
- .count();
-
- Assert.assertEquals( "master contentStore should have " + totalNodes + "files", totalNodes, filesInMasterContentStore);
- assertTrue("slave content store is not in sync after timeout", waitForContentStoreSync(MILLIS_TIMOUT));
-
-
- // DELETES 30 nodes
- int numDeletes = 30;
- Transaction deleteTx = getTransaction(numDeletes, 0);
-
- totalNodes = numNodes + numUpdates - numDeletes;
- List deleteNodes = new ArrayList<>();
- List deleteNodeMetaDatas = new ArrayList<>();
-
- for(int i = 0; i \n"
+
if [[ $REPLICATION_AFTER == "" ]]; then
- REPLICATION_AFTER=commit
+ REPLICATION_AFTER=commit,startup
fi
+
+ if [[ $REPLICATION_CONFIG_FILES == "" ]]; then
+ REPLICATION_CONFIG_FILES=schema.xml,stopwords.txt
+ fi
+
for i in $(echo $REPLICATION_AFTER | sed "s/,/ /g")
do
replaceStringMaster+="\t\t"$i"<\/str> \n"
done
+
if [[ ! -z "$REPLICATION_CONFIG_FILES" ]]; then
replaceStringMaster+="\t\t$REPLICATION_CONFIG_FILES<\/str> \n"
fi
+
replaceStringMaster+="\t<\/lst>"
+
sed -i "s/$findStringMaster/$findStringMaster$replaceStringMaster/g" $SOLR_CONFIG_FILE
+ sed -i "s/enable.alfresco.tracking=true/enable.alfresco.tracking=true\nenable.master=true\nenable.slave=false/g" $SOLR_CORE_FILE
fi
+
if [[ $REPLICATION_TYPE == "slave" ]]; then
+
if [[ $REPLICATION_MASTER_PROTOCOL == "" ]]; then
REPLICATION_MASTER_PROTOCOL=http
fi
+
if [[ $REPLICATION_MASTER_HOST == "" ]]; then
REPLICATION_MASTER_HOST=localhost
fi
+
if [[ $REPLICATION_MASTER_PORT == "" ]]; then
REPLICATION_MASTER_PORT=8083
fi
+
if [[ $REPLICATION_CORE_NAME == "" ]]; then
REPLICATION_CORE_NAME=alfresco
fi
+
if [[ $REPLICATION_POLL_INTERVAL == "" ]]; then
REPLICATION_POLL_INTERVAL=00:00:30
fi
+
sed -i 's//\
\
'$REPLICATION_MASTER_PROTOCOL':\/\/'$REPLICATION_MASTER_HOST':'$REPLICATION_MASTER_PORT'\/solr\/'$REPLICATION_CORE_NAME'<\/str>\
'$REPLICATION_POLL_INTERVAL'<\/str>\
<\/lst>/g' $SOLR_CONFIG_FILE
+ sed -i "s/enable.alfresco.tracking=true/enable.alfresco.tracking=false\nenable.master=false\nenable.slave=true/g" $SOLR_CORE_FILE
fi
SOLR_IN_FILE=$PWD/solr.in.sh