Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/sys/unix: broken on Go 1.6 #26576

Closed
hiranya911 opened this issue Jul 24, 2018 · 25 comments
Closed

x/sys/unix: broken on Go 1.6 #26576

hiranya911 opened this issue Jul 24, 2018 · 25 comments
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made.
Milestone

Comments

@hiranya911
Copy link

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

go version go1.6.4 linux/amd64

What operating system and processor architecture are you using (go env)?

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/travis/gopath"
GORACE=""
GOROOT="/home/travis/.gimme/versions/go1.6.4.linux.amd64"
GOTOOLDIR="/home/travis/.gimme/versions/go1.6.4.linux.amd64/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

What did you do?

Some of our CI builds on Go 1.6 suddenly started failing (builds are successful on other Go version)

google.golang.org/grpc/balancer
google.golang.org/grpc/balancer/base
google.golang.org/grpc/balancer/roundrobin
google.golang.org/grpc/codes
google.golang.org/grpc/encoding
google.golang.org/grpc/encoding/proto
google.golang.org/grpc/internal
google.golang.org/grpc/internal/grpcrand
google.golang.org/grpc/internal/backoff
golang.org/x/sys/unix
# golang.org/x/sys/unix
../../golang.org/x/sys/unix/ioctl.go:18: undefined: runtime.KeepAlive
../../golang.org/x/sys/unix/ioctl.go:28: undefined: runtime.KeepAlive
google.golang.org/grpc/internal/envconfig
github.com/golang/protobuf/ptypes/any
google.golang.org/genproto/googleapis/rpc/status
google.golang.org/grpc/keepalive
google.golang.org/grpc/metadata
google.golang.org/grpc/peer
google.golang.org/grpc/stats
github.com/golang/protobuf/ptypes/duration
github.com/golang/protobuf/ptypes/timestamp
github.com/golang/protobuf/ptypes
google.golang.org/grpc/status
google.golang.org/grpc/tap
google.golang.org/grpc/naming
google.golang.org/grpc/resolver/dns
google.golang.org/grpc/resolver/passthrough
google.golang.org/api/iterator
golang.org/x/net/context/ctxhttp
golang.org/x/oauth2/jws
golang.org/x/oauth2/internal
cloud.google.com/go/compute/metadata
google.golang.org/api/googleapi/transport
golang.org/x/oauth2
github.com/golang/protobuf/ptypes/empty
github.com/golang/protobuf/ptypes/struct
github.com/golang/protobuf/ptypes/wrappers
golang.org/x/oauth2/jwt
github.com/golang/protobuf/protoc-gen-go/descriptor
golang.org/x/oauth2/google
google.golang.org/genproto/googleapis/api/annotations
google.golang.org/grpc/credentials/oauth
google.golang.org/genproto/googleapis/type/latlng
cloud.google.com/go/internal/atomiccache
cloud.google.com/go/internal/btree
cloud.google.com/go/internal/fields
google.golang.org/api/googleapi/internal/uritemplates
cloud.google.com/go/internal/optional
cloud.google.com/go/internal/trace
google.golang.org/api/googleapi
google.golang.org/api/gensupport
google.golang.org/api/identitytoolkit/v3
google.golang.org/api/storage/v1
The command "go get -t -v $(go list ./... | grep -v integration)" failed and exited with 2 during .

Issue seems to have been caused by golang/sys@e072cad

@hiranya911
Copy link
Author

It seems runtime.KeepAlive is only present on Go 1.7 and above.

hiranya911 referenced this issue in golang/sys Jul 24, 2018
…fetime

Change-Id: I42e59149e58bd928d9beb2c6665ce186b377d2a1
Reviewed-on: https://go-review.googlesource.com/125640
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
@bradfitz
Copy link
Contributor

Sorry, Go 1.6 is no longer supported.

If you were using Go 1.6 for App Engine, note that GAE standard supports Go 1.9 (by default) now.

/cc @jba @zombiezen @ianlancetaylor

@bradfitz bradfitz added this to the Unplanned milestone Jul 24, 2018
@bradfitz bradfitz changed the title Build Error from golang.org/x/sys/unix/ioctl.go on Golang 1.6 x/sys/unix: broken on Go 1.6 Jul 24, 2018
@hiranya911
Copy link
Author

What about other GCP client libraries? They were still building for golang 1.6 last time I checked: https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/.travis.yml

@ianlancetaylor
Copy link
Contributor

Will no one rid of us of this meddlesome 1.6 release?

@hiranya911
Copy link
Author

Btw we are observing this break in the Firebase Go library. If Cloud gophers have decided to drop golang 1.6, we can get on board with that and drop 1.6 support as well.

@jba, @broady please advise.

@bradfitz
Copy link
Contributor

Will no one rid of us of this meddlesome 1.6 release?

I'm trying, Henry. My understanding was that GAE Standard was the last holdout and with it supporting Go 1.9 now we could move forward. I'd love to get confirmation on that.

@bradfitz bradfitz added the NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. label Jul 25, 2018
@jba
Copy link
Contributor

jba commented Jul 25, 2018

Not quite, Brad. There is a difference between supporting 1.9 and dropping support for 1.6.

Please put this change behind a build tag.

@jba
Copy link
Contributor

jba commented Jul 25, 2018

Sorry, let me be less snarky.

Although 1.9 may be the GAE default, it is still possible to pin to other versions. We know that several projects pin to 1.6. Until an official deprecation policy is announced and implemented, we are obligated to support 1.6.

@agnivade
Copy link
Contributor

Until an official deprecation policy is announced and implemented,

It is already there I believe.

Each major Go release is supported until there are two newer major releases

https://golang.org/doc/devel/release.html#policy. So "officially" 1.6 is no longer supported.

@jba
Copy link
Contributor

jba commented Jul 25, 2018

Sorry, @agnivade, I was referring to App Engine, not Go.

@bradfitz
Copy link
Contributor

@jba, do we have that documented somewhere?

Let's agree on something and write something down.

We can't have some invisible policy that non-Google Go contributors don't know about.

Please document somewhere what's expected of the Go App Engine libraries and what's expected of the Go libraries (and which). And for which environments. (Standard? Flex? Go 1.6 only? which packages?)

Also, we have no build & test infrastructure setup for older releases anymore.

You never replied to #26302 either, which is about removing Go 1.8 and older support in x/net/http2, which has become a mess of +build tags and files:

https://github.com/golang/net/tree/master/http2

screen shot 2018-07-25 at 7 48 35 am

... such messes hinder development. It's just not sustainable to keep supporting Go 1.6.

Perhaps y'all need to vendor old copies of certain golang.org/x/* packages to keep App Engine libraries working, if that's what you've promised.

But I'm not sure what the constraints are. Please document it somewhere.

Once we see & agree upon a policy, then we can move forward with this bug.

@dfawley
Copy link

dfawley commented Jul 25, 2018

Vendoring is the only reasonable solution here. It isn't sustainable to support so many versions of Go. If App Engine was not a Google product, I know what we would do.

@jba
Copy link
Contributor

jba commented Jul 25, 2018

Vendoring doesn't work on App Engine, unfortunately.

@bradfitz
Copy link
Contributor

@jba, maybe not with cmd/go's special handling of "vendor" directories, but it works in the general sense: you can copy files from your dependencies into your own GOPATH and manage your own whole GOPATH (your app + your deps) in your VCS.

menghanl pushed a commit to grpc/grpc-go that referenced this issue Jul 25, 2018
This can be reverted when golang/go#26576 is resolved.
@hiranya911
Copy link
Author

So, what's the way forward here. As it is several builds remain broken:

https://travis-ci.org/GoogleCloudPlatform/google-cloud-go
https://travis-ci.org/firebase/firebase-admin-go

It seems GRPC team disabled the 1.6 CI builds. Is that a reasonable temporary workaround?

gopherbot pushed a commit to googleapis/google-cloud-go that referenced this issue Jul 26, 2018
golang/x/sys/unix removed support for Go 1.6. Decision on our side
pending discussion in golang/go#26576.
Disable the E2E test for now to avoid covering other failures.

Change-Id: I47fabb89c0ccc5f9e7bef5502bcd71fd3e2b586a
Reviewed-on: https://code-review.googlesource.com/30910
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Alexey Alexandrov <aalexand@google.com>
@dfawley
Copy link

dfawley commented Jul 26, 2018

It seems GRPC team disabled the 1.6 CI builds. Is that a reasonable temporary workaround?

I think the only other choice would be to pin your dependencies to versions that support 1.6 in your 1.6 CI build. I.e. cd ...../golang.org/x/sys && git checkout e072cad~1

@aalexand
Copy link
Contributor

aalexand commented Jul 26, 2018 via email

@jba
Copy link
Contributor

jba commented Jul 26, 2018

cloud.google.com/go/... has disabled 1.6 in our Travis config.

@hiranya911
Copy link
Author

x/sys is a transitive dependency for us (probably coming through the GCP libs we depend on). But pinning to a working revision sounds interesting. I'm going to try that out in a bit.

@jba
Copy link
Contributor

jba commented Jul 26, 2018

@dfawley, can internal/channelz/types_linux.go and internal/syscall/syscall_linux.go be removed for 1.6? They already have a !appengine build tag, so they can't be that critical.

@dfawley
Copy link

dfawley commented Jul 26, 2018

I think it should be fine, but this sounds like kicking the can down the road to me. When will our next dependency break support for Go 1.6?

jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
jeanbza added a commit to jeanbza/grpc-go that referenced this issue Jul 26, 2018
ChannelZ is a debugging feature in grpc. It has not had appengine support; this commit
removes its support for 1.6, too. This change is because in a recent sys/unix commit
1.6 support was broken. See: golang/go#26576 (comment).
@jeanbza
Copy link
Member

jeanbza commented Jul 26, 2018

Uh... sorry for the commit spam. Apparently amending + git push -f, despite not making new commits, puts a new entry in linked issues each time. TIL.

@jeanbza
Copy link
Member

jeanbza commented Jul 26, 2018

@hiranya911 We've put the 1.6-incompatible code behind build flags in grpc (which google-cloud-go Firestore client uses): grpc/grpc-go#2242. You should now be able to use our GCP clients in 1.6 again. Let me know if that's not the case.

@hiranya911
Copy link
Author

@jadekler that indeed fixes the issue for us. Much appreciated 👍

https://travis-ci.org/firebase/firebase-admin-go/jobs/407811247

@bradfitz
Copy link
Contributor

bradfitz commented Oct 2, 2018

The Google stuff broken by this was fixed, so closing this issue. The Go project itself has no plans to change our support policy to support things older than the past two releases.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made.
Projects
None yet
Development

No branches or pull requests

9 participants