RM-7051 updating patch code

This commit is contained in:
Ross Gale
2019-11-18 23:28:08 +00:00
parent 490a212e6a
commit 898a95cd85
5 changed files with 87 additions and 19 deletions

View File

@@ -700,6 +700,11 @@
<title>Saved search</title> <title>Saved search</title>
</aspect> </aspect>
<aspect name="rma:dispositionProcessed">
<title>disposition processed</title>
</aspect>
<aspect name="rma:vitalRecordDefinition"> <aspect name="rma:vitalRecordDefinition">
<title>Vital Record Definition</title> <title>Vital Record Definition</title>
<properties> <properties>

View File

@@ -26,6 +26,8 @@
<property name="nodeService" ref="nodeService" /> <property name="nodeService" ref="nodeService" />
<property name="recordsManagementQueryDAO" ref="recordsManagementQueryDAO" /> <property name="recordsManagementQueryDAO" ref="recordsManagementQueryDAO" />
<property name="behaviourFilter" ref="policyBehaviourFilter" /> <property name="behaviourFilter" ref="policyBehaviourFilter" />
<property name="qnameDAO" ref="qnameDAO" />
<property name="nodeDAO" ref="nodeDAO" />
</bean> </bean>
</beans> </beans>

View File

@@ -15,6 +15,14 @@
<parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/> <parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/>
</parameterMap> </parameterMap>
<parameterMap id="parameter_folderPatchPagingExtended" type="map">
<parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="processed" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="start" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="end" jdbcType="BIGINT" javaType="java.lang.Long"/>
</parameterMap>
<parameterMap id="parameter_folderPatchCount" type="map"> <parameterMap id="parameter_folderPatchCount" type="map">
<parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/> <parameter property="dispositionQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
<parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/> <parameter property="folderQnameId" jdbcType="BIGINT" javaType="java.lang.Long"/>
@@ -44,21 +52,40 @@
<select id="select_RecordFoldersWithSchedules" <select id="select_RecordFoldersWithSchedules"
parameterMap="parameter_folderPatchPaging" parameterMap="parameter_folderPatchPaging"
resultMap="result_NodeRefEntity"> resultMap="result_NodeRefEntity">
select * from ( select alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
select ROW_NUMBER() over (order by alfn.uuid) as rnum, alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
from alf_node alfn, from alf_node alfn,
alf_store alfs alf_store alfs
where alfn.id in ( where alfn.id in (
select node_id select node_id
from alf_node_properties from alf_node_properties
where qname_id = ? where qname_id = ?
and boolean_value = true ) and boolean_value = true
)
and type_qname_id = ? and type_qname_id = ?
and alfn.store_id = alfs.id and alfn.store_id = alfs.id
order by alfn.uuid and alfn.id between ? and ?
) as foo where foo.rnum BETWEEN ? and ?
</select> </select>
<select id="select_RecordFoldersWithSchedulesExtended"
parameterMap="parameter_folderPatchPagingExtended"
resultMap="result_NodeRefEntity">
select alfn.id , alfs.protocol, alfs.identifier, alfn.uuid
from alf_node alfn,
alf_store alfs
where alfn.id in (
select node_id
from alf_node_properties
where qname_id = ?
and boolean_value = true
and node_id not in (
select node_id
from alf_node_aspects
where qname_id = ? ))
and type_qname_id = ?
and alfn.store_id = alfs.id
and alfn.id between ? and ?
</select>
<select id="select_RecordFoldersWithSchedulesCount" <select id="select_RecordFoldersWithSchedulesCount"
parameterMap="parameter_folderPatchCount" parameterMap="parameter_folderPatchCount"
resultType="java.lang.Integer"> resultType="java.lang.Integer">

View File

@@ -281,4 +281,5 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
QName PROP_COUNT = QName.createQName(RM_URI, "count"); QName PROP_COUNT = QName.createQName(RM_URI, "count");
QName ASPECT_SAVED_SEARCH = QName.createQName(RM_URI, "savedSearch"); QName ASPECT_SAVED_SEARCH = QName.createQName(RM_URI, "savedSearch");
QName ASPECT_DISPOSITION_PROCESSED = QName.createQName(RM_URI, "dispositionProcessed");
} }

View File

@@ -27,11 +27,13 @@
package org.alfresco.module.org_alfresco_module_rm.patch.v24; package org.alfresco.module.org_alfresco_module_rm.patch.v24;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE; import java.io.Serializable;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_FROZEN; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
@@ -40,13 +42,18 @@ import org.alfresco.module.org_alfresco_module_rm.hold.HoldService;
import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch; import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch;
import org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAO; import org.alfresco.module.org_alfresco_module_rm.query.RecordsManagementQueryDAO;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.repo.domain.qname.QNameDAO;
import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.*;
/** /**
* RM v2.4 patch that ensures that file plan root containers do not inherited rules, because this is no longer enforced * RM v2.4 patch that ensures that file plan root containers do not inherited rules, because this is no longer enforced
* in the service code anymore. * in the service code anymore.
@@ -60,7 +67,7 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
{ {
private static final Log logger = LogFactory.getLog(RMv24DispositionInheritancePatch.class); private static final Log logger = LogFactory.getLog(RMv24DispositionInheritancePatch.class);
private static final long BATCH_SIZE = 5L; private static final long BATCH_SIZE = 1000L;
private DispositionService dispositionService; private DispositionService dispositionService;
@@ -72,6 +79,10 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
private BehaviourFilter behaviourFilter; private BehaviourFilter behaviourFilter;
protected QNameDAO qnameDAO;
private NodeDAO nodeDAO;
public void setDispositionService(DispositionService dispositionService) public void setDispositionService(DispositionService dispositionService)
{ {
this.dispositionService = dispositionService; this.dispositionService = dispositionService;
@@ -97,6 +108,16 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
this.behaviourFilter = behaviourFilter; this.behaviourFilter = behaviourFilter;
} }
public void setQnameDAO(QNameDAO qnameDAO)
{
this.qnameDAO = qnameDAO;
}
public void setNodeDAO(NodeDAO nodeDAO)
{
this.nodeDAO = nodeDAO;
}
/** /**
* @see AbstractModulePatch#applyInternal() * @see AbstractModulePatch#applyInternal()
* <p> * <p>
@@ -105,10 +126,21 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
@Override @Override
public void applyInternal() public void applyInternal()
{ {
int totalFolders = recordsManagementQueryDAO.getRecordFoldersWithSchedulesCount(); Long maxNodeId = nodeDAO.getMaxNodeId();
logger.info("Folders to update: "+ totalFolders);
for (Long i = 0L; i < totalFolders; i += BATCH_SIZE) //int totalFolders = recordsManagementQueryDAO.getRecordFoldersWithSchedulesCount();
int batchCount = 0;
//logger.info("Folders to update: "+ totalFolders);
transactionService.getRetryingTransactionHelper()
.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<String>()
{
public String execute() throws Throwable
{
qnameDAO.getOrCreateQName(ASPECT_DISPOSITION_PROCESSED);
return null;
}
}, false, true);
for (Long i = 0L; i < maxNodeId; i += BATCH_SIZE)
{ {
final Long finali = i; final Long finali = i;
int updatedRecords = transactionService.getRetryingTransactionHelper() int updatedRecords = transactionService.getRetryingTransactionHelper()
@@ -120,6 +152,7 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
List<NodeRef> folders = recordsManagementQueryDAO.getRecordFoldersWithSchedules(finali, finali + BATCH_SIZE); List<NodeRef> folders = recordsManagementQueryDAO.getRecordFoldersWithSchedules(finali, finali + BATCH_SIZE);
for (NodeRef folder : folders) for (NodeRef folder : folders)
{ {
behaviourFilter.disableBehaviour(folder);
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
{ {
logger.info("Checking folder: " + folder); logger.info("Checking folder: " + folder);
@@ -127,7 +160,6 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
DispositionSchedule schedule = dispositionService.getDispositionSchedule(folder); DispositionSchedule schedule = dispositionService.getDispositionSchedule(folder);
if (schedule.isRecordLevelDisposition()) if (schedule.isRecordLevelDisposition())
{ {
behaviourFilter.disableBehaviour(folder);
List<NodeRef> records = recordService.getRecords(folder); List<NodeRef> records = recordService.getRecords(folder);
for (NodeRef record : records) for (NodeRef record : records)
{ {
@@ -143,15 +175,16 @@ public class RMv24DispositionInheritancePatch extends AbstractModulePatch
behaviourFilter.enableBehaviour(record); behaviourFilter.enableBehaviour(record);
} }
} }
behaviourFilter.enableBehaviour(folder);
} }
nodeService.addAspect(folder, ASPECT_DISPOSITION_PROCESSED, null);
behaviourFilter.enableBehaviour(folder);
} }
return recordCount; return recordCount;
} }
}, false, true); }, false, true);
batchCount ++;
logger.info("Records updated: "+ updatedRecords); logger.info("Records updated: "+ updatedRecords);
logger.info("Updating folders: "+ finali + " to: " +(finali + BATCH_SIZE) + " of "+totalFolders); logger.info("Completed batch "+ batchCount+" of "+ (Math.ceil(maxNodeId/BATCH_SIZE)+1));
} }
} }
} }