docs: @Override
    public Call<Void> accept(List<Span> rawSpans) {
      V2SpanConverter converter = V2SpanConverter.create();
      V1ThriftSpanWriter encoder = new V1ThriftSpanWriter();
  
      Set<InsertTrace.Input> insertTraces = new LinkedHashSet<>();
      Set<String> insertServiceNames = new LinkedHashSet<>();
      Set<InsertRemoteServiceName.Input> insertRemoteServiceNames = new LinkedHashSet<>();
      Set<InsertSpanName.Input> insertSpanNames = new LinkedHashSet<>();
      Set<Map.Entry<String, String>> autocompleteTags = new LinkedHashSet<>();
  
      List<Call<Void>> calls = new ArrayList<>();
      for (Span v2 : rawSpans) {
        V1Span span = converter.convert(v2);
        // indexing occurs by timestamp, so derive one if not present.
        long ts_micro = v2.timestampAsLong();
        if (ts_micro == 0L) ts_micro = guessTimestamp(v2);
  
        insertTraces.add(insertTrace.newInput(span, encoder.write(v2), ts_micro));
  
        if (!searchEnabled) continue;
  
        if (insertAutocompleteValue != null) {
          for (Map.Entry<String, String> entry : v2.tags().entrySet()) {
            if (autocompleteKeys.contains(entry.getKey())) autocompleteTags.add(entry);
          }
        }
  
        // service span and remote service indexes is refreshed regardless of timestamp
        String serviceName = v2.localServiceName();
        if (serviceName != null) {
          insertServiceNames.add(serviceName);
          if (v2.name() != null) insertSpanNames.add(insertSpanName.newInput(serviceName, v2.name()));
          if (insertRemoteServiceName != null && v2.remoteServiceName() != null) {
            insertRemoteServiceNames.add(
              insertRemoteServiceName.newInput(serviceName, v2.remoteServiceName()));
          }
        }
  
        if (ts_micro == 0L) continue; // search is only valid with a timestamp, don't index w/o it!
        indexer.index(v2, calls);
      }
  
      for (InsertTrace.Input insert : insertTraces) {
        calls.add(insertTrace.create(insert));
      }
      for (String insert : insertServiceNames) {
        insertServiceName.maybeAdd(insert, calls);
      }
      for (InsertRemoteServiceName.Input insert : insertRemoteServiceNames) {
        insertRemoteServiceName.maybeAdd(insert, calls);
      }
      for (InsertSpanName.Input insert : insertSpanNames) {
        insertSpanName.maybeAdd(insert, calls);
      }
      for (Map.Entry<String, String> autocompleteTag : autocompleteTags) {
        insertAutocompleteValue.maybeAdd(autocompleteTag, calls);
      }
      return calls.isEmpty() ? Call.create(null) : AggregateCall.newVoidCall(calls);
    }