sdk-go icon indicating copy to clipboard operation
sdk-go copied to clipboard

Interoperability issues due to proto inconsistencies between spec and language-specific SDKs

Open v3n opened this issue 3 years ago • 5 comments

Hi, we've run into a fairly high severity issue using CloudEvents with Go.go-sdk uses a different Protobuf descriptor from the descriptor defined in the spec and other SDKs.

We're developing on top of Cloudevents in a mixed language ecosystem (primary Java & Go, using Protobuf as our schema and interoperability layer. Producers use the HTTP protocol to a collection, which outputs to the Kafka binding where producers pick up events).

There are a number of interoperability issues we've run into so far, namely due to Go using an inconsistent version of the protobuf definition:

protoc-generated Go cannot import the spec.

  • The spec defines the Go import as cloudevents.io/genproto. This module does not exist.

Since this repository doesn't exist, anything generated from Go doesn't work. This could be solvable via go.mod replace directives except....

Different protobuf packages

  • The spec defines the protobuf as package io.cloudevents.v1;
  • This repository defines the protobuf as package pb;

While wire format interoperability is unaffected, this causes protoreflect to not work between languages. For example: embedding a CloudEvents type via google.protobuf.Any or using protojson

Solution

  • Create cloudevents.io/genproto
  • sdk-go uses the canonical protobuf defined by cloudevents.io/genproto

v3n avatar Dec 06 '21 22:12 v3n

Thanks, will take a look.

n3wscott avatar Dec 06 '21 23:12 n3wscott

OK! the correct proto file is here and we need to copy it down.

https://github.com/cloudevents/spec/blob/v1.0.1/spec.proto

n3wscott avatar Jan 20 '22 17:01 n3wscott

@n3wscott: Note that that proto is slightly out of date - it doesn't include batch support (and doesn't have a csharp_namespace option, although that shouldn't affect go). The most up-to-date one is at https://github.com/cloudevents/spec/blob/main/cloudevents/formats/cloudevents.proto - I'm expecting to use that as the basis of the GA version in 1.0.2 assuming the vote passes.

jskeet avatar Jan 21 '22 15:01 jskeet

This is more than half a year old - is this repo even maintained anymore?

AndreasBergmeier6176 avatar Aug 12 '22 12:08 AndreasBergmeier6176

It is maintained by volunteers. Would you like to contribute @AndreasBergmeier6176 ?

n3wscott avatar Aug 12 '22 17:08 n3wscott