Blueprint-uServices / blueprint

Blueprint Microservices Compiler: Flexible and Configurable Open-Source Microservice Benchmark Applications
https://blueprint-uservices.github.io
BSD 3-Clause "New" or "Revised" License
15 stars 4 forks source link

[Plugin] OpenTelemetry Related Docker Compose Fails In Multiple Examples #176

Closed canteversleep closed 1 week ago

canteversleep commented 2 weeks ago

We thank the authors for publishing and maintaining this work. We have been trying to run experiments with Blueprint for a paper we are currently writing, but multiple of the example builds have been throwing a similar error in the docker compose up step, which has to do with the open. We note that this only occurs in the examples in which the wiring spec uses the open telemetry plugin. We suspect that this is where the issue arises.

We’ve attached the following stack traces where this issue arises:

Edit: changing the wire specs for the aforementioned examples and removing the opentelemetry plugin results in working Docker builds.

Please advise regarding this issue and regarding anything we may do to support its resolution.

vaastav commented 2 weeks ago

I think this issue is something that is resulting from a dependency version mismatch for the opentelemetry. I'll look into a fix for this.

canteversleep commented 2 weeks ago

Can you speak to the specific mismatch which may be occurring? We may be able to assist via PR if the issue is trivial.

vaastav commented 2 weeks ago

My best guess is that when Blueprint does go mod tidy in the generated code, it starts using opentelemetry version 1.27.0 but the Blueprint dependency is on version 1.26.0. Float64Gauge is only available in otel version 1.27.0.

As a quick workaround, on your local Blueprint repo, you can try upgrading Blueprint's otel dependency to 1.27.0 and that should fix it for now. I'll probably be posting this exact fix by tonight (Pacific Time) after running some tests.

Ideally, we should have a mechanism where we have the ability to specify the dependency of a version when generating code and that is a non-trivial fix (and I am looking into it).

vaastav commented 1 week ago

Closing this issue as it was fixed in #178

alessandrocornacchia commented 1 week ago

If that can help for the future, reading here https://pkg.go.dev/go.opentelemetry.io/otel/metric it says new specifications can be added to the API without a major version bump. Could it be that they added the Float64Gauge to the API specifications go.opentelemetry.io/otel/metric in v1.26, but they added an API implementation go.opentelemetry.io/otel/sdk/metric of it only starting from v1.27?

Blueprint using v1.26 for the sdk, then the error.

vaastav commented 1 week ago

No, I checked their API specs. The name of the method for the Float64Gauge changed from v1.26 to v1.27 which caused the mismatch.

Regardless, the dependency version in the generated systems should be fixed to v1.26 as well so this shouldn't be an issue in the future.