Bugging out with deeply nested action urls
|Reported by:||vipsoft||Owned by:|
Patch from crowbot:
I've done a bit more work on trying to isolate this bug, using the same data set as frabcus. I've had some success in tracking it down further, and got a fix but not a definitive answer as to what the issue is.
Basically, the Actions plugin in piwik makes nested arrays to represent different 'actions' (url segments) in the logs of site visits. These then get made into DataTables, with various different sorting and limiting filters being applied to them.
The situation that I think causes the segfault is that there's a url with more than 10 slash-separated path segments in it, on a day when there are also more than 100 rows to record and archive. The url causes 10-deep array to be built (which is normally fine) but then the fact that there are more than 100 records causes filters to be applied to sort the records in the resulting data table, remove some, and add a summary row. This process somehow corrupts the data table such that any subsequent attempt to access rows in it causes a segfault (or on OSX, a bus error). It's fairly icky as the filter classes are generated on the fly and I think the problem may be something to do with several on-the-fly created classes holding a reference to this deeply nested array with objects in it. For now, the problem seems solved by unsetting a reference to it in the final filter after use.
--- core/DataTable/Filter/AddSummaryRow.php (revision 1152) +++ core/DataTable/Filter/AddSummaryRow.php (working copy) @@ -68,5 +68,6 @@ $newRow->setColumns(array('label' => $this->labelSummaryRow) + $newRow->getColumns()); $this->table->filter('Limit', array(0, $this->startRowToSummarize)); $this->table->addSummaryRow($newRow); + unset($rows); } }
Change History (6)
comment:1 Changed 4 years ago by matt (mattab)
- Milestone changed from 2- DigitalVibes to 1 - Piwik 0.4.2