diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java index 0f19165e0..19f0df1f0 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java @@ -33,12 +33,12 @@ import org.alfresco.solr.adapters.IOpenBitSet; import org.alfresco.solr.client.SOLRAPIClientFactory; import org.alfresco.solr.config.ConfigUtil; import org.alfresco.solr.tracker.AclTracker; -import org.alfresco.solr.tracker.CoreStatePublisher; +import org.alfresco.solr.tracker.AbstractShardInformationPublisher; import org.alfresco.solr.tracker.DBIDRangeRouter; import org.alfresco.solr.tracker.DocRouter; import org.alfresco.solr.tracker.IndexHealthReport; import org.alfresco.solr.tracker.MetadataTracker; -import org.alfresco.solr.tracker.SlaveCoreStatePublisher; +import org.alfresco.solr.tracker.NodeStatePublisher; import org.alfresco.solr.tracker.SolrTrackerScheduler; import org.alfresco.solr.tracker.Tracker; import org.alfresco.solr.tracker.TrackerRegistry; @@ -2009,11 +2009,11 @@ public class AlfrescoCoreAdminHandler extends CoreAdminHandler * @param coreName the owning core name. * @return the component which is in charge to publish the core state. */ - CoreStatePublisher coreStatePublisher(String coreName) + AbstractShardInformationPublisher coreStatePublisher(String coreName) { return ofNullable(trackerRegistry.getTrackerForCore(coreName, MetadataTracker.class)) - .map(CoreStatePublisher.class::cast) - .orElse(trackerRegistry.getTrackerForCore(coreName, SlaveCoreStatePublisher.class)); + .map(AbstractShardInformationPublisher.class::cast) + .orElse(trackerRegistry.getTrackerForCore(coreName, NodeStatePublisher.class)); } /** diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/HandlerReportHelper.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/HandlerReportHelper.java index 43d402de5..ebcf4ef26 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/HandlerReportHelper.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/HandlerReportHelper.java @@ -125,7 +125,7 @@ class HandlerReportHelper return nr; } - static NamedList buildNodeReport(CoreStatePublisher publisher, Long dbid) throws JSONException + static NamedList buildNodeReport(AbstractShardInformationPublisher publisher, Long dbid) throws JSONException { NodeReport nodeReport = publisher.checkNode(dbid); @@ -248,7 +248,7 @@ class HandlerReportHelper NamedList coreSummary = new SimpleOrderedMap<>(); coreSummary.addAll((SimpleOrderedMap) srv.getCoreStats()); - SlaveCoreStatePublisher statePublisher = trackerRegistry.getTrackerForCore(cname, SlaveCoreStatePublisher.class); + NodeStatePublisher statePublisher = trackerRegistry.getTrackerForCore(cname, NodeStatePublisher.class); TrackerState trackerState = statePublisher.getTrackerState(); long lastIndexTxCommitTime = trackerState.getLastIndexedTxCommitTime(); diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/lifecycle/SolrCoreLoadListener.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/lifecycle/SolrCoreLoadListener.java index bd8225c57..00cb220d4 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/lifecycle/SolrCoreLoadListener.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/lifecycle/SolrCoreLoadListener.java @@ -51,7 +51,7 @@ import org.alfresco.solr.tracker.CommitTracker; import org.alfresco.solr.tracker.ContentTracker; import org.alfresco.solr.tracker.MetadataTracker; import org.alfresco.solr.tracker.ModelTracker; -import org.alfresco.solr.tracker.SlaveCoreStatePublisher; +import org.alfresco.solr.tracker.NodeStatePublisher; import org.alfresco.solr.tracker.SolrTrackerScheduler; import org.alfresco.solr.tracker.Tracker; import org.alfresco.solr.tracker.TrackerRegistry; @@ -190,7 +190,7 @@ public class SolrCoreLoadListener extends AbstractSolrEventListener { LOGGER.info("SearchServices Core Trackers have been explicitly disabled on core \"{}\" through \"enable.alfresco.tracking\" configuration property.", core.getName()); - SlaveCoreStatePublisher statePublisher = new SlaveCoreStatePublisher(false, coreProperties, repositoryClient, core.getName(), informationServer); + NodeStatePublisher statePublisher = new NodeStatePublisher(false, coreProperties, repositoryClient, core.getName(), informationServer); trackerRegistry.register(core.getName(), statePublisher); scheduler.schedule(statePublisher, core.getName(), coreProperties); trackers.add(statePublisher); @@ -205,7 +205,7 @@ public class SolrCoreLoadListener extends AbstractSolrEventListener { LOGGER.info("SearchServices Core Trackers have been disabled on core \"{}\" because it is a slave core.", core.getName()); - SlaveCoreStatePublisher statePublisher = new SlaveCoreStatePublisher(false, coreProperties, repositoryClient, core.getName(), informationServer); + NodeStatePublisher statePublisher = new NodeStatePublisher(false, coreProperties, repositoryClient, core.getName(), informationServer); trackerRegistry.register(core.getName(), statePublisher); scheduler.schedule(statePublisher, core.getName(), coreProperties); trackers.add(statePublisher); @@ -258,12 +258,21 @@ public class SolrCoreLoadListener extends AbstractSolrEventListener MetadataTracker metadataTracker = registerAndSchedule( - new MetadataTracker(true, props, repositoryClient, core.getName(), srv, true), + new MetadataTracker(props, repositoryClient, core.getName(), srv, true), core, props, trackerRegistry, scheduler); + NodeStatePublisher coreStateTracker = + registerAndSchedule( + new NodeStatePublisher(true, props, repositoryClient, core.getName(), srv), + core, + props, + trackerRegistry, + scheduler + ); + List trackers = new ArrayList<>(); String cascadeTrackerEnabledProp = ofNullable((String) props.get(CASCADE_TRACKER_ENABLED)).orElse("true"); @@ -283,7 +292,7 @@ public class SolrCoreLoadListener extends AbstractSolrEventListener //The ContentTracker will likely have the longest runs so put it first to ensure the MetadataTracker is not paused while //waiting for the ContentTracker to release it's lock. //The aclTracker will likely have the shortest runs so put it last. - trackers.addAll(asList(contentTracker, metadataTracker, aclTracker)); + trackers.addAll(asList(contentTracker, metadataTracker, aclTracker, coreStateTracker)); return trackers; } diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/CoreStatePublisher.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AbstractShardInformationPublisher.java similarity index 92% rename from search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/CoreStatePublisher.java rename to search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AbstractShardInformationPublisher.java index 0b6f32c66..b71bd8286 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/CoreStatePublisher.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AbstractShardInformationPublisher.java @@ -26,10 +26,6 @@ package org.alfresco.solr.tracker; -import static java.util.Optional.of; -import static java.util.Optional.ofNullable; -import static org.alfresco.solr.tracker.DocRouterFactory.SHARD_KEY_KEY; - import org.alfresco.opencmis.dictionary.CMISStrictDictionaryService; import org.alfresco.repo.dictionary.NamespaceDAO; import org.alfresco.repo.index.shard.ShardMethodEnum; @@ -53,6 +49,10 @@ import java.util.HashMap; import java.util.Optional; import java.util.Properties; +import static java.util.Optional.of; +import static java.util.Optional.ofNullable; +import static org.alfresco.solr.tracker.DocRouterFactory.SHARD_KEY_KEY; + /** * Superclass for all components which are able to inform Alfresco about the hosting node state. * This has been introduced in SEARCH-1752 for splitting the dual responsibility of the {@link org.alfresco.solr.tracker.MetadataTracker}. @@ -63,9 +63,9 @@ import java.util.Properties; * @since 1.5 * @see SEARCH-1752 */ -public abstract class CoreStatePublisher extends AbstractTracker +public abstract class AbstractShardInformationPublisher extends AbstractTracker { - private static final Logger LOGGER = LoggerFactory.getLogger(CoreStatePublisher.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractShardInformationPublisher.class); DocRouter docRouter; private final boolean isMaster; @@ -75,7 +75,7 @@ public abstract class CoreStatePublisher extends AbstractTracker /** The property to use for determining the shard. */ protected Optional shardProperty = Optional.empty(); - CoreStatePublisher( + AbstractShardInformationPublisher( boolean isMaster, Properties p, SOLRAPIClient client, @@ -93,7 +93,7 @@ public abstract class CoreStatePublisher extends AbstractTracker docRouter = DocRouterFactory.getRouter(p, ShardMethodEnum.getShardMethod(shardMethod)); } - CoreStatePublisher(Type type) + AbstractShardInformationPublisher(Type type) { super(type); this.isMaster = false; @@ -177,18 +177,8 @@ public abstract class CoreStatePublisher extends AbstractTracker * The {@link ShardState}, as the name suggests, encapsulates/stores the state of the shard which hosts this * {@link MetadataTracker} instance. * - * The {@link ShardState} is primarily used in two places: - * - *
    - *
  • Transaction tracking: (see {@link MetadataTracker#getSomeTransactions(BoundedDeque, Long, long, int, long}): for pulling/tracking transactions from Alfresco
  • - *
  • - * DynamicSharding: the {@link MetadataTracker} is not running on a slave instances; in those cases a special - * "tracker" ({@link SlaveCoreStatePublisher}) will be in charge to send the correspondin shard state to Alfresco. - *
  • - *
- * * @return the {@link ShardState} instance which stores the current state of the hosting shard. - * @see SlaveCoreStatePublisher + * @see NodeStatePublisher */ ShardState getShardState() { @@ -230,7 +220,7 @@ public abstract class CoreStatePublisher extends AbstractTracker .endShard() .endShardInstance() .build(); - + } /** diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/MetadataTracker.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/MetadataTracker.java index 1067fdfe2..383992ab5 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/MetadataTracker.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/MetadataTracker.java @@ -29,7 +29,6 @@ package org.alfresco.solr.tracker; import com.google.common.collect.Lists; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.httpclient.AuthenticationException; -import org.alfresco.repo.index.shard.ShardState; import org.alfresco.solr.BoundedDeque; import org.alfresco.solr.InformationServer; import org.alfresco.solr.NodeReport; @@ -69,7 +68,7 @@ import static org.alfresco.repo.index.shard.ShardMethodEnum.DB_ID_RANGE; * This tracks two things: transactions and metadata nodes * @author Ahmed Owian */ -public class MetadataTracker extends CoreStatePublisher implements Tracker +public class MetadataTracker extends AbstractShardInformationPublisher implements Tracker { protected final static Logger LOGGER = LoggerFactory.getLogger(MetadataTracker.class); @@ -142,26 +141,25 @@ public class MetadataTracker extends CoreStatePublisher implements Tracker */ private Pair minTxnIdRange; - public MetadataTracker(final boolean isMaster, Properties p, SOLRAPIClient client, String coreName, + public MetadataTracker(Properties p, SOLRAPIClient client, String coreName, InformationServer informationServer) { - this(isMaster, p, client, coreName, informationServer, false); + this(p, client, coreName, informationServer, false); } /** * MetadataTracker constructor - * - * @param isMaster is true if SOLR instance is master, false otherwise + * * @param p includes SOLR core properties (from environment variables and properties file) * @param client Alfresco Repository http client * @param coreName Name of the SOLR Core (alfresco, archive) * @param informationServer SOLR Information Server * @param checkRepoServicesAvailability is true if Repo Services availability needs to be checked */ - public MetadataTracker(final boolean isMaster, Properties p, SOLRAPIClient client, String coreName, + public MetadataTracker( Properties p, SOLRAPIClient client, String coreName, InformationServer informationServer, boolean checkRepoServicesAvailability) { - super(isMaster, p, client, coreName, informationServer, Tracker.Type.METADATA); + super(true, p, client, coreName, informationServer, Tracker.Type.METADATA); transactionDocsBatchSize = Integer.parseInt(p.getProperty("alfresco.transactionDocsBatchSize", String.valueOf(DEFAULT_TRANSACTION_DOCS_BATCH_SIZE))); @@ -736,8 +734,6 @@ public class MetadataTracker extends CoreStatePublisher implements Tracker int maxResults, long endTime) throws AuthenticationException, IOException, JSONException, EncoderException, NoSuchMethodException { - - ShardState shardstate = getShardState(); Transactions transactions; // step forward in time until we find something or hit the time bound @@ -749,14 +745,13 @@ public class MetadataTracker extends CoreStatePublisher implements Tracker null, startTime + timeStep, null, - maxResults, - shardstate); + maxResults); } do { transactions = client.getTransactions(startTime, null, startTime + timeStep, - null, maxResults, shardstate); + null, maxResults); startTime += timeStep; // If no transactions are found, advance the time window to the next available transaction commit time @@ -768,7 +763,7 @@ public class MetadataTracker extends CoreStatePublisher implements Tracker LOGGER.info("{}-[CORE {}] Advancing transactions from {} to {}", Thread.currentThread().getId(), coreName, startTime, nextTxCommitTime); transactions = client.getTransactions(nextTxCommitTime, null, - nextTxCommitTime + timeStep, null, maxResults, shardstate); + nextTxCommitTime + timeStep, null, maxResults); } } diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/SlaveCoreStatePublisher.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/NodeStatePublisher.java similarity index 95% rename from search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/SlaveCoreStatePublisher.java rename to search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/NodeStatePublisher.java index b8c04634f..822106fe1 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/SlaveCoreStatePublisher.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/NodeStatePublisher.java @@ -58,9 +58,9 @@ import java.util.concurrent.Semaphore; * @author Andrea Gazzarini * @since 1.5 */ -public class SlaveCoreStatePublisher extends CoreStatePublisher +public class NodeStatePublisher extends AbstractShardInformationPublisher { - private static final Logger LOGGER = LoggerFactory.getLogger(SlaveCoreStatePublisher.class); + private static final Logger LOGGER = LoggerFactory.getLogger(NodeStatePublisher.class); // Share run and write locks across all SlaveCoreStatePublisher threads @@ -79,7 +79,7 @@ public class SlaveCoreStatePublisher extends CoreStatePublisher return RUN_LOCK_BY_CORE.get(coreName); } - public SlaveCoreStatePublisher( + public NodeStatePublisher( boolean isMaster, Properties coreProperties, SOLRAPIClient repositoryClient, @@ -87,7 +87,6 @@ public class SlaveCoreStatePublisher extends CoreStatePublisher SolrInformationServer informationServer) { super(isMaster, coreProperties, repositoryClient, name, informationServer, NODE_STATE_PUBLISHER); - RUN_LOCK_BY_CORE.put(coreName, new Semaphore(1, true)); WRITE_LOCK_BY_CORE.put(coreName, new Semaphore(1, true)); } @@ -114,12 +113,6 @@ public class SlaveCoreStatePublisher extends CoreStatePublisher // Do nothing here } - @Override - public boolean isOnMasterOrStandalone() - { - return false; - } - @Override public boolean hasMaintenance() { diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/AlfrescoCoreAdminHandlerIT.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/AlfrescoCoreAdminHandlerIT.java index 227212ce2..33587101c 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/AlfrescoCoreAdminHandlerIT.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/AlfrescoCoreAdminHandlerIT.java @@ -62,7 +62,7 @@ import org.alfresco.solr.tracker.DocRouter; import org.alfresco.solr.tracker.IndexHealthReport; import org.alfresco.solr.tracker.MetadataTracker; import org.alfresco.solr.tracker.PropertyRouter; -import org.alfresco.solr.tracker.SlaveCoreStatePublisher; +import org.alfresco.solr.tracker.NodeStatePublisher; import org.alfresco.solr.tracker.TrackerRegistry; import org.apache.solr.common.SolrException; import org.apache.solr.common.params.CoreAdminParams; @@ -232,12 +232,12 @@ public class AlfrescoCoreAdminHandlerIT @Test public void coreIsSlave_thenCoreStatePublisherInstanceCorrespondsToSlaveCoreStatePublisher() { - SlaveCoreStatePublisher coreStatePublisher = mock(SlaveCoreStatePublisher.class); + NodeStatePublisher coreStateTracker = mock(NodeStatePublisher.class); when(trackerRegistry.getTrackerForCore(anyString(), eq(MetadataTracker.class))).thenReturn(null); - when(trackerRegistry.getTrackerForCore(anyString(), eq(SlaveCoreStatePublisher.class))).thenReturn(coreStatePublisher); + when(trackerRegistry.getTrackerForCore(anyString(), eq(NodeStatePublisher.class))).thenReturn(coreStateTracker); - assertSame(coreStatePublisher, alfrescoCoreAdminHandler.coreStatePublisher("ThisIsTheCoreName")); + assertSame(coreStateTracker, alfrescoCoreAdminHandler.coreStatePublisher("ThisIsTheCoreName")); } @Test diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/lifecycle/SolrCoreLoadListenerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/lifecycle/SolrCoreLoadListenerTest.java index 9f4217478..bc46468dc 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/lifecycle/SolrCoreLoadListenerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/lifecycle/SolrCoreLoadListenerTest.java @@ -33,6 +33,7 @@ import static org.alfresco.solr.tracker.Tracker.Type.ACL; import static org.alfresco.solr.tracker.Tracker.Type.CASCADE; import static org.alfresco.solr.tracker.Tracker.Type.CONTENT; import static org.alfresco.solr.tracker.Tracker.Type.METADATA; +import static org.alfresco.solr.tracker.Tracker.Type.NODE_STATE_PUBLISHER; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -126,7 +127,7 @@ public class SolrCoreLoadListenerTest verify(scheduler).schedule(any(CascadeTracker.class), eq(coreName), same(coreProperties)); Set trackerTypes = coreTrackers.stream().map(Tracker::getType).collect(Collectors.toSet()); - assertEquals("Unexpected trackers found.", Set.of(ACL, CONTENT, METADATA, CASCADE), trackerTypes); + assertEquals("Unexpected trackers found.", Set.of(ACL, CONTENT, METADATA, NODE_STATE_PUBLISHER, CASCADE), trackerTypes); } @Test @@ -147,7 +148,7 @@ public class SolrCoreLoadListenerTest verify(scheduler, never()).schedule(any(CascadeTracker.class), eq(coreName), same(coreProperties)); Set trackerTypes = coreTrackers.stream().map(Tracker::getType).collect(Collectors.toSet()); - assertEquals("Unexpected trackers found.", Set.of(ACL, CONTENT, METADATA), trackerTypes); + assertEquals("Unexpected trackers found.", Set.of(ACL, CONTENT, METADATA, NODE_STATE_PUBLISHER), trackerTypes); } @Test diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedCascadeTrackerIT.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedCascadeTrackerIT.java index ad9ba2474..c572dd368 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedCascadeTrackerIT.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/DistributedCascadeTrackerIT.java @@ -138,6 +138,7 @@ public class DistributedCascadeTrackerIT extends AbstractAlfrescoDistributedIT indexParentFolderWithCascade(); waitForDocCount(params("qt", "/afts", "q", "PATH:" + cascadingFirstChild), 1, INDEX_TIMEOUT); + waitForDocCount(params("qt", "/afts", "q", "PATH:" + cascadingSecondChild), 1, INDEX_TIMEOUT); // Check if the path is updated for both the nodes assertShardCount(0, params("qt", "/afts", "q", "PATH:" + cascadingFirstChild), 1); diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/MetadataTrackerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/MetadataTrackerTest.java index 2a7e1ec79..163e30bad 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/MetadataTrackerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/MetadataTrackerTest.java @@ -81,7 +81,7 @@ public class MetadataTrackerTest doReturn("workspace://SpacesStore").when(props).getProperty("alfresco.stores"); when(srv.getTrackerStats()).thenReturn(trackerStats); String coreName = "theCoreName"; - this.metadataTracker = spy(new MetadataTracker(true, props, repositoryClient, coreName, srv)); + this.metadataTracker = spy(new MetadataTracker(props, repositoryClient, coreName, srv)); ModelTracker modelTracker = mock(ModelTracker.class); when(modelTracker.hasModels()).thenReturn(true); diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/SolrTrackerSchedulerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/SolrTrackerSchedulerTest.java index bd276d116..9aa8ab969 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/SolrTrackerSchedulerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/tracker/SolrTrackerSchedulerTest.java @@ -133,7 +133,7 @@ public class SolrTrackerSchedulerTest { String exp = "0/4 * * * * ? *"; props.put("alfresco.metadata.tracker.cron", exp); - MetadataTracker metadataTracker = new MetadataTracker(true, props, client, exp, informationServer); + MetadataTracker metadataTracker = new MetadataTracker(props, client, exp, informationServer); this.trackerScheduler.schedule(metadataTracker, CORE_NAME, props); verify(spiedQuartzScheduler).scheduleJob(any(JobDetail.class), any(Trigger.class)); checkCronExpression(exp); diff --git a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java index 5d7247d38..233905369 100644 --- a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java +++ b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java @@ -346,10 +346,12 @@ public class SOLRAPIClient } } - public Transactions getTransactions(Long fromCommitTime, Long minTxnId, Long toCommitTime, Long maxTxnId, int maxResults, ShardState shardState) throws AuthenticationException, IOException, JSONException, EncoderException + public Transactions getTransactions(Long fromCommitTime, Long minTxnId, Long toCommitTime, + Long maxTxnId, int maxResults, ShardState shardState) + throws AuthenticationException, IOException, JSONException, EncoderException { URLCodec encoder = new URLCodec(); - + StringBuilder url = new StringBuilder(GET_TRANSACTIONS_URL); StringBuilder args = new StringBuilder(); if (fromCommitTime != null) @@ -379,7 +381,7 @@ public class SOLRAPIClient args.append(encoder.encode("baseUrl")).append("=").append(encoder.encode(shardState.getShardInstance().getBaseUrl())); args.append("&").append(encoder.encode("hostName")).append("=").append(encoder.encode(shardState.getShardInstance().getHostName())); args.append("&").append(encoder.encode("template")).append("=").append(encoder.encode(shardState.getShardInstance().getShard().getFloc().getTemplate())); - + for(String key : shardState.getShardInstance().getShard().getFloc().getPropertyBag().keySet()) { String value = shardState.getShardInstance().getShard().getFloc().getPropertyBag().get(key); @@ -388,7 +390,7 @@ public class SOLRAPIClient args.append("&").append(encoder.encode("floc.property."+key)).append("=").append(encoder.encode(value)); } } - + for(String key : shardState.getPropertyBag().keySet()) { String value = shardState.getPropertyBag().get(key); @@ -397,7 +399,7 @@ public class SOLRAPIClient args.append("&").append(encoder.encode("state.property."+key)).append("=").append(encoder.encode(value)); } } - + args.append("&").append(encoder.encode("instance")).append("=").append(encoder.encode("" + shardState.getShardInstance().getShard().getInstance())); args.append("&").append(encoder.encode("numberOfShards")).append("=").append(encoder.encode("" + shardState.getShardInstance().getShard().getFloc().getNumberOfShards())); args.append("&").append(encoder.encode("port")).append("=").append(encoder.encode("" + shardState.getShardInstance().getPort())); @@ -413,13 +415,13 @@ public class SOLRAPIClient args.append("&").append(encoder.encode("isMaster")).append("=").append(encoder.encode("" + shardState.isMaster())); args.append("&").append(encoder.encode("hasContent")).append("=").append(encoder.encode("" + shardState.getShardInstance().getShard().getFloc().hasContent())); args.append("&").append(encoder.encode("shardMethod")).append("=").append(encoder.encode(shardState.getShardInstance().getShard().getFloc().getShardMethod().toString())); - + args.append("&").append(encoder.encode("lastUpdated")).append("=").append(encoder.encode("" + shardState.getLastUpdated())); args.append("&").append(encoder.encode("lastIndexedChangeSetCommitTime")).append("=").append(encoder.encode("" + shardState.getLastIndexedChangeSetCommitTime())); args.append("&").append(encoder.encode("lastIndexedChangeSetId")).append("=").append(encoder.encode("" + shardState.getLastIndexedChangeSetId())); args.append("&").append(encoder.encode("lastIndexedTxCommitTime")).append("=").append(encoder.encode("" + shardState.getLastIndexedTxCommitTime())); args.append("&").append(encoder.encode("lastIndexedTxId")).append("=").append(encoder.encode("" + shardState.getLastIndexedTxId())); - + } url.append(args);