From ff3d6862ba91efbc670c73bbac86ce943f8abfa3 Mon Sep 17 00:00:00 2001 From: Jamal Kaabi-Mofrad Date: Wed, 4 Jun 2014 14:39:31 +0000 Subject: [PATCH] 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 --- .../patch-common-SqlMap.xml | 36 +++++++++++++------ .../alfresco/patch/patch-services-context.xml | 4 +-- config/alfresco/repository.properties | 8 +++-- config/alfresco/scheduled-jobs-context.xml | 12 +++---- .../repo/admin/patch/AsynchronousPatch.java | 4 +-- .../patch/impl/SurfConfigFolderPatch.java | 6 ++-- .../domain/patch/ibatis/PatchDAOImpl.java | 23 +++++++++++- .../service/cmr/model/FileFolderUtil.java | 3 +- 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml index e70400b881..e1cc113d62 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml @@ -134,7 +134,12 @@ - + + + + + + @@ -567,7 +572,7 @@ company_home/sites/surf-config/pages/user company_home/sites/surf-config/pages/user{userId} --> - = #{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} ]]> diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index 1dff82f08e..2fc5a16645 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -3747,7 +3747,7 @@ - + patch.surfConfigFolder patch.surfConfigFolderPatch.description @@ -3764,7 +3764,7 @@ - + ${system.patch.surfConfigFolder.deferred} diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index 382e8d32a5..f86f1fa4dc 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -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 \ No newline at end of file +# Default value. i.e. never run. It can be triggered using JMX +system.patch.surfConfigFolder.cronExpression=* * * * * ? 2099 \ No newline at end of file diff --git a/config/alfresco/scheduled-jobs-context.xml b/config/alfresco/scheduled-jobs-context.xml index 6022ad94db..ab580f86e7 100644 --- a/config/alfresco/scheduled-jobs-context.xml +++ b/config/alfresco/scheduled-jobs-context.xml @@ -355,18 +355,18 @@ - + + + ${system.patch.surfConfigFolder.cronExpression} + - ${system.patchSurfConfigFolderTrigger.startDelayMinutes} + ${system.cronJob.startDelayMinutes} - - 0 - - + diff --git a/source/java/org/alfresco/repo/admin/patch/AsynchronousPatch.java b/source/java/org/alfresco/repo/admin/patch/AsynchronousPatch.java index 1bc1c2c1f2..eafecdf240 100644 --- a/source/java/org/alfresco/repo/admin/patch/AsynchronousPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/AsynchronousPatch.java @@ -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()) { diff --git a/source/java/org/alfresco/repo/admin/patch/impl/SurfConfigFolderPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/SurfConfigFolderPatch.java index eea668fc3f..fd70a17e9c 100644 --- a/source/java/org/alfresco/repo/admin/patch/impl/SurfConfigFolderPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/impl/SurfConfigFolderPatch.java @@ -395,8 +395,7 @@ public class SurfConfigFolderPatch extends AsynchronousPatch int minResults = SITE_BATCH_MAX_QUERY_RANGE / 2; while (currentId <= maxId && siteNodeIDs.size() < minResults) { - List nodeIds = patchDAO.getNodesByTypeQNameId(siteTypeQNameId, currentId, currentId - + SITE_BATCH_MAX_QUERY_RANGE); + List 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 nodeIds = patchDAO.getChildrenOfTheSharedSurfConfigFolder(currentId, currentId - + SHARED_SURF_CONFIG_BATCH_MAX_QUERY_RANGE); + List 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; diff --git a/source/java/org/alfresco/repo/domain/patch/ibatis/PatchDAOImpl.java b/source/java/org/alfresco/repo/domain/patch/ibatis/PatchDAOImpl.java index bee4ef09ff..2ce940a55d 100644 --- a/source/java/org/alfresco/repo/domain/patch/ibatis/PatchDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/patch/ibatis/PatchDAOImpl.java @@ -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 getChildrenOfTheSharedSurfConfigFolder(Long minNodeId, Long maxNodeId) { - Map params = new HashMap(2); + Pair containsAssocQNamePair = qnameDAO.getQName(ContentModel.ASSOC_CONTAINS); + if (containsAssocQNamePair == null) + { + return Collections.emptyList(); + } + + Map params = new HashMap(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); diff --git a/source/java/org/alfresco/service/cmr/model/FileFolderUtil.java b/source/java/org/alfresco/service/cmr/model/FileFolderUtil.java index 7b8249e4cc..33c34f0335 100644 --- a/source/java/org/alfresco/service/cmr/model/FileFolderUtil.java +++ b/source/java/org/alfresco/service/cmr/model/FileFolderUtil.java @@ -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;