19
19
*/
20
20
class Mage_Index_Model_Observer
21
21
{
22
+ public const OLD_INDEX_EVENT_THRESHOLD_SECONDS = 24 * 60 * 60 ;
23
+ public const OLD_INDEX_EVENT_DELETE_COUNT = 1000 ;
24
+
22
25
/**
23
26
* Indexer model
24
27
*
@@ -35,6 +38,7 @@ public function __construct()
35
38
* Store after commit observer. Process store related indexes
36
39
*
37
40
* @param Varien_Event_Observer $observer
41
+ * @throws Throwable
38
42
*/
39
43
public function processStoreSave (Varien_Event_Observer $ observer )
40
44
{
@@ -50,6 +54,7 @@ public function processStoreSave(Varien_Event_Observer $observer)
50
54
* Store group after commit observer. Process store group related indexes
51
55
*
52
56
* @param Varien_Event_Observer $observer
57
+ * @throws Throwable
53
58
*/
54
59
public function processStoreGroupSave (Varien_Event_Observer $ observer )
55
60
{
@@ -65,6 +70,7 @@ public function processStoreGroupSave(Varien_Event_Observer $observer)
65
70
* Website save after commit observer. Process website related indexes
66
71
*
67
72
* @param Varien_Event_Observer $observer
73
+ * @throws Throwable
68
74
*/
69
75
public function processWebsiteSave (Varien_Event_Observer $ observer )
70
76
{
@@ -80,6 +86,7 @@ public function processWebsiteSave(Varien_Event_Observer $observer)
80
86
* Store after commit observer. Process store related indexes
81
87
*
82
88
* @param Varien_Event_Observer $observer
89
+ * @throws Throwable
83
90
*/
84
91
public function processStoreDelete (Varien_Event_Observer $ observer )
85
92
{
@@ -95,6 +102,7 @@ public function processStoreDelete(Varien_Event_Observer $observer)
95
102
* Store group after commit observer. Process store group related indexes
96
103
*
97
104
* @param Varien_Event_Observer $observer
105
+ * @throws Throwable
98
106
*/
99
107
public function processStoreGroupDelete (Varien_Event_Observer $ observer )
100
108
{
@@ -110,6 +118,7 @@ public function processStoreGroupDelete(Varien_Event_Observer $observer)
110
118
* Website save after commit observer. Process website related indexes
111
119
*
112
120
* @param Varien_Event_Observer $observer
121
+ * @throws Throwable
113
122
*/
114
123
public function processWebsiteDelete (Varien_Event_Observer $ observer )
115
124
{
@@ -125,6 +134,7 @@ public function processWebsiteDelete(Varien_Event_Observer $observer)
125
134
* Config data after commit observer.
126
135
*
127
136
* @param Varien_Event_Observer $observer
137
+ * @throws Throwable
128
138
*/
129
139
public function processConfigDataSave (Varien_Event_Observer $ observer )
130
140
{
@@ -135,4 +145,57 @@ public function processConfigDataSave(Varien_Event_Observer $observer)
135
145
Mage_Index_Model_Event::TYPE_SAVE
136
146
);
137
147
}
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
+ }
138
201
}
0 commit comments