From b39f84518c43c72ec87acffe393fabe5ffd03ea8 Mon Sep 17 00:00:00 2001 From: Gethin James Date: Tue, 13 Sep 2016 17:34:54 +0200 Subject: [PATCH] SEARCH-169: Adding in missing component. --- .../solr/component/ConsistencyComponent.java | 105 ++++++++++++++++++ .../templates/rerank/conf/solrconfig.xml | 7 +- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/ConsistencyComponent.java diff --git a/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/ConsistencyComponent.java b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/ConsistencyComponent.java new file mode 100644 index 000000000..106a9b77d --- /dev/null +++ b/search-services/alfresco-solr/src/main/java/org/alfresco/solr/component/ConsistencyComponent.java @@ -0,0 +1,105 @@ +/* + * #%L + * Alfresco Solr + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * 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 . + * #L% + */ +package org.alfresco.solr.component; + +import org.alfresco.solr.AlfrescoCoreAdminHandler; +import org.alfresco.solr.InformationServer; +import org.alfresco.solr.TrackerState; +import org.alfresco.solr.tracker.MetadataTracker; +import org.apache.solr.common.params.ShardParams; +import org.apache.solr.handler.component.ResponseBuilder; +import org.apache.solr.handler.component.SearchComponent; +import org.apache.solr.request.SolrQueryRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.lang.invoke.MethodHandles; +import java.util.Date; + +/** + * Adds consitency information to the search results + */ +public class ConsistencyComponent extends SearchComponent +{ + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + @Override + public void prepare(ResponseBuilder rb) throws IOException + { + // No preparation required. + } + + @Override + public void finishStage(ResponseBuilder rb) + { + super.finishStage(rb); + if (rb.stage != ResponseBuilder.STAGE_GET_FIELDS) + return; + try { + process(rb); + } catch (IOException e) { + LOG.error(e.getMessage()); + } + } + + @Override + public void process(ResponseBuilder rb) throws IOException + { + SolrQueryRequest req = rb.req; + AlfrescoCoreAdminHandler adminHandler = (AlfrescoCoreAdminHandler) + req.getCore(). + getCoreDescriptor(). + getCoreContainer(). + getMultiCoreHandler(); + + boolean isShard = rb.req.getParams().getBool(ShardParams.IS_SHARD, false); + MetadataTracker metaTrkr = adminHandler.getTrackerRegistry().getTrackerForCore(req.getCore().getName(), MetadataTracker.class); + if(metaTrkr != null && !isShard) + { + TrackerState metadataTrkrState = metaTrkr.getTrackerState(); + + long lastIndexedTx = metadataTrkrState.getLastIndexedTxId(); + long lastIndexTxCommitTime = metadataTrkrState.getLastIndexedTxCommitTime(); + long lastTxIdOnServer = metadataTrkrState.getLastTxIdOnServer(); + long transactionsToDo = lastTxIdOnServer - lastIndexedTx; + if (transactionsToDo < 0) + { + transactionsToDo = 0; + } + rb.rsp.add("lastIndexedTx", lastIndexedTx); + rb.rsp.add("lastIndexedTxTime", lastIndexTxCommitTime); + rb.rsp.add("txRemaining", transactionsToDo); + } + } + + @Override + public String getDescription() + { + return "Adds consitency information to the search results."; + } + +} diff --git a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml index 7e2e0e868..2c3f364b7 100644 --- a/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml +++ b/search-services/alfresco-solr/src/main/resources/solr/instance/templates/rerank/conf/solrconfig.xml @@ -835,6 +835,7 @@ setLocale rewriteFacetParameters + consistencyComponent query facet mlt @@ -864,6 +865,7 @@ setLocale rewriteFacetParameters + consistencyComponent query facet mlt @@ -1795,6 +1797,7 @@ setLocale rewriteFacetParameters + consistencyComponent query facet mlt @@ -1837,6 +1840,7 @@ setLocale rewriteFacetParameters + consistencyComponent query facet mlt @@ -1861,6 +1865,7 @@ setLocale rewriteFacetParameters + consistencyComponent query facet mlt @@ -1900,6 +1905,6 @@ - + \ No newline at end of file