code: protected void processConnectedFragment(String tenantId, Trace fragment) {
  
          List<Producer> producers = NodeUtil.findNodes(fragment.getNodes(), Producer.class);
  
          for (Producer producer : producers) {
              if (!producer.getCorrelationIds().isEmpty()) {
                  List<Trace> fragments = getTraceFragments(tenantId, producer.getCorrelationIds().stream()
                          .map(correlationIdentifier -> correlationIdentifier.getValue())
                          .collect(Collectors.toList()));
  
                  for (Trace descendant : fragments) {
                      // Attach the fragment root nodes to the producer
                      producer.getNodes().addAll(descendant.getNodes());
                      processConnectedFragment(tenantId, descendant);
                  }
              }
          }
      }
docs: This method aggregates enhances the root trace, representing the
  complete end to end instance view, with the details available from
  a linked trace fragment that should be attached to the supplied
  Producer node. If the producer node is null then don't merge
  (as fragment is root) and just recursively process the fragment
  to identify additional linked fragments.
  
  @param tenantId The tenant id
  @param fragment The fragment to be processed