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

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

Open
ayush-dedhia25 opened this issue Sep 23, 2021 · 12 comments
Labels
modules NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@ayush-dedhia25
Copy link

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
Copy link
Contributor

shmsr commented Sep 23, 2021

@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
Copy link
Contributor

bcmills commented Sep 23, 2021

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 bcmills reopened this Sep 23, 2021
@bcmills bcmills changed the title RLock Error: Function not implemented cmd/go: "RLock …: Function not implemented" when the main module is in a filesystem that does not support locking Sep 23, 2021
@bcmills bcmills added the NeedsFix The path to resolution is known, but the work has not been done. label Sep 23, 2021
@bcmills bcmills added this to the Backlog milestone Sep 23, 2021
@bcmills bcmills self-assigned this Sep 23, 2021
@bcmills bcmills modified the milestones: Backlog, Go1.19 Feb 2, 2022
@bcmills
Copy link
Contributor

bcmills commented Feb 2, 2022

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
Copy link
Member

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

@bcmills bcmills modified the milestones: Go1.19, Backlog, Go1.20 Jun 24, 2022
@bcmills bcmills modified the milestones: Go1.20, Backlog Dec 12, 2022
@bcmills bcmills removed their assignment Dec 12, 2022
@wauk
Copy link

wauk commented Jul 14, 2023

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

@Mobi97213
Copy link

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
Copy link

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
Copy link

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
Copy link

wauk commented Feb 7, 2024

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
Copy link

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

@alexis-renard
Copy link

alexis-renard commented Mar 4, 2024

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

  • go : go version go1.21.6 android/arm64
  • tmux : 0.118.0

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 #48572 (comment) : 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

  • Usecase : I own and maintain the code, which is a little script relatively simple over which I have total control.
  • Workaround : The solution was to force go not to check the mod.go running export GO111MODULE=off on termux before the go execution. That also has made me refactor a bit the code to use only my main package / modifying the $GOPATH value for the other local packages to be foundable by go.
  • Limits : The workaround will surely not be sufficient for more complex code that require using not only one package / other usecases where the user doesn't have complete control over the code.

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

@0dminnimda
Copy link

0dminnimda commented Sep 26, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
modules NeedsFix The path to resolution is known, but the work has not been done.
Projects
Status: No status
Development

No branches or pull requests