mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Feature/search 1654 (#463)
* added abstract getShardByTransaction method to ShardRegistry class. * [ SEARCH-1654 ] Change on ShardRegistry interface * [ SEARCH-1654 ] Javadoc + use interfaces on ShardRegistry interface * Added explicitShardId field to node * [SEARCH-1654] added coreName to nodeParameters * [SEARCH-1654] set explicitShardId in returned node * [SEARCH-1654] check if commitTimeMs is null * [SEARCH-1654] Included tnxCommitTimeMs in node result * [SEARCH-1654] getShardInstanceByTransactionTimestamp return optional value * [SEARCH-1654] bug fix in get explicit shard id * [SEARCH-1654] fix incorrect query in ibatis. * [SEARCH-1654] set explicitShardId as Integer
This commit is contained in:
@@ -40,40 +40,42 @@ public interface Node extends NodeIdAndAclId
|
||||
/**
|
||||
* Helper method to get a key that includes the node and its current version number
|
||||
*/
|
||||
public NodeVersionKey getNodeVersionKey();
|
||||
NodeVersionKey getNodeVersionKey();
|
||||
|
||||
/**
|
||||
* Helper method to force the instance to be read-only
|
||||
*/
|
||||
public void lock();
|
||||
void lock();
|
||||
|
||||
public abstract NodeRef getNodeRef();
|
||||
NodeRef getNodeRef();
|
||||
|
||||
public NodeRef.Status getNodeStatus(QNameDAO qnameDAO);
|
||||
NodeRef.Status getNodeStatus(QNameDAO qnameDAO);
|
||||
|
||||
public abstract Pair<Long, NodeRef> getNodePair();
|
||||
Pair<Long, NodeRef> getNodePair();
|
||||
|
||||
/**
|
||||
* Checks the {@link #getTypeQNameId() type} of the node to determine if the node is deleted
|
||||
* @param qnameDAO DAO to work out type IDs
|
||||
* @return <tt>true</tt> if the node is {@link ContentModel#TYPE_DELETED}
|
||||
*/
|
||||
public abstract boolean getDeleted(QNameDAO qnameDAO);
|
||||
boolean getDeleted(QNameDAO qnameDAO);
|
||||
|
||||
public abstract Long getVersion();
|
||||
Long getVersion();
|
||||
|
||||
public abstract StoreEntity getStore();
|
||||
StoreEntity getStore();
|
||||
|
||||
public abstract String getUuid();
|
||||
String getUuid();
|
||||
|
||||
public abstract Long getTypeQNameId();
|
||||
Long getTypeQNameId();
|
||||
|
||||
public abstract Long getLocaleId();
|
||||
Long getLocaleId();
|
||||
|
||||
public abstract TransactionEntity getTransaction();
|
||||
TransactionEntity getTransaction();
|
||||
|
||||
public abstract AuditablePropertiesEntity getAuditableProperties();
|
||||
AuditablePropertiesEntity getAuditableProperties();
|
||||
|
||||
public abstract String getShardKey();
|
||||
String getShardKey();
|
||||
|
||||
Integer getExplicitShardId();
|
||||
|
||||
}
|
@@ -56,6 +56,7 @@ public class NodeEntity implements Node, PermissionCheckValue, Serializable, Clo
|
||||
private TransactionEntity transaction;
|
||||
private AuditablePropertiesEntity auditableProperties;
|
||||
private String shardKey;
|
||||
private Integer explicitShardId;
|
||||
|
||||
/**
|
||||
* Required default constructor
|
||||
@@ -342,10 +343,22 @@ public class NodeEntity implements Node, PermissionCheckValue, Serializable, Clo
|
||||
return this.shardKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getExplicitShardId()
|
||||
{
|
||||
return this.explicitShardId;
|
||||
}
|
||||
|
||||
public synchronized void setShardKey(String shardKey)
|
||||
{
|
||||
this.shardKey = shardKey;
|
||||
}
|
||||
|
||||
public synchronized void setExplicitShardId(Integer explicitShardId)
|
||||
{
|
||||
this.explicitShardId = explicitShardId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@@ -25,28 +25,44 @@
|
||||
*/
|
||||
package org.alfresco.repo.index.shard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalInt;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.service.cmr.search.SearchParameters;
|
||||
import org.alfresco.util.Pair;
|
||||
|
||||
/**
|
||||
* @author Andy
|
||||
* A registry which collects all the active shard subscriptions.
|
||||
*
|
||||
* @author Andy
|
||||
* @author agazzarini
|
||||
* @author eporciani
|
||||
*/
|
||||
public interface ShardRegistry
|
||||
{
|
||||
public void registerShardState(ShardState shardState);
|
||||
/**
|
||||
* Registers (or updates the existing subscription) of a shard.
|
||||
*
|
||||
* @param shardState the shard state, which contains the information about the shard that wants to subscribe/register.
|
||||
*/
|
||||
void registerShardState(ShardState shardState);
|
||||
|
||||
public List<ShardInstance> getIndexSlice(SearchParameters searchParameters);
|
||||
List<ShardInstance> getIndexSlice(SearchParameters searchParameters);
|
||||
|
||||
public void purge();
|
||||
void purge();
|
||||
|
||||
public HashMap<Floc, HashMap<Shard, HashSet<ShardState>>> getFlocs();
|
||||
Map<Floc, Map<Shard, Set<ShardState>>> getFlocs();
|
||||
|
||||
public void purgeAgedOutShards();
|
||||
void purgeAgedOutShards();
|
||||
|
||||
/**
|
||||
* Returns the shard instance (i.e. shard number) which owns (or should own) the transaction associated with the given timestamp.
|
||||
*
|
||||
* @param coreId an identifier (e.g. core name, base url) of the core / collection whose requested shard belongs to.
|
||||
* @param txnTimestamp the transaction timestamp used as search criteria.
|
||||
* @return the shard instance (i.e. shard number) which owns (or should own) the transaction associated with the given timestamp.
|
||||
*/
|
||||
OptionalInt getShardInstanceByTransactionTimestamp(String coreId, long txnTimestamp);
|
||||
}
|
||||
|
@@ -57,6 +57,7 @@ public class NodeParameters
|
||||
private Set<QName> excludeAspects;
|
||||
|
||||
private String shardProperty;
|
||||
private String coreName;
|
||||
|
||||
public int getMaxResults()
|
||||
{
|
||||
@@ -192,4 +193,14 @@ public class NodeParameters
|
||||
{
|
||||
this.shardProperty = shardProperty;
|
||||
}
|
||||
|
||||
public String getCoreName() {
|
||||
return this.coreName;
|
||||
}
|
||||
|
||||
public void setCoreName(String coreName){
|
||||
this.coreName = coreName;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.OptionalInt;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.zip.CRC32;
|
||||
@@ -46,6 +47,7 @@ import org.alfresco.repo.dictionary.DictionaryDAO;
|
||||
import org.alfresco.repo.domain.node.Node;
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.node.NodeDAO.ChildAssocRefQueryCallback;
|
||||
import org.alfresco.repo.domain.node.NodeEntity;
|
||||
import org.alfresco.repo.domain.permissions.AclDAO;
|
||||
import org.alfresco.repo.domain.qname.QNameDAO;
|
||||
import org.alfresco.repo.domain.solr.SOLRDAO;
|
||||
@@ -375,6 +377,15 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent
|
||||
|
||||
for (Node node : nodes)
|
||||
{
|
||||
if (shardRegistry != null){
|
||||
shardRegistry.getShardInstanceByTransactionTimestamp(
|
||||
nodeParameters.getCoreName(),
|
||||
node.getTransaction().getCommitTimeMs()).ifPresent(
|
||||
shardId -> ((NodeEntity) node).setExplicitShardId(shardId));
|
||||
|
||||
}
|
||||
|
||||
|
||||
callback.handleNode(node);
|
||||
}
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@
|
||||
<result property="id" column="id" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||
<result property="typeQNameId" column="type_qname_id" jdbcType="BIGINT" javaType="java.lang.Long" />
|
||||
<result property="transaction.id" column="txn_id" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||
<result property="transaction.commitTimeMs" column="txn_commit_time_ms" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||
<result property="aclId" column="acl_id" jdbcType="BIGINT" javaType="java.lang.Long"/>
|
||||
<result property="store.protocol" column="protocol" jdbcType="VARCHAR" javaType="java.lang.String"/>
|
||||
<result property="store.identifier" column="identifier" jdbcType="VARCHAR" javaType="java.lang.String"/>
|
||||
@@ -117,6 +118,7 @@
|
||||
COALESCE(np.long_value, node.id) as id,
|
||||
node.type_qname_id as type_qname_id,
|
||||
node.transaction_id as txn_id,
|
||||
txn.commit_time_ms as txn_commit_time_ms,
|
||||
node.uuid as uuid,
|
||||
node.acl_id as acl_id,
|
||||
store.protocol as protocol,
|
||||
|
@@ -139,4 +139,10 @@ class TestNode implements Node
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getExplicitShardId()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user