BUG 9796 Slow Query deleting a task ( error collected by New Relic ) SOLVED
- The query used to check if a task can be deleted was very slow - Change the businnes logic to check if a task can be deleted
This commit is contained in:
@@ -1540,6 +1540,7 @@ var processmap=function(){
|
||||
var r = new leimnud.module.rpc.xmlhttp({
|
||||
url: this.options.dataServer,
|
||||
args: "action=taskCases&data=" + {
|
||||
pro_uid: this.options.uid,
|
||||
task_uid: data.uid
|
||||
}.toJSONString()
|
||||
});
|
||||
|
||||
@@ -66,7 +66,7 @@ try {
|
||||
$c->addSelectColumn(AppDelegationPeer::TAS_UID);
|
||||
$c->add(AppDelegationPeer::APP_UID, $_SESSION['APPLICATION']);
|
||||
$c->add(AppDelegationPeer::DEL_INDEX, $_SESSION['INDEX']);
|
||||
$oDataset = AppDelegationPeer::doSelectRs($c);
|
||||
$oDataset = AppDelegationPeer::doSelectRS($c);
|
||||
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
$aData = $oDataset->getRow();
|
||||
@@ -518,41 +518,46 @@ try {
|
||||
break;
|
||||
|
||||
case "taskCases":
|
||||
require_once ("classes/model/Application.php");
|
||||
require_once ("classes/model/AppDelegation.php");
|
||||
require_once ("classes/model/AppDelay.php");
|
||||
|
||||
$criteria = new Criteria("workflow");
|
||||
$criteria->addSelectColumn("COUNT(DISTINCT APPLICATION.APP_UID)");
|
||||
|
||||
$criteria->addJoin(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::LEFT_JOIN);
|
||||
$criteria->addJoin(ApplicationPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::LEFT_JOIN);
|
||||
|
||||
require_once 'classes/model/AppDelegation.php';
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(AppDelegationPeer::APP_UID);
|
||||
$criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
|
||||
$criteria->addSelectColumn(AppDelegationPeer::TAS_UID);
|
||||
$criteria->add(AppDelegationPeer::TAS_UID, $oData->task_uid);
|
||||
|
||||
$criteria->add(
|
||||
$criteria->getNewCriterion(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL)->addOr(
|
||||
$criteria->getNewCriterion(AppDelayPeer::APP_DELAY_UID, null, Criteria::ISNOTNULL)->addAnd(
|
||||
$criteria->getNewCriterion(AppDelayPeer::APP_TYPE, array("REASSIGN", "ADHOC", "CANCEL"), Criteria::NOT_IN))->addAnd(
|
||||
$criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)->addOr(
|
||||
$criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0))
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$rs = ApplicationPeer::doSelectRS($criteria);
|
||||
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
|
||||
$response->casesNumRec = intval($row[0]);
|
||||
|
||||
$criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN');
|
||||
$casesNumRec = AppDelegationPeer::doCount($criteria);
|
||||
if ($casesNumRec == 0) {
|
||||
require_once 'classes/model/AppDelay.php';
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(AppDelayPeer::APP_UID);
|
||||
$criteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX);
|
||||
$criteria->add(AppDelayPeer::PRO_UID, $oData->pro_uid);
|
||||
$criteria->add(AppDelayPeer::APP_TYPE, 'PAUSE');
|
||||
$criteria->add(AppDelayPeer::APP_DISABLE_ACTION_DATE, null, Criteria::ISNULL);
|
||||
$dataset = AppDelayPeer::doSelectRS($criteria);
|
||||
if ($dataset->getRecordCount() > 0) {
|
||||
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$dataset->next();
|
||||
while ($row = $dataset->getRow()) {
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(AppDelegationPeer::TAS_UID);
|
||||
$criteria->add(AppDelegationPeer::APP_UID, $row['APP_UID']);
|
||||
$criteria->add(AppDelegationPeer::DEL_INDEX, $row['APP_DEL_INDEX']);
|
||||
$criteria->add(AppDelegationPeer::TAS_UID, $oData->task_uid);
|
||||
$casesNumRec += AppDelegationPeer::doCount($criteria);
|
||||
$dataset->next();
|
||||
}
|
||||
}
|
||||
}
|
||||
$response = new stdclass();
|
||||
$response->casesNumRec = $casesNumRec;
|
||||
$json = new Services_JSON();
|
||||
$sOutput = $json->encode($response);
|
||||
break;
|
||||
}
|
||||
if( isset($sOutput) )
|
||||
if (isset($sOutput)) {
|
||||
die($sOutput);
|
||||
}
|
||||
}
|
||||
catch (Exception $oException) {
|
||||
die($oException->getMessage() . "\n" . $oException->getTraceAsString());
|
||||
|
||||
Reference in New Issue
Block a user