-
Notifications
You must be signed in to change notification settings - Fork 97
[proto] having gRPC service names PascalCase'd and others. #511
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
We can merge this PR and left #518 open with other issues parts tracking there. |
2504405
to
99aa989
Compare
@pvlugter I rebased the PR so that the recent CI changes are in effect for build runs here. |
Thanks, was just about to look at doing that. The native-image for cassandra smoke test seems to be flaky a lot — may need to restart for that. I'll need to follow up and figure out if we can make that more stable, or could be an issue with the native image itself. |
Hmm, it's still timing out after the docker pull. And the native image TCK is failing, seems to be because that's pulling the image rather than using the local one. I'll need to fix this up some more still. |
99aa989
to
09c6d4f
Compare
So just checking: this will be a breaking change for the protocol? The various generated language-specific APIs will be the same, but assuming the method names used will be case sensitive. It was failing with not implemented errors when inadvertently pulling an older image. If so, we probably want to consider bumping the protocol to 0.3 (and could be good to make any other breaking changes and renames to the protocol too). |
And would be good to have a new node-support release without these changes. |
It seems so. Not for the part of Go as far as I can see, as there method name have to be upper-case. We also might discuss other changes in the related issue #518. I listed a few points we could work on. I'll also add the use of a linter there. |
If I'm not mistaken, each specific language code generator will follow your language conventions. |
If it can, yes I think. In case of Go lowercase methodnames are private, so generated service handler names are uppercase. |
We should be able to lint that also. Buf is able to detect breaking changes |
Yes, the code generators should still create compatible language-specific APIs. But the protocol itself will still be case-sensitive, and so this will be breaking change. Will be very useful if we can have buf check for this. So the TCK integration tests are failing for this PR. JS/Node support and Java support pass, as they use the updated proto files, but Go support TCK is failing as it uses the old method names. It's failing during the initial discovery, which is just checking that the TCK implementation has started, so there's no error reported (because it's potentially spinning for a while with it being unavailable). I can update so that it reports the last error on timeout. It's failing with: |
09c6d4f
to
cdc6362
Compare
Thanks. From the TCKs run, the missing Go image for this PR lets it fail, because it uses the :latest image. The PR build of the Go support should build an image that then the main repository starts on a PR intergration run. Also, the image should get deleted afterwards. I'm not sure how the main repository knows about which support language image that would be for a certain PR if the depending supprt language has not yet merged the changes. That complicated procedure could be unnecessary if the support library ensures that its :latest image has the changes a PR run triggered on the main repo checks then with the TCK. This limits the concurrent PRs open for a support library to one. WDYT? |
@pvlugter I pushed the I can't restart the CircleCI workflow. |
Yes, having an approach for changes that affect the language supports would be good. I assume updating the |
I've restarted the native image TCK in CircleCI. We should probably still bump the protocol version for this, although with the discover method rename it doesn't actually get to the protocol compatibility check anyway. It's incompatible in both directions (older proxy with newer language support, or newer proxy with older language support). Not sure if the proxy will keep retrying — I changed things recently so that some exceptions are fatal for trying to connect to the user function. Would make sense to have this not stay in a retry loop. |
Case in point, the TCK integration tests for master are failing now that the image is updated:
|
Switching the TCK integration tests to a stable version of cloudstate-go-tck image in #530, which I think makes sense to do anyway. The |
Its a hack. But for any TCK of a support library that the core project depends on, a change introduced like in this PR, results in this situation. Actually, all other released language support libs are broken with this branch, and if merged broken with the main branch of the core project, probably for a long time. Also, as you laid out, if this PR got merged and a PR-dependent tck image of the Go support would have been provided, the TCK CI run will start to fail until the same change got merged in the Go TCK image. I assume its normal and expected that any TCK image of a support library that is not part of the core project, can and will fail on master or a PR. The inclusion of the Go TCK into the core project was probably motivated to validate changes coming from the core project and we could remove the Go TCK again. Further, we can break up this entanglement by running the TCKs as not part of the core project separately to get an overview, like a matrix, of what is compatible and what is not. The core project if it envolves the protocol, never can catch up with failing support libs. So I think lets remove the Go TCK. |
Yes, we can certainly remove the Go TCK from the integration tests here. We really only need one reference implementation to use, and can run the TCK in the language support CI builds. I'm also fine with using a stable version, and then disabling whenever there are changes. |
Yeah, thought about that too. Perhaps we can mark a PRs text with the tag that can be used and let the CI run read that tag like: I can try to do that, separately to this PR. |
Would be useful if a different tag can be given. Could also support skip comments then, if it's expected to fail and there's no image available yet. |
@pvlugter could you/we change the TCK to start and configure the TCK with env variables like?: TCK_SKIP = "java-tck,kotlin-tck" sourced from a PRs body like:
|
Yes, should be straightforward to configure the TCK from env vars. |
This PR addresses the gRPC servicenames under item a) from issue #518