From a564d2af987400cff2bee9879d4ed525500d1e3c Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 9 Aug 2019 12:44:28 +0100 Subject: [PATCH 1/2] SEARCH-1799 Check for shard property again if not found at start up. --- .../solr/tracker/MetadataTracker.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) 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 794cdf7aa..059dfc2de 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 @@ -78,6 +78,9 @@ public class MetadataTracker extends AbstractTracker implements Tracker private ConcurrentLinkedQueue nodesToPurge = new ConcurrentLinkedQueue(); private ConcurrentLinkedQueue queriesToReindex = new ConcurrentLinkedQueue(); private DocRouter docRouter; + /** The string representation of the shard key. */ + private String shardKey; + /** The property to use for determining the shard. */ private QName shardProperty; public MetadataTracker(Properties p, SOLRAPIClient client, String coreName, @@ -86,15 +89,24 @@ public class MetadataTracker extends AbstractTracker implements Tracker super(p, client, coreName, informationServer, Tracker.Type.MetaData); transactionDocsBatchSize = Integer.parseInt(p.getProperty("alfresco.transactionDocsBatchSize", "100")); shardMethod = p.getProperty("shard.method", SHARD_METHOD_DBID); - String shardKey = p.getProperty(DocRouterFactory.SHARD_KEY_KEY); - if(shardKey != null) { - shardProperty = getShardProperty(shardKey); - } + shardKey = p.getProperty(DocRouterFactory.SHARD_KEY_KEY); + updateShardProperty(); docRouter = DocRouterFactory.getRouter(p, ShardMethodEnum.getShardMethod(shardMethod)); nodeBatchSize = Integer.parseInt(p.getProperty("alfresco.nodeBatchSize", "10")); threadHandler = new ThreadHandler(p, coreName, "MetadataTracker"); } - + + /** + * Set the shard property using the shard key. + */ + private void updateShardProperty() + { + if(shardKey != null) + { + shardProperty = getShardProperty(shardKey); + } + } + MetadataTracker() { super(Tracker.Type.MetaData); @@ -224,6 +236,7 @@ public class MetadataTracker extends AbstractTracker implements Tracker HashMap propertyBag = new HashMap<>(); propertyBag.put("coreName", coreName); HashMap extendedPropertyBag = new HashMap<>(propertyBag); + updateShardProperty(); extendedPropertyBag.putAll(docRouter.getProperties(shardProperty)); return ShardStateBuilder.shardState() @@ -365,6 +378,7 @@ public class MetadataTracker extends AbstractTracker implements Tracker gnp.setTransactionIds(txs); gnp.setStoreProtocol(storeRef.getProtocol()); gnp.setStoreIdentifier(storeRef.getIdentifier()); + updateShardProperty(); gnp.setShardProperty(shardProperty); gnp.setCoreName(coreName); @@ -885,6 +899,7 @@ public class MetadataTracker extends AbstractTracker implements Tracker gnp.setTransactionIds(txIds); gnp.setStoreProtocol(storeRef.getProtocol()); gnp.setStoreIdentifier(storeRef.getIdentifier()); + updateShardProperty(); gnp.setShardProperty(shardProperty); gnp.setCoreName(coreName); List nodes = client.getNodes(gnp, Integer.MAX_VALUE); @@ -1185,7 +1200,8 @@ public class MetadataTracker extends AbstractTracker implements Tracker this.queriesToReindex.offer(query); } - public static QName getShardProperty(String field) { + public static QName getShardProperty(String field) + { AlfrescoSolrDataModel dataModel = AlfrescoSolrDataModel.getInstance(); NamespaceDAO namespaceDAO = dataModel.getNamespaceDAO(); DictionaryService dictionaryService = dataModel.getDictionaryService(CMISStrictDictionaryService.DEFAULT); @@ -1194,6 +1210,11 @@ public class MetadataTracker extends AbstractTracker implements Tracker dictionaryService, field); + if (propertyDef == null) + { + log.error("Sharding property not found: {}", field); + return null; + } return propertyDef.getName(); } } From b3a7096a5cbdc9f4a8672f791c09c5fcc5a8740f Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 9 Aug 2019 13:59:36 +0100 Subject: [PATCH 2/2] SEARCH-1799 Only look up shard property if not already found. --- .../main/java/org/alfresco/solr/tracker/MetadataTracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 059dfc2de..7b5c08f2a 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 @@ -101,7 +101,7 @@ public class MetadataTracker extends AbstractTracker implements Tracker */ private void updateShardProperty() { - if(shardKey != null) + if(shardProperty == null && shardKey != null) { shardProperty = getShardProperty(shardKey); }