فهرست منبع

FixCrmProcesInitIdx add lock for execution - throw exception if already executed

Piotr Labudda 10 سال پیش
والد
کامیت
06ab401951
2فایلهای تغییر یافته به همراه13 افزوده شده و 5 حذف شده
  1. 10 2
      SE/se-lib/Route/FixCrmProcesInitIdx.php
  2. 3 3
      SE/se-lib/Route/FixZasobPath.php

+ 10 - 2
SE/se-lib/Route/FixCrmProcesInitIdx.php

@@ -359,14 +359,21 @@ SQL;
 			) ENGINE=MyISAM DEFAULT CHARSET=latin2;
 SQL;
 		$sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
+		// throws errors:
+		//  #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
 		$sqlList['CreateProcedure'] = <<<SQL
 CREATE PROCEDURE `update_proces_init_idx_rec`()
 BEGIN
 	SET @enabled = FALSE;
+	SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
 	SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
 	SET @conf_last_exec_end_key   = 'tbl_indexer_CRM_PROCES_last_exec_end';
 	-- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
-		replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_start_key, NOW());
+	IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
+		UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
+	ELSE BEGIN
+
+		replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
 
 -- select 'truncate->delete...';
 		truncate table `CRM_PROCES_idx`;
@@ -478,8 +485,9 @@ BEGIN
 					)
 			where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN');
 
-		replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_end_key, NOW());
+		replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
 
+	END ; END IF ;
 END ;
 
 SQL;

+ 3 - 3
SE/se-lib/Route/FixZasobPath.php

@@ -234,9 +234,9 @@ jQuery(document).ready(function () {
 		";
 		$sqlList['RemoveTrigger_BeforeUpdateZasob'] = "DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_UPDATE`";
 		// throws errors:
-		//  #1146 - Table '{DATABASE_NAME}.ERROR: Loop detected ID=PARENT_ID' doesn't exist
-		//  #1146 - Table '{DATABASE_NAME}.ERROR: Parent item not exists' doesn't exist
-		//  #1146 - Table '{DATABASE_NAME}.ERROR: Loop detected in path' doesn't exist
+		//  #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixZasobPath:ERROR: Loop detected ID=PARENT_ID' doesn't exist
+		//  #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixZasobPath:ERROR: Parent item not exists' doesn't exist
+		//  #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixZasobPath:ERROR: Loop detected in path' doesn't exist
 		$sqlList['CreateTrigger_BeforeUpdateZasob'] = "
 			CREATE TRIGGER `_CRM_LISTA_ZASOBOW_tree_UPDATE` BEFORE UPDATE ON `CRM_LISTA_ZASOBOW`
 				FOR EACH ROW BEGIN