Skip to content

1.0.0

Compare
Choose a tag to compare
@ktoso ktoso released this 01 Jun 15:14
· 23 commits to main since this release
1.0.0
ba07967

Initial 1.0 release

After a very long period of incubation, including the development of language features (SE-0311: Task Locals) and multiple iterations on exact shapes of the API to ensure least possible impact on instrumented code when tracing is disabled, we are happy to announce the first source stable release of swift-distributed-tracing!

This package is an "API package", in the same way swift-log and swift-metrics are. This means that this package does not offer a Tracer implementation, but allows libraries to use this abstract API to instrument their code (e.g. http clients, distributed actors, gRPC or other) using tracing and once a tracer is bootstrapped by an end user, spans from given library are included in the distributed trace.

Special thanks

It should be noted that this project initially kicked off thanks to Swift participating in Google Summer of Code in 2020 (initial repository announcement), and would not have been possible without the relentless efforts of @slashmo sticking to the work and project even 3 years after GSoC concluded.

Maturing such crucial "core" libraries for the server ecosystem takes time, and we've since gained multiple Swift language features which made this library possible, and we'd like to extend our thanks to everyone involved along the way. Thanks!

Reference Documentation

Getting started with distributed tracing can be somewhat daunting, so in order to explain how to adopt and what "kind of adopter" and aspect of APIs you should be looking at, the initial release features comprehensive reference documentation in the form of docc documentation hosted on swiftpackageindex.com (or generated from the 1.0 sources).

Notable changes since beta releases

When upgrading from beta releases you might need to take care of the following changes:

  • The Baggage type, previously vended by the swift-distributed-tracing-baggage package is now known as ServiceContext and has also announced its 1.0 release.
  • It is possible to mock time using the tracing instant types
  • The library now splits its API between LegacyTracer which is Swift 5.6 compatible, and Tracer which requires Swift 5.7+
    • The reason for this is that the APIs now return a concrete Span type from startSpan which allows avoiding existential boxing if using tracers explicitly. And such return type is only supported since Swift 5.7 because the Span protocol is a "protocol with associated types"

Further, several small improvements have been made since the betas, but nothing has fundamentally changed in the APIs.

Adoption plans

We anticipate a few tracing implementations (most notably slashmo/swift-otel) to soon release 1.0 compatible versions of libraries.

We (as in the SSWG workgroup) will also collaborate with various client (e.g. http) and server projects to spread the adoption of this API in such way that enabling tracing should give a great ecosystem wide user experience. This process will take time, and we would love to see the community help with this process!

If you have any questions about implementing tracers, or adopting them in your libraries or projects please don't hesitate to reach out on the forums: https://forums.swift.org/c/server/43 or in this repository's issues.

What's Changed

  • startSpan should take tracepoint location by @ktoso in #68
  • Add .spi.yml for Swift Package Index DocC support by @yim-lee in #72
  • Change 'landing' target to Tracing by @yim-lee in #74
  • notes about LoggingContext by @ktoso in #75
  • Add CI for Swift 5.8 and update nightly to Ubuntu 22.04 by @yim-lee in #76
  • Mark types Sendable by @ktoso in #83
  • Update CoC and add CONTRIBUTING file by @ktoso in #87
  • Allow for reading and mutating a span name by @ktoso in #88
  • Recording an error may carry attributes by @ktoso in #90
  • associated type Span, Tracer as short-hand, and *Protocol types by @ktoso in #93
  • Enable struct Spans with reference semantics; optimal NoopSpan by @ktoso in #94
  • remove not used docker configurations by @ktoso in #96
  • remove linux test shims by @ktoso in #97
  • Provide explicit set/get to avoid SpanAttributeConvertible wrapping by @ktoso in #95
  • Implement TracerClock and abstract away "now" by @ktoso in #98
  • Remove some unused/untested dead code by @fabianfett in #100
  • Correct the default impl for startAnySpan for 5.7 by @ktoso in #112
  • Introduce top level withSpan; reclaim Tracer and Instrument for protocols by @ktoso in #113
  • Add nanoseconds to instant protocol by @ktoso in #114
  • Update CI by @yim-lee in #116
  • Add nanoseconds to SpanEvent by @slashmo in #118
  • remove clock protocol, use autoclosure "now" instant by @ktoso in #120
  • end() should take an autoclosure instant, not direct instant by @ktoso in #122
  • consider TracerSpan assoc type -> Span by @ktoso in #111
  • [Docs] Combined initial documentation work by @ktoso in #121
  • Adopt ServiceContext 1.0 by @ktoso in #127
  • Use 1.0.0 service-context by @ktoso in #128
  • Rename do not switch case by @fabianfett in #129

New Contributors

Full Changelog: 0.3.1...1.0.0