mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.2 to HEAD
16708: Fix for ETHREEOH-2247: "patch.authorityDefaultZonesPatch" patch is quite slow on DB with many users/groups - it does not output any progress indicator during the time that the server is apparently frozen during startup 16712: Fix for ETHREEOH-2291: Atomic index property in contentModel.xml 16799: Fix for ETHREEOH-2843: lucene.indexer.minMergeDocs , lucene.indexer.mergeFactor and lucene.indexer.maxMergeDocs are never read / used git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17011 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -585,29 +585,12 @@
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- Indexer and searchers for lucene -->
|
||||
<bean id="admLuceneIndexerAndSearcherFactory"
|
||||
class="org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerAndSearcherFactory">
|
||||
<property name="nodeService">
|
||||
<ref bean="mlAwareNodeService" />
|
||||
</property>
|
||||
<property name="tenantService">
|
||||
<ref bean="tenantService"/>
|
||||
</property>
|
||||
<property name="dictionaryService">
|
||||
<ref bean="dictionaryService" />
|
||||
</property>
|
||||
<property name="nameSpaceService">
|
||||
<ref bean="namespaceService" />
|
||||
</property>
|
||||
<bean id="abstractLuceneIndexerAndSearcherFactory" abstract="true">
|
||||
<property name="indexRootLocation">
|
||||
<value>${dir.indexes}</value>
|
||||
</property>
|
||||
<property name="contentService">
|
||||
<ref bean="contentService" />
|
||||
</property>
|
||||
<property name="queryRegister">
|
||||
<ref bean="queryRegisterComponent" />
|
||||
<property name="lockDirectory">
|
||||
<value>${dir.indexes.lock}</value>
|
||||
</property>
|
||||
<property name="maxAtomicTransformationTime">
|
||||
<value>${lucene.maxAtomicTransformationTime}</value> <!-- milliseconds allowed for inline text transformation -->
|
||||
@@ -618,8 +601,76 @@
|
||||
<property name="indexerBatchSize">
|
||||
<value>${lucene.indexer.batchSize}</value>
|
||||
</property>
|
||||
<property name="lockDirectory">
|
||||
<value>${dir.indexes.lock}</value>
|
||||
<!-- cache -->
|
||||
<property name="cacheEnabled">
|
||||
<value>${lucene.indexer.cacheEnabled}</value>
|
||||
</property>
|
||||
<property name="maxDocIdCacheSize">
|
||||
<value>${lucene.indexer.maxDocIdCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxDocumentCacheSize">
|
||||
<value>${lucene.indexer.maxDocumentCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxIsCategoryCacheSize">
|
||||
<value>${lucene.indexer.maxIsCategoryCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxLinkAspectCacheSize">
|
||||
<value>${lucene.indexer.maxLinkAspectCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxParentCacheSize">
|
||||
<value>${lucene.indexer.maxParentCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxPathCacheSize">
|
||||
<value>${lucene.indexer.maxPathCacheSize}</value>
|
||||
</property>
|
||||
<property name="maxTypeCacheSize">
|
||||
<value>${lucene.indexer.maxTypeCacheSize}</value>
|
||||
</property>
|
||||
<!-- merge indexers -->
|
||||
<property name="mergerMaxMergeDocs">
|
||||
<value>${lucene.indexer.mergerMaxMergeDocs}</value>
|
||||
</property>
|
||||
<property name="mergerMergeFactor">
|
||||
<value>${lucene.indexer.mergerMergeFactor}</value>
|
||||
</property>
|
||||
<property name="mergerMinMergeDocs">
|
||||
<value>${lucene.indexer.mergerMinMergeDocs}</value>
|
||||
</property>
|
||||
<!-- delta indexers -->
|
||||
<property name="writerMaxMergeDocs">
|
||||
<value>${lucene.indexer.writerMaxMergeDocs}</value>
|
||||
</property>
|
||||
<property name="writerMergeFactor">
|
||||
<value>${lucene.indexer.writerMergeFactor}</value>
|
||||
</property>
|
||||
<property name="writerMinMergeDocs">
|
||||
<value>${lucene.indexer.writerMinMergeDocs}</value>
|
||||
</property>
|
||||
<!-- target -->
|
||||
<property name="mergerTargetIndexCount">
|
||||
<value>${lucene.indexer.mergerTargetIndexCount}</value>
|
||||
</property>
|
||||
<property name="mergerTargetOverlayCount">
|
||||
<value>${lucene.indexer.mergerTargetOverlayCount}</value>
|
||||
</property>
|
||||
<property name="maxDocsForInMemoryMerge">
|
||||
<value>${lucene.indexer.maxDocsForInMemoryMerge}</value>
|
||||
</property>
|
||||
<!-- other -->
|
||||
<property name="termIndexInterval">
|
||||
<value>${lucene.indexer.termIndexInterval}</value>
|
||||
</property>
|
||||
<property name="useNioMemoryMapping">
|
||||
<value>${lucene.indexer.useNioMemoryMapping}</value>
|
||||
</property>
|
||||
<property name="postSortDateTime">
|
||||
<value>${lucene.indexer.postSortDateTime}</value>
|
||||
</property>
|
||||
<property name="defaultMLIndexAnalysisMode">
|
||||
<value>${lucene.indexer.defaultMLIndexAnalysisMode}</value>
|
||||
</property>
|
||||
<property name="defaultMLSearchAnalysisMode">
|
||||
<value>${lucene.indexer.defaultMLSearchAnalysisMode}</value>
|
||||
</property>
|
||||
<property name="indexerMaxFieldLength">
|
||||
<value>${lucene.indexer.maxFieldLength}</value>
|
||||
@@ -633,11 +684,29 @@
|
||||
<property name="lockPollInterval">
|
||||
<value>${lucene.lock.poll.interval}</value>
|
||||
</property>
|
||||
<property name="defaultMLIndexAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
</bean>
|
||||
|
||||
<!-- Indexer and searchers for lucene -->
|
||||
<bean id="admLuceneIndexerAndSearcherFactory"
|
||||
parent="abstractLuceneIndexerAndSearcherFactory"
|
||||
class="org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerAndSearcherFactory">
|
||||
<property name="nodeService">
|
||||
<ref bean="mlAwareNodeService" />
|
||||
</property>
|
||||
<property name="defaultMLSearchAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
<property name="tenantService">
|
||||
<ref bean="tenantService"/>
|
||||
</property>
|
||||
<property name="dictionaryService">
|
||||
<ref bean="dictionaryService" />
|
||||
</property>
|
||||
<property name="nameSpaceService">
|
||||
<ref bean="namespaceService" />
|
||||
</property>
|
||||
<property name="contentService">
|
||||
<ref bean="contentService" />
|
||||
</property>
|
||||
<property name="queryRegister">
|
||||
<ref bean="queryRegisterComponent" />
|
||||
</property>
|
||||
<property name="threadPoolExecutor">
|
||||
<ref bean="indexThreadPoolExecutor"></ref>
|
||||
@@ -645,10 +714,6 @@
|
||||
<property name="bulkLoader">
|
||||
<ref bean="hibernateL1CacheBulkLoader"></ref>
|
||||
</property>
|
||||
<!-- over-ride to false for pre 3.0 behaviour -->
|
||||
<property name="postSortDateTime">
|
||||
<value>true</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="adm.luceneQueryEngineImpl" class="org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryEngine" >
|
||||
@@ -671,6 +736,7 @@
|
||||
|
||||
<!-- Indexer and searchers for lucene -->
|
||||
<bean id="admLuceneUnIndexedIndexerAndSearcherFactory"
|
||||
parent="abstractLuceneIndexerAndSearcherFactory"
|
||||
class="org.alfresco.repo.search.impl.lucene.ADMLuceneUnIndexedIndexAndSearcherFactory">
|
||||
<property name="nodeService">
|
||||
<ref bean="mlAwareNodeService" />
|
||||
@@ -684,45 +750,12 @@
|
||||
<property name="nameSpaceService">
|
||||
<ref bean="namespaceService" />
|
||||
</property>
|
||||
<property name="indexRootLocation">
|
||||
<value>${dir.indexes}</value>
|
||||
</property>
|
||||
<property name="contentService">
|
||||
<ref bean="contentService" />
|
||||
</property>
|
||||
<property name="queryRegister">
|
||||
<ref bean="queryRegisterComponent" />
|
||||
</property>
|
||||
<property name="maxAtomicTransformationTime">
|
||||
<value>${lucene.maxAtomicTransformationTime}</value> <!-- milliseconds allowed for inline text transformation -->
|
||||
</property>
|
||||
<property name="queryMaxClauses">
|
||||
<value>${lucene.query.maxClauses}</value>
|
||||
</property>
|
||||
<property name="indexerBatchSize">
|
||||
<value>${lucene.indexer.batchSize}</value>
|
||||
</property>
|
||||
<property name="lockDirectory">
|
||||
<value>${dir.indexes.lock}</value>
|
||||
</property>
|
||||
<property name="indexerMaxFieldLength">
|
||||
<value>${lucene.indexer.maxFieldLength}</value>
|
||||
</property>
|
||||
<property name="writeLockTimeout">
|
||||
<value>${lucene.write.lock.timeout}</value>
|
||||
</property>
|
||||
<property name="commitLockTimeout">
|
||||
<value>${lucene.commit.lock.timeout}</value>
|
||||
</property>
|
||||
<property name="lockPollInterval">
|
||||
<value>${lucene.lock.poll.interval}</value>
|
||||
</property>
|
||||
<property name="defaultMLIndexAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
</property>
|
||||
<property name="defaultMLSearchAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
</property>
|
||||
<property name="threadPoolExecutor">
|
||||
<ref bean="indexThreadPoolExecutor"></ref>
|
||||
</property>
|
||||
@@ -730,6 +763,7 @@
|
||||
|
||||
<!-- Indexer and searchers for lucene -->
|
||||
<bean id="avmLuceneIndexerAndSearcherFactory"
|
||||
parent="abstractLuceneIndexerAndSearcherFactory"
|
||||
class="org.alfresco.repo.search.impl.lucene.AVMLuceneIndexerAndSearcherFactory">
|
||||
<property name="nodeService">
|
||||
<ref bean="mlAwareNodeService" />
|
||||
@@ -743,9 +777,6 @@
|
||||
<property name="nameSpaceService">
|
||||
<ref bean="namespaceService" />
|
||||
</property>
|
||||
<property name="indexRootLocation">
|
||||
<value>${dir.indexes}</value>
|
||||
</property>
|
||||
<property name="contentService">
|
||||
<ref bean="contentService" />
|
||||
</property>
|
||||
@@ -761,43 +792,9 @@
|
||||
<property name="queryRegister">
|
||||
<ref bean="queryRegisterComponent" />
|
||||
</property>
|
||||
<property name="maxAtomicTransformationTime">
|
||||
<value>${lucene.maxAtomicTransformationTime}</value> <!-- milliseconds allowed for inline text transformation -->
|
||||
</property>
|
||||
<property name="queryMaxClauses">
|
||||
<value>${lucene.query.maxClauses}</value>
|
||||
</property>
|
||||
<property name="indexerBatchSize">
|
||||
<value>${lucene.indexer.batchSize}</value>
|
||||
</property>
|
||||
<property name="lockDirectory">
|
||||
<value>${dir.indexes.lock}</value>
|
||||
</property>
|
||||
<property name="indexerMaxFieldLength">
|
||||
<value>${lucene.indexer.maxFieldLength}</value>
|
||||
</property>
|
||||
<property name="writeLockTimeout">
|
||||
<value>${lucene.write.lock.timeout}</value>
|
||||
</property>
|
||||
<property name="commitLockTimeout">
|
||||
<value>${lucene.commit.lock.timeout}</value>
|
||||
</property>
|
||||
<property name="lockPollInterval">
|
||||
<value>${lucene.lock.poll.interval}</value>
|
||||
</property>
|
||||
<property name="defaultMLIndexAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
</property>
|
||||
<property name="defaultMLSearchAnalysisMode">
|
||||
<value>EXACT_LANGUAGE_AND_ALL</value>
|
||||
</property>
|
||||
<property name="threadPoolExecutor">
|
||||
<ref bean="indexThreadPoolExecutor"></ref>
|
||||
</property>
|
||||
<!-- over-ride to false for pre 3.0 behaviour -->
|
||||
<property name="postSortDateTime">
|
||||
<value>true</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="avm.luceneQueryEngineImpl" class="org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryEngine" >
|
||||
|
@@ -275,6 +275,8 @@ patch.authorityMigration.result=Migrated {0} groups and {1} group associations t
|
||||
|
||||
patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else.
|
||||
patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones.
|
||||
patch.authorityDefaultZonesPatch.users= Adding users to zones ...
|
||||
patch.authorityDefaultZonesPatch.groups= Adding groups to zones ...
|
||||
|
||||
patch.fixNameCrcValues.description=Fixes name CRC32 values to match UTF-8 encoding.
|
||||
patch.fixNameCrcValues.result=Fixed {0} name CRC32 values for UTF-8 encoding. See file {1} for details.
|
||||
|
@@ -80,7 +80,9 @@
|
||||
<property name="cm:content">
|
||||
<type>d:content</type>
|
||||
<mandatory>false</mandatory>
|
||||
<!--- Index content in the background -->
|
||||
<!-- Although content is marked as indexed atomically it may end up asynchronous -->
|
||||
<!-- if the content conversion will take too long. Content that does not require conversion -->
|
||||
<!-- to UTF8 test/plain will always be indexed atomically -->
|
||||
<index enabled="true">
|
||||
<atomic>true</atomic>
|
||||
<stored>false</stored>
|
||||
|
@@ -157,22 +157,52 @@ lucene.query.maxClauses=10000
|
||||
#
|
||||
lucene.indexer.batchSize=1000000
|
||||
#
|
||||
# Lucene index min merge docs - the in memory size of the index
|
||||
# Index cache sizes
|
||||
#
|
||||
lucene.indexer.minMergeDocs=1000
|
||||
lucene.indexer.cacheEnabled=true
|
||||
lucene.indexer.maxDocIdCacheSize=10000
|
||||
lucene.indexer.maxDocumentCacheSize=100
|
||||
lucene.indexer.maxIsCategoryCacheSize=-1
|
||||
lucene.indexer.maxLinkAspectCacheSize=10000
|
||||
lucene.indexer.maxParentCacheSize=10000
|
||||
lucene.indexer.maxPathCacheSize=10000
|
||||
lucene.indexer.maxTypeCacheSize=10000
|
||||
#
|
||||
# When lucene index files are merged together - it will try to keep this number of segments/files in
|
||||
# Properties for merge (not this does not affect the final index segment which will be optimised)
|
||||
# Max merge docs only applies to the merge process not the resulting index which will be optimised.
|
||||
#
|
||||
lucene.indexer.mergeFactor=10
|
||||
lucene.indexer.mergerMaxMergeDocs=1000000
|
||||
lucene.indexer.mergerMergeFactor=5
|
||||
lucene.indexer.mergerMinMergeDocs=1000
|
||||
#
|
||||
# Roughly the maximum number of nodes indexed in one file/segment
|
||||
# Properties for delta indexes (not this does not affect the final index segment which will be optimised)
|
||||
# Max merge docs only applies to the index building process not the resulting index which will be optimised.
|
||||
#
|
||||
lucene.indexer.maxMergeDocs=100000
|
||||
lucene.indexer.writerMaxMergeDocs=1000000
|
||||
lucene.indexer.writerMergeFactor=5
|
||||
lucene.indexer.writerMinMergeDocs=1000
|
||||
#
|
||||
# Target number of indexes and deltas in the overall index and what index size to merge in memory
|
||||
#
|
||||
lucene.indexer.mergerTargetIndexCount=5
|
||||
lucene.indexer.mergerTargetOverlayCount=5
|
||||
lucene.indexer.maxDocsForInMemoryMerge=10000
|
||||
#
|
||||
# Other lucene properties
|
||||
#
|
||||
lucene.indexer.termIndexInterval=128
|
||||
lucene.indexer.useNioMemoryMapping=true
|
||||
# over-ride to false for pre 3.0 behaviour
|
||||
lucene.indexer.postSortDateTime=true
|
||||
lucene.indexer.defaultMLIndexAnalysisMode=EXACT_LANGUAGE_AND_ALL
|
||||
lucene.indexer.defaultMLSearchAnalysisMode=EXACT_LANGUAGE_AND_ALL
|
||||
#
|
||||
# The number of terms from a document that will be indexed
|
||||
#
|
||||
lucene.indexer.maxFieldLength=10000
|
||||
|
||||
#
|
||||
# Index locks (mostly deprecated and will be tidied up with the next lucene upgrade)
|
||||
#
|
||||
lucene.write.lock.timeout=10000
|
||||
lucene.commit.lock.timeout=100000
|
||||
lucene.lock.poll.interval=100
|
||||
|
@@ -29,7 +29,9 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.i18n.I18NUtil;
|
||||
import org.alfresco.repo.admin.patch.AbstractPatch;
|
||||
import org.alfresco.repo.admin.patch.PatchExecuter;
|
||||
import org.alfresco.repo.domain.hibernate.HibernateSessionHelper;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.avm.AVMStoreDescriptor;
|
||||
@@ -37,6 +39,8 @@ import org.alfresco.service.cmr.security.AuthorityService;
|
||||
import org.alfresco.service.cmr.security.AuthorityType;
|
||||
import org.alfresco.service.cmr.site.SiteInfo;
|
||||
import org.alfresco.service.cmr.site.SiteService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Patch to assign users and groups to default zones
|
||||
@@ -47,6 +51,9 @@ public class AuthorityDefaultZonesPatch extends AbstractPatch
|
||||
{
|
||||
/** Success message. */
|
||||
private static final String MSG_SUCCESS = "patch.authorityDefaultZonesPatch.result";
|
||||
private static final String MSG_UPDATE_USERS = "patch.authorityDefaultZonesPatch.users";
|
||||
private static final String MSG_UPDATE_GROUPS = "patch.authorityDefaultZonesPatch.groups";
|
||||
private static Log progress_logger = LogFactory.getLog(PatchExecuter.class);
|
||||
|
||||
/** The authority service. */
|
||||
private AuthorityService authorityService;
|
||||
@@ -97,14 +104,21 @@ public class AuthorityDefaultZonesPatch extends AbstractPatch
|
||||
@Override
|
||||
protected String applyInternal() throws Exception
|
||||
{
|
||||
setZonesForPeople();
|
||||
setZonesForGroups();
|
||||
int count = 0;
|
||||
int total = authorityService.getAllAuthorities(AuthorityType.USER).size() + authorityService.getAllAuthorities(AuthorityType.GROUP).size();
|
||||
reportProgress(total, count);
|
||||
String msg = I18NUtil.getMessage(MSG_UPDATE_USERS);
|
||||
progress_logger.info(msg);
|
||||
count = setZonesForPeople(total, count);
|
||||
msg = I18NUtil.getMessage(MSG_UPDATE_GROUPS);
|
||||
progress_logger.info(msg);
|
||||
setZonesForGroups(total, count);
|
||||
|
||||
return MSG_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
private void setZonesForPeople()
|
||||
private int setZonesForPeople(int total, int start)
|
||||
{
|
||||
Set<String> defaultZones = new HashSet<String>(2, 1.0f);
|
||||
defaultZones.add(AuthorityService.ZONE_APP_DEFAULT);
|
||||
@@ -113,11 +127,11 @@ public class AuthorityDefaultZonesPatch extends AbstractPatch
|
||||
List<Action> personActions = new ArrayList<Action>(1);
|
||||
personActions.add(new Action(null, defaultZones, ActionType.SET));
|
||||
|
||||
setZones(AuthorityType.USER, personActions);
|
||||
return setZones(AuthorityType.USER, personActions, total, start);
|
||||
|
||||
}
|
||||
|
||||
private void setZonesForGroups()
|
||||
private int setZonesForGroups(int total, int start)
|
||||
{
|
||||
Set<String> defaultZones = new HashSet<String>(2, 1.0f);
|
||||
defaultZones.add(AuthorityService.ZONE_APP_DEFAULT);
|
||||
@@ -152,13 +166,13 @@ public class AuthorityDefaultZonesPatch extends AbstractPatch
|
||||
}
|
||||
groupActions.add(new Action(null, defaultZones, ActionType.SET));
|
||||
|
||||
setZones(AuthorityType.GROUP, groupActions);
|
||||
return setZones(AuthorityType.GROUP, groupActions, total, start);
|
||||
|
||||
}
|
||||
|
||||
private void setZones(AuthorityType authorityType, List<Action> actions)
|
||||
private int setZones(AuthorityType authorityType, List<Action> actions, int total, int start)
|
||||
{
|
||||
|
||||
int count = start;
|
||||
hibernateSessionHelper.mark();
|
||||
Set<String> authorities = authorityService.getAllAuthorities(authorityType);
|
||||
hibernateSessionHelper.reset();
|
||||
@@ -181,7 +195,10 @@ public class AuthorityDefaultZonesPatch extends AbstractPatch
|
||||
}
|
||||
}
|
||||
hibernateSessionHelper.reset();
|
||||
count++;
|
||||
reportProgress(total, count);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user