in prod/php/ElasticOTel/InferredSpans/InferredSpans.php [255:299]
private function shouldReduceFrame(int $index, int $oldFramesCount, int &$previousFrameStackTraceId, bool &$forceParentChangeFailed): bool
{
$frameStackTraceId = $this->lastStackTrace[$index][self::METADATA_STACKTRACE_ID];
$dropSpan = $previousFrameStackTraceId == $frameStackTraceId; // if frame came from same stackTrace (interval) - we're dropping all spans above as they have same timing
$previousFrameStackTraceId = $frameStackTraceId;
if (!$dropSpan) { // if span should not be dropped, search for spans with same traceId and get parent from last one
// find last span with same stackTraceId
$lastSpanParent = null;
for ($i = $index + 1; $i < $oldFramesCount; $i++) {
if ($this->lastStackTrace[$i][self::METADATA_STACKTRACE_ID] != $frameStackTraceId) {
break;
}
$span = $this->lastStackTrace[$i][self::METADATA_SPAN]->get();
if (!$span instanceof Span) {
break;
}
$lastSpanParent = $span->getParentContext();
}
if ($lastSpanParent) {
$span = $this->lastStackTrace[$index][self::METADATA_SPAN]->get();
if (!$span instanceof Span) {
return false;
}
self::logDebug(
"Changing parent of span: '" . $span->getName() . "'",
['new', $lastSpanParent, 'old', $span->getParentContext()]
);
$forceParentChangeFailed = !force_set_object_property_value($span, "parentSpanContext", $lastSpanParent);
}
}
if ($forceParentChangeFailed && $dropSpan) {
$dropSpan = false;
}
return $dropSpan;
}