Skip to content

Commit 460ce65

Browse files
tobihillefballiano
andauthored
Added cron to remove old index events for manual indexers (OpenMage#2474)
Co-authored-by: Fabrizio Balliano <[email protected]>
1 parent d42170e commit 460ce65

File tree

3 files changed

+77
-2
lines changed

3 files changed

+77
-2
lines changed

app/code/core/Mage/Index/Model/Indexer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,10 @@ public function logEvent(Varien_Object $entity, $entityType, $eventType, $doSave
282282
* @param Varien_Object $entity
283283
* @param string $entityType
284284
* @param string $eventType
285-
* @throws Exception
286285
* @return Mage_Index_Model_Indexer
286+
* @throws Exception|Throwable
287287
*/
288-
public function processEntityAction(Varien_Object $entity, $entityType, $eventType)
288+
public function processEntityAction(Varien_Object $entity, $entityType, $eventType): Mage_Index_Model_Indexer
289289
{
290290
$event = $this->logEvent($entity, $entityType, $eventType, false);
291291
/**

app/code/core/Mage/Index/Model/Observer.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
*/
2020
class Mage_Index_Model_Observer
2121
{
22+
public const OLD_INDEX_EVENT_THRESHOLD_SECONDS = 24 * 60 * 60;
23+
public const OLD_INDEX_EVENT_DELETE_COUNT = 1000;
24+
2225
/**
2326
* Indexer model
2427
*
@@ -35,6 +38,7 @@ public function __construct()
3538
* Store after commit observer. Process store related indexes
3639
*
3740
* @param Varien_Event_Observer $observer
41+
* @throws Throwable
3842
*/
3943
public function processStoreSave(Varien_Event_Observer $observer)
4044
{
@@ -50,6 +54,7 @@ public function processStoreSave(Varien_Event_Observer $observer)
5054
* Store group after commit observer. Process store group related indexes
5155
*
5256
* @param Varien_Event_Observer $observer
57+
* @throws Throwable
5358
*/
5459
public function processStoreGroupSave(Varien_Event_Observer $observer)
5560
{
@@ -65,6 +70,7 @@ public function processStoreGroupSave(Varien_Event_Observer $observer)
6570
* Website save after commit observer. Process website related indexes
6671
*
6772
* @param Varien_Event_Observer $observer
73+
* @throws Throwable
6874
*/
6975
public function processWebsiteSave(Varien_Event_Observer $observer)
7076
{
@@ -80,6 +86,7 @@ public function processWebsiteSave(Varien_Event_Observer $observer)
8086
* Store after commit observer. Process store related indexes
8187
*
8288
* @param Varien_Event_Observer $observer
89+
* @throws Throwable
8390
*/
8491
public function processStoreDelete(Varien_Event_Observer $observer)
8592
{
@@ -95,6 +102,7 @@ public function processStoreDelete(Varien_Event_Observer $observer)
95102
* Store group after commit observer. Process store group related indexes
96103
*
97104
* @param Varien_Event_Observer $observer
105+
* @throws Throwable
98106
*/
99107
public function processStoreGroupDelete(Varien_Event_Observer $observer)
100108
{
@@ -110,6 +118,7 @@ public function processStoreGroupDelete(Varien_Event_Observer $observer)
110118
* Website save after commit observer. Process website related indexes
111119
*
112120
* @param Varien_Event_Observer $observer
121+
* @throws Throwable
113122
*/
114123
public function processWebsiteDelete(Varien_Event_Observer $observer)
115124
{
@@ -125,6 +134,7 @@ public function processWebsiteDelete(Varien_Event_Observer $observer)
125134
* Config data after commit observer.
126135
*
127136
* @param Varien_Event_Observer $observer
137+
* @throws Throwable
128138
*/
129139
public function processConfigDataSave(Varien_Event_Observer $observer)
130140
{
@@ -135,4 +145,57 @@ public function processConfigDataSave(Varien_Event_Observer $observer)
135145
Mage_Index_Model_Event::TYPE_SAVE
136146
);
137147
}
148+
149+
/**
150+
* Clean old index events for indexers in manual mode
151+
*
152+
* @return void
153+
* @throws Exception
154+
*/
155+
public function cleanOutdatedEvents()
156+
{
157+
$manualIndexProcessCollection = Mage::getSingleton('index/indexer')
158+
->getProcessesCollection()
159+
->addFieldToFilter('mode', Mage_Index_Model_Process::MODE_MANUAL);
160+
161+
$now = new DateTime();
162+
/** @noinspection PhpUnhandledExceptionInspection */
163+
$dateInterval = new DateInterval('PT' . self::OLD_INDEX_EVENT_THRESHOLD_SECONDS . 'S');
164+
$oldEventsThreshold = $now
165+
->sub($dateInterval)
166+
->format(Varien_Db_Adapter_Pdo_Mysql::TIMESTAMP_FORMAT);
167+
168+
$coreResource = Mage::getSingleton('core/resource');
169+
$writeConnection = $coreResource->getConnection('core_write');
170+
$indexEventTableName = $coreResource->getTableName('index/event');
171+
172+
/** @var Mage_Index_Model_Process $process */
173+
foreach ($manualIndexProcessCollection as $process) {
174+
$unprocessedEventsCollection = $process
175+
->getUnprocessedEventsCollection()
176+
->addFieldToFilter('created_at', ['lt' => $oldEventsThreshold])
177+
->load();
178+
179+
$i = 0;
180+
$eventList = [];
181+
/** @var Mage_Index_Model_Event $unprocessedEvent */
182+
foreach ($unprocessedEventsCollection as $unprocessedEvent) {
183+
$i++;
184+
$eventList[] = $unprocessedEvent->getId();
185+
if ($i === self::OLD_INDEX_EVENT_DELETE_COUNT) {
186+
break;
187+
}
188+
}
189+
190+
if (!empty($eventList)) {
191+
$where = new Zend_Db_Expr(
192+
sprintf(
193+
'event_id in (%s)',
194+
implode(',', $eventList)
195+
)
196+
);
197+
$writeConnection->delete($indexEventTableName, $where);
198+
}
199+
}
200+
}
138201
}

app/code/core/Mage/Index/etc/config.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
<version>1.6.0.0</version>
2121
</Mage_Index>
2222
</modules>
23+
<crontab>
24+
<jobs>
25+
<index_clean_events>
26+
<schedule>
27+
<cron_expr>30 */4 * * *</cron_expr>
28+
</schedule>
29+
<run>
30+
<model>index/observer::cleanOutdatedEvents</model>
31+
</run>
32+
</index_clean_events>
33+
</jobs>
34+
</crontab>
2335
<global>
2436
<helpers>
2537
<index>

0 commit comments

Comments
 (0)