golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123.74k stars 17.63k forks source link

cmd/go: "RLock …: Function not implemented" when the main module is in a filesystem that does not support locking #48572

Open ayush-dedhia25 opened 3 years ago

ayush-dedhia25 commented 3 years ago

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

$ go version
go version go1.17.1 android/arm64

Does this issue reproduce with the latest release?

No

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

go env Output
$ go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/data/data/com.termux/files/home/.cache/go-build"
GOENV="/data/data/com.termux/files/home/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="android"
GOINSECURE=""
GOMODCACHE="/data/data/com.termux/files/home/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="android"
GOPATH="/data/data/com.termux/files/home/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/data/data/com.termux/files/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/data/data/com.termux/files/usr/lib/go/pkg/tool/android_arm64"
GOVCS=""
GOVERSION="go1.17.1"
GCCGO="gccgo"
AR="ar"
CC="aarch64-linux-android-clang"
CXX="aarch64-linux-android-clang++"
CGO_ENABLED="1"
GOMOD="/storage/8D8B-150E/Go/secure-api/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/data/data/com.termux/files/usr/tmp/go-build380772883=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I tired to create a module for my new golang project using go mod init github.com/ayush/secure-api

What did you expect to see?

I expected of successfully creation of module for my project.

What did you see instead?

Error I got: go: RLock /storage/8D8B-150E/Go/secure-api/go.mod: function not implemented

shmsr commented 3 years ago

@ayush-dedhia25 I see a similar query of yours was already answered on StackOverflow and even by a member of a Go Team (@bcmills) and still you have opened an issue here.

Refer: https://stackoverflow.com/a/68728663/5821408

bcmills commented 3 years ago

I explicitly mentioned the possibility of filing an issue on the SO answer:

If you can't configure the filesystem to support locking and it isn't practical for you to work within a different filesystem that does, please file an issue at https://golang.org/issue/new, and mention issue #37461 (which is closely related) in the issue description.

So I think it's fine to keep this issue open. Honestly, I think we should probably proceed without file-locking when the go.mod and go.sum files cannot be locked — they're less prone to race conditions than, say, the module cache (which must support file-locking because it is much harder to fix if it becomes corrupted, and is implicitly modified much more frequently).

bcmills commented 2 years ago

Locking the go.mod and go.sum files also interferes with certain gopls behaviors (see #50971, #50840). (CC @findleyr, @hyangah)

Now that the go command defaults to -mod=readonly, I wonder if this file-locking has outlived its usefulness. Maybe we should stop using file-locking in the main module (and only use it within the module cache). (CC @matloob)

On the other hand, the locking errors that show up in the gopls tests are probably actual real/write races, and they can probably at least show up as corrupted diagnostics in actual use. 🤔

ianlancetaylor commented 2 years ago

@bcmills @matloob This issue is marked for 1.19. Should it move to Backlog? Thanks.

wauk commented 1 year ago

Just to add some informarion I had this issue rooted my tablet and now i can lock files.

Mobi97213 commented 11 months ago

go version go1.21.4 android/arm64 echo $TERMUX_VERSION 0.118.0 android version 11

Is there any outlook on fixing this? I can't not run "go mod tidy", "go get -u", "go work use .", etc without getting an an error: go: RLock go.mod: Function not implemented

Am I correct in the conclusion that even though golang is in the termux repository, and it can be installed, it actually can't be used to develop and run a .go file?

ProxVirtualZone commented 9 months ago

Am I correct in the conclusion that even though golang is in the termux repository, and it can be installed, it actually can't be used to develop and run a .go file?

I have the same problem with termux(

wasserholz commented 8 months ago

This issue occured also for a colleague in Windows WSL 2 with Ubuntu. Would love to see a solution or at least a work around.

wauk commented 8 months ago

This issue occured also for a colleague in Windows WSL 2 with Ubuntu. Would love to see a solution or at least a work around.

Sometimes its just the user that does not have permissions. After I rooted a device that did not have access to lock files this problem went away

ezamelczyk commented 8 months ago

Unfortunately not every device is rootable. A workaround would be nice.

alexis-renard commented 7 months ago

Hey, I am facing the same issue on termux as well. I guess I have found a workaround for my usecase.

Running go mod tidy, go run . or go build . all result in the same issue : go: RLock go.mod: Function not implemented The path where I run these commands is : /storage/emulated/0/documents/...

// go.mod
module my-module-name

go 1.21.6

I wonder the same question as https://github.com/golang/go/issues/48572#issuecomment-1808166355 : should we just give up on trying running go with multiple packages on termux or is there a way ?

EDIT: I have found a workaround for my usecase that has some limits

I hope to find something better soon, but posting it here if that would unblock some other users :)

0dminnimda commented 1 month ago

For

$ go version
go version go1.23.1 android/arm64
$ echo $TERMUX_VERSION
0.118.1

The message is

$ go mod init example.com/name
go: creating new go.mod: module example.com/name
go: updating go.mod: Lock /storage/emulated/0/Work/example/go.mod: function not implemented

It only creates an empty go.mod file.