ACE-1918: Surf-config patch improvements. Made:

- surfConfigFolder patch to use Cron trigger
          - surf-config SQL query more efficient
	  - changes to comments and formatting


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@73049 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jamal Kaabi-Mofrad
2014-06-04 14:39:31 +00:00
parent 75411310cd
commit ff3d6862ba
8 changed files with 65 additions and 31 deletions

View File

@@ -134,7 +134,12 @@
<parameter property="maxNodeId" jdbcType="BIGINT" javaType="java.lang.Long"/>
</parameterMap>
<parameterMap id="parameter_minMaxNodeId" type="map">
<parameterMap id="parameter_qnameCrcAndMinMaxNodeId" type="map">
<parameter property="qnameCrcSites" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="qnameCrcSurfConfig" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="qnameCrcPages" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="qnameCrcUser" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="qnameTypeIdContains" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="minNodeId" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="maxNodeId" jdbcType="BIGINT" javaType="java.lang.Long"/>
</parameterMap>
@@ -567,7 +572,7 @@
company_home/sites/surf-config/pages/user
company_home/sites/surf-config/pages/user{userId}
-->
<select id="select_ChildrenOfTheSharedSurfConfigFolder" parameterMap="parameter_minMaxNodeId" resultMap="result_nodeNameUuidMap" >
<select id="select_ChildrenOfTheSharedSurfConfigFolder" parameterMap="parameter_qnameCrcAndMinMaxNodeId" resultMap="result_nodeNameUuidMap" >
<![CDATA[
select lev3.child_node_name as name, lev3.child_node_id as node_id, targetn.uuid, targets.protocol, targets.identifier
from
@@ -577,8 +582,10 @@
join alf_node targetn on (targetn.id = lev3.child_node_id)
join alf_store targets on (targets.id = targetn.store_id)
where
lev1.qname_localname = 'sites'
and lev2.qname_localname = 'surf-config'
lev1.qname_crc = #{qnameCrcSites}
and lev1.type_qname_id = #{qnameTypeIdContains}
and lev2.qname_crc = #{qnameCrcSurfConfig}
and lev2.type_qname_id = #{qnameTypeIdContains}
and lev3.child_node_id >= #{minNodeId}
and lev3.child_node_id < #{maxNodeId}
UNION
@@ -591,9 +598,12 @@
join alf_node targetn on (targetn.id = lev4.child_node_id)
join alf_store targets on (targets.id = targetn.store_id)
where
lev1.qname_localname = 'sites'
and lev2.qname_localname = 'surf-config'
and lev3.qname_localname = 'pages'
lev1.qname_crc = #{qnameCrcSites}
and lev1.type_qname_id = #{qnameTypeIdContains}
and lev2.qname_crc = #{qnameCrcSurfConfig}
and lev2.type_qname_id = #{qnameTypeIdContains}
and lev3.qname_crc = #{qnameCrcPages}
and lev3.type_qname_id = #{qnameTypeIdContains}
and lev4.child_node_id >= #{minNodeId}
and lev4.child_node_id < #{maxNodeId}
UNION
@@ -607,10 +617,14 @@
join alf_node targetn on (targetn.id = lev5.child_node_id)
join alf_store targets on (targets.id = targetn.store_id)
where
lev1.qname_localname = 'sites'
and lev2.qname_localname = 'surf-config'
and lev3.qname_localname = 'pages'
and lev4.qname_localname = 'user'
lev1.qname_crc = #{qnameCrcSites}
and lev1.type_qname_id = #{qnameTypeIdContains}
and lev2.qname_crc = #{qnameCrcSurfConfig}
and lev2.type_qname_id = #{qnameTypeIdContains}
and lev3.qname_crc = #{qnameCrcPages}
and lev3.type_qname_id = #{qnameTypeIdContains}
and lev4.qname_crc = #{qnameCrcUser}
and lev4.type_qname_id = #{qnameTypeIdContains}
and lev5.child_node_id >= #{minNodeId}
and lev5.child_node_id < #{maxNodeId}
]]>

View File

@@ -3747,7 +3747,7 @@
</property>
</bean>
<!-- Fix data related to cm:copiedfrom aspect -->
<!-- Add cm:indexControl aspect to surf-config folders and their children -->
<bean id="patch.surfConfigFolder" class="org.alfresco.repo.admin.patch.impl.SurfConfigFolderPatch" parent="basePatch" >
<property name="id"><value>patch.surfConfigFolder</value></property>
<property name="description"><value>patch.surfConfigFolderPatch.description</value></property>
@@ -3764,7 +3764,7 @@
<property name="behaviourFilter" ref="policyBehaviourFilter" />
<property name="ruleService" ref="ruleService" />
<property name="jobLockService" ref="jobLockService" />
<!-- Do we deferr running the shared folder patch? -->
<!-- Do we deferr running the surf-config folder patch? -->
<property name="deferred"><value>${system.patch.surfConfigFolder.deferred}</value></property>
</bean>
</beans>

View File

@@ -1101,9 +1101,11 @@ system.lockTryTimeout.DictionaryDAOImpl=2000
system.lockTryTimeout.MessageServiceImpl=${system.lockTryTimeout}
system.lockTryTimeout.PolicyComponentImpl=${system.lockTryTimeout}
# SurfConfigFolder Patch
#
# Do we defer running the shared folder patch?
# Do we deferr running the surf-config folder patch?
#
system.patch.surfConfigFolder.deferred=true
system.patchSurfConfigFolderTrigger.startDelayMinutes=2
# Default value. i.e. never run. It can be triggered using JMX
system.patch.surfConfigFolder.cronExpression=* * * * * ? 2099

View File

@@ -355,18 +355,18 @@
</map>
</property>
</bean>
<bean id="patchSurfConfigFolderTrigger" class="org.alfresco.util.TriggerBean">
<bean id="patchSurfConfigFolderTrigger" class="org.alfresco.util.CronTriggerBean">
<property name="jobDetail">
<ref bean="patchSurfConfigFolderJobDetail" />
</property>
<property name="scheduler">
<ref bean="schedulerFactory" />
</property>
<property name="cronExpression">
<value>${system.patch.surfConfigFolder.cronExpression}</value>
</property>
<property name="startDelayMinutes">
<value>${system.patchSurfConfigFolderTrigger.startDelayMinutes}</value>
<value>${system.cronJob.startDelayMinutes}</value>
</property>
<property name="repeatCount">
<value>0</value>
</property>
</bean>
</bean>
</beans>

View File

@@ -127,8 +127,8 @@ public abstract class AsynchronousPatch extends AbstractPatch
if (!appliedPatch.getWasExecuted())
{
// the patch was not executed
logger.debug(I18NUtil.getMessage(MSG_NOT_EXECUTED, appliedPatch.getId(), appliedPatch.getReport()));
// the patch was not executed. E.g. not relevant to the current schema
logger.info(I18NUtil.getMessage(MSG_NOT_EXECUTED, appliedPatch.getId(), appliedPatch.getReport()));
}
else if (appliedPatch.getSucceeded())
{

View File

@@ -395,8 +395,7 @@ public class SurfConfigFolderPatch extends AsynchronousPatch
int minResults = SITE_BATCH_MAX_QUERY_RANGE / 2;
while (currentId <= maxId && siteNodeIDs.size() < minResults)
{
List<Long> nodeIds = patchDAO.getNodesByTypeQNameId(siteTypeQNameId, currentId, currentId
+ SITE_BATCH_MAX_QUERY_RANGE);
List<Long> nodeIds = patchDAO.getNodesByTypeQNameId(siteTypeQNameId, currentId, currentId + SITE_BATCH_MAX_QUERY_RANGE);
siteNodeIDs.addAll(nodeIds);
// Increment the minimum ID
currentId += SITE_BATCH_MAX_QUERY_RANGE;
@@ -446,8 +445,7 @@ public class SurfConfigFolderPatch extends AsynchronousPatch
while (currentId <= maxId && folderNodes.size() < minResults)
{
List<NodeRef> nodeIds = patchDAO.getChildrenOfTheSharedSurfConfigFolder(currentId, currentId
+ SHARED_SURF_CONFIG_BATCH_MAX_QUERY_RANGE);
List<NodeRef> nodeIds = patchDAO.getChildrenOfTheSharedSurfConfigFolder(currentId, currentId + SHARED_SURF_CONFIG_BATCH_MAX_QUERY_RANGE);
folderNodes.addAll(nodeIds);
// Increment the minimum ID
currentId += SHARED_SURF_CONFIG_BATCH_MAX_QUERY_RANGE;

View File

@@ -30,10 +30,13 @@ import org.alfresco.model.ContentModel;
import org.alfresco.repo.domain.CrcHelper;
import org.alfresco.repo.domain.avm.AVMNodeEntity;
import org.alfresco.repo.domain.locale.LocaleDAO;
import org.alfresco.repo.domain.node.ChildAssocEntity;
import org.alfresco.repo.domain.patch.AbstractPatchDAOImpl;
import org.alfresco.repo.domain.qname.QNameDAO;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.Pair;
import org.alfresco.util.ParameterCheck;
@@ -733,7 +736,25 @@ public class PatchDAOImpl extends AbstractPatchDAOImpl
@Override
public List<NodeRef> getChildrenOfTheSharedSurfConfigFolder(Long minNodeId, Long maxNodeId)
{
Map<String, Object> params = new HashMap<String, Object>(2);
Pair<Long, QName> containsAssocQNamePair = qnameDAO.getQName(ContentModel.ASSOC_CONTAINS);
if (containsAssocQNamePair == null)
{
return Collections.emptyList();
}
Map<String, Object> params = new HashMap<String, Object>(7);
// Get qname CRC
Long qnameCrcSites = ChildAssocEntity.getQNameCrc(QName.createQName(SiteModel.SITE_MODEL_URL, "sites"));
Long qnameCrcSurfConfig = ChildAssocEntity.getQNameCrc(QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "surf-config"));
Long qnameCrcPages = ChildAssocEntity.getQNameCrc(QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "pages"));
Long qnameCrcUser = ChildAssocEntity.getQNameCrc(QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "user"));
params.put("qnameCrcSites", qnameCrcSites);
params.put("qnameCrcSurfConfig", qnameCrcSurfConfig);
params.put("qnameCrcPages", qnameCrcPages);
params.put("qnameCrcUser", qnameCrcUser);
params.put("qnameTypeIdContains", containsAssocQNamePair.getFirst());
params.put("minNodeId", minNodeId);
params.put("maxNodeId", maxNodeId);

View File

@@ -86,8 +86,7 @@ public class FileFolderUtil
list.add(new PathElementDetails(pathElement, null));
}
FileInfo fileInfo = makeFolders(service, null, parentNodeRef, list, folderTypeQName, behaviourFilter,
parentBehavioursToDisable);
FileInfo fileInfo = makeFolders(service, null, parentNodeRef, list, folderTypeQName, behaviourFilter, parentBehavioursToDisable);
// Should we check the type?
return fileInfo;