From c953f57e55810fa0e3201a67a4622fe4ac39c278 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:16:20 +0000 Subject: [PATCH] update ncruces/go-sqlite3 to v0.21.2 (#3626) --- go.mod | 2 +- go.sum | 4 +- .../github.com/ncruces/go-sqlite3/README.md | 2 +- .../ncruces/go-sqlite3/embed/sqlite3.wasm | Bin 1391469 -> 1390983 bytes .../go-sqlite3/internal/dotlk/dotlk.go | 29 +++++++ .../go-sqlite3/internal/dotlk/dotlk_other.go | 13 +++ .../go-sqlite3/internal/dotlk/dotlk_unix.go | 50 +++++++++++ .../util/sql3util/parse/sql3parse_table.wasm | Bin 17389 -> 17400 bytes .../ncruces/go-sqlite3/vfs/README.md | 5 -- .../ncruces/go-sqlite3/vfs/os_bsd.go | 37 +++++++- .../ncruces/go-sqlite3/vfs/os_dotlk.go | 15 ++-- .../ncruces/go-sqlite3/vfs/shm_bsd.go | 79 ++++++++++++++---- .../ncruces/go-sqlite3/vfs/shm_dotlk.go | 10 +-- vendor/modules.txt | 3 +- 14 files changed, 203 insertions(+), 46 deletions(-) create mode 100644 vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go create mode 100644 vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go create mode 100644 vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go diff --git a/go.mod b/go.mod index 8766becda..78bf1c892 100644 --- a/go.mod +++ b/go.mod @@ -62,7 +62,7 @@ require ( github.com/miekg/dns v1.1.62 github.com/minio/minio-go/v7 v7.0.81 github.com/mitchellh/mapstructure v1.5.0 - github.com/ncruces/go-sqlite3 v0.21.1 + github.com/ncruces/go-sqlite3 v0.21.2 github.com/oklog/ulid v1.3.1 github.com/prometheus/client_golang v1.20.5 github.com/spf13/cobra v1.8.1 diff --git a/go.sum b/go.sum index f3812e8ac..693cfa1e6 100644 --- a/go.sum +++ b/go.sum @@ -434,8 +434,8 @@ github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/ncruces/go-sqlite3 v0.21.1 h1:cbzIOY3jQrXZWVsBfH9TCFj/iqqMIcJ7PLye4AAEwoQ= -github.com/ncruces/go-sqlite3 v0.21.1/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= +github.com/ncruces/go-sqlite3 v0.21.2 h1:X7Ao4BwtS9h308lFtZA/stkvrzEHvAdp8g4Gko7Ehjs= +github.com/ncruces/go-sqlite3 v0.21.2/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= diff --git a/vendor/github.com/ncruces/go-sqlite3/README.md b/vendor/github.com/ncruces/go-sqlite3/README.md index d3d5e518f..b370e9638 100644 --- a/vendor/github.com/ncruces/go-sqlite3/README.md +++ b/vendor/github.com/ncruces/go-sqlite3/README.md @@ -74,7 +74,7 @@ This project aims for [high test coverage](https://github.com/ncruces/go-sqlite3 It also benefits greatly from [SQLite's](https://sqlite.org/testing.html) and [wazero's](https://tetrate.io/blog/introducing-wazero-from-tetrate/#:~:text=Rock%2Dsolid%20test%20approach) thorough testing. -Every commit is [tested](https://github.com/ncruces/go-sqlite3/wiki/Test-matrix) on +Every commit is [tested](https://github.com/ncruces/go-sqlite3/wiki/Support-matrix) on Linux (amd64/arm64/386/riscv64/ppc64le/s390x), macOS (amd64/arm64), Windows (amd64), FreeBSD (amd64), OpenBSD (amd64), NetBSD (amd64), DragonFly BSD (amd64), illumos (amd64), and Solaris (amd64). diff --git a/vendor/github.com/ncruces/go-sqlite3/embed/sqlite3.wasm b/vendor/github.com/ncruces/go-sqlite3/embed/sqlite3.wasm index 05a6065f4059f7f65d8359ff9aace9d10576a1b0..c312aa62af42d44e507f7f995257fab10f2f8f7c 100644 GIT binary patch delta 21881 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 delta 21969 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 diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go new file mode 100644 index 000000000..3c8d782d7 --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk.go @@ -0,0 +1,29 @@ +package dotlk + +import ( + "errors" + "io/fs" + "os" +) + +// LockShm creates a directory on disk to prevent SQLite +// from using this path for a shared memory file. +func LockShm(name string) error { + err := os.Mkdir(name, 0777) + if errors.Is(err, fs.ErrExist) { + s, err := os.Lstat(name) + if err == nil && s.IsDir() { + return nil + } + } + return err +} + +// Unlock removes the lock or shared memory file. +func Unlock(name string) error { + err := os.Remove(name) + if errors.Is(err, fs.ErrNotExist) { + return nil + } + return err +} diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go new file mode 100644 index 000000000..5399a5f8a --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_other.go @@ -0,0 +1,13 @@ +//go:build !unix + +package dotlk + +import "os" + +// TryLock returns nil if it acquired the lock, +// fs.ErrExist if another process has the lock. +func TryLock(name string) error { + f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) + f.Close() + return err +} diff --git a/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go new file mode 100644 index 000000000..177ab30bb --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/internal/dotlk/dotlk_unix.go @@ -0,0 +1,50 @@ +//go:build unix + +package dotlk + +import ( + "errors" + "io/fs" + "os" + "strconv" + + "golang.org/x/sys/unix" +) + +// TryLock returns nil if it acquired the lock, +// fs.ErrExist if another process has the lock. +func TryLock(name string) error { + for retry := true; retry; retry = false { + f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) + if err == nil { + f.WriteString(strconv.Itoa(os.Getpid())) + f.Close() + return nil + } + if !errors.Is(err, fs.ErrExist) { + return err + } + if !removeStale(name) { + break + } + } + return fs.ErrExist +} + +func removeStale(name string) bool { + buf, err := os.ReadFile(name) + if err != nil { + return errors.Is(err, fs.ErrNotExist) + } + + pid, err := strconv.Atoi(string(buf)) + if err != nil { + return false + } + if unix.Kill(pid, 0) == nil { + return false + } + + err = os.Remove(name) + return err == nil || errors.Is(err, fs.ErrNotExist) +} diff --git a/vendor/github.com/ncruces/go-sqlite3/util/sql3util/parse/sql3parse_table.wasm b/vendor/github.com/ncruces/go-sqlite3/util/sql3util/parse/sql3parse_table.wasm index 28eab8d29048f51dc07636525ad4520999532429..4d3357ea1b096f2fdc682e9739cf4312b7326971 100644 GIT binary patch delta 903 zcmZXS&1w`u5XZZ!duBHC;Y>cj#f?xiNLZ9Th}p?9xlAD&St05RXi!;&8AGz;1|o{UbF!zWPi0TfSy2SMpsL@~Fnu3uICyZ-%kAAan^t1b9`wEgK49O`S! z%M+Uft1|K0C=#D{N3n%D=H#;+^;J$bKg9uAWV5OURRHE#^5^HOje=pk9-t2%32v0h z3|U3&7~s0fYc7!-4FV*OZ1NdK6=Rj6Ae&~21W2;1Zl(PWe3<}8M(qiO`d#oNKj44;f2C7wNZlo0LbB}@M0-*lCh;fr04YhQn={$1A)207LAB8zu!|u zBJ0)YvnxxhE=RmTZW|+V)>;LD*)jA3@Ce9Fu{j+fmC+$nj7S=$>5-$KtTZQzLnGO% zJ)*`Rml{)-;IB0z^iFQdP?8kO+P#xSlGM~sg6LFY^;OOy^f1Q>=KPp<2|V5Gbv%ni zM~F-avhtY>4CV(u)f&^ocp!t;qjAbJGRe)!xrZ5vomOkvY(mIxzkOZvCSeoBm z#7Gva!bi{W1V3FNOaLZtlE>eAbAUc*E875953?Lx{Wd#lxr7`RZ6RXhAU4mOFT5B? zk*llKu_dCAtm7}M2hRK+gyY-Q{o#1y-thK#ry4$N=$Du8&Rz)b>^vwto5Rhm>QQHF Gd;A;5ri!Ly#!U3cBM8IfxPb zh=&}MxrishAD|)s!(X7_#glmV5Qy|FqL@QNRo8n}k9ys|cIoFXy}nO}`wzZerVrKn z;^K}6C1#j5JFHSG+oQyA&N-~;QQze7*WkfC<%D0!M!%Aqp7I8=xN*cp- z3Z_VW2e@JK8kcH`2N9zQ4_0VY3YQrxc$g|uf)-ug%-Fz(-(e$Ex`d$PX{eT!x6j-Z z_^T$Dy-93}l;N#K^nXtWp7hljD+dR|t8OjLE!F&2|MCYBaqjBFlq7a)k14D^E?v+~ z*y_ttZ_%ksS$GsFuxyW8f|5|UvAnx#jtlhQu<1Mu%hgtFr~jt(*E0Sr8f-wJ%D5LD~k*-Ld!Jw*tF3n<|tW%oou!oyVe%ZSgSMsZIug6ds&wp-`Ar!+{+ zFwyR*7YQQ}Q-o|C9(34rQ$lS)4&llNKf2Ro5QJPEUD=?p+UVsJR_}ZJvmsboMMtTG zB}z1moGNVMzC~EwTN(R-g^F7T-&gj6>2YhkS>D|mZ`|4196u_z9tPF(tG9mxsA`iO diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/README.md b/vendor/github.com/ncruces/go-sqlite3/vfs/README.md index 354f8bf33..4e987ce3f 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/README.md +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/README.md @@ -48,11 +48,6 @@ On Unix, this package may use `mmap` to implement [shared-memory for the WAL-index](https://sqlite.org/wal.html#implementation_of_shared_memory_for_the_wal_index), like SQLite. -With [BSD locks](https://man.freebsd.org/cgi/man.cgi?query=flock&sektion=2) -a WAL database can only be accessed by a single proccess. -Other processes that attempt to access a database locked with BSD locks, -will fail with the [`SQLITE_PROTOCOL`](https://sqlite.org/rescode.html#protocol) error code. - On Windows, this package may use `MapViewOfFile`, like SQLite. You can also opt into a cross-platform, in-process, memory sharing implementation diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go b/vendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go index fa13ef3ae..4f6fadef4 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/os_bsd.go @@ -9,11 +9,11 @@ import ( ) func osGetSharedLock(file *os.File) _ErrorCode { - return osLock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK) + return osFlock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK) } func osGetReservedLock(file *os.File) _ErrorCode { - rc := osLock(file, unix.LOCK_EX|unix.LOCK_NB, _IOERR_LOCK) + rc := osFlock(file, unix.LOCK_EX|unix.LOCK_NB, _IOERR_LOCK) if rc == _BUSY { // The documentation states that a lock is upgraded by // releasing the previous lock, then acquiring the new lock. @@ -37,7 +37,7 @@ func osGetExclusiveLock(file *os.File, state *LockLevel) _ErrorCode { } func osDowngradeLock(file *os.File, _ LockLevel) _ErrorCode { - rc := osLock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK) + rc := osFlock(file, unix.LOCK_SH|unix.LOCK_NB, _IOERR_RDLOCK) if rc == _BUSY { // The documentation states that a lock is downgraded by // releasing the previous lock then acquiring the new lock. @@ -66,7 +66,36 @@ func osCheckReservedLock(file *os.File) (bool, _ErrorCode) { return lock == unix.F_WRLCK, rc } -func osLock(file *os.File, how int, def _ErrorCode) _ErrorCode { +func osFlock(file *os.File, how int, def _ErrorCode) _ErrorCode { err := unix.Flock(int(file.Fd()), how) return osLockErrorCode(err, def) } + +func osReadLock(file *os.File, start, len int64) _ErrorCode { + return osLock(file, unix.F_RDLCK, start, len, _IOERR_RDLOCK) +} + +func osWriteLock(file *os.File, start, len int64) _ErrorCode { + return osLock(file, unix.F_WRLCK, start, len, _IOERR_LOCK) +} + +func osLock(file *os.File, typ int16, start, len int64, def _ErrorCode) _ErrorCode { + err := unix.FcntlFlock(file.Fd(), unix.F_SETLK, &unix.Flock_t{ + Type: typ, + Start: start, + Len: len, + }) + return osLockErrorCode(err, def) +} + +func osUnlock(file *os.File, start, len int64) _ErrorCode { + err := unix.FcntlFlock(file.Fd(), unix.F_SETLK, &unix.Flock_t{ + Type: unix.F_UNLCK, + Start: start, + Len: len, + }) + if err != nil { + return _IOERR_UNLOCK + } + return _OK +} diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go b/vendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go index b00a1865b..7a9c38897 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/os_dotlk.go @@ -7,6 +7,8 @@ import ( "io/fs" "os" "sync" + + "github.com/ncruces/go-sqlite3/internal/dotlk" ) var ( @@ -28,12 +30,10 @@ func osGetSharedLock(file *os.File) _ErrorCode { name := file.Name() locker := vfsDotLocks[name] if locker == nil { - f, err := os.OpenFile(name+".lock", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) - f.Close() - if errors.Is(err, fs.ErrExist) { - return _BUSY // Another process has the lock. - } - if err != nil { + if err := dotlk.TryLock(name + ".lock"); err != nil { + if errors.Is(err, fs.ErrExist) { + return _BUSY // Another process has the lock. + } return _IOERR_LOCK } locker = &vfsDotLocker{} @@ -114,8 +114,7 @@ func osReleaseLock(file *os.File, state LockLevel) _ErrorCode { } if locker.shared == 1 { - err := os.Remove(name + ".lock") - if err != nil && !errors.Is(err, fs.ErrNotExist) { + if err := dotlk.Unlock(name + ".lock"); err != nil { return _IOERR_UNLOCK } delete(vfsDotLocks, name) diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go index 8e7f27084..10d6dbf61 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_bsd.go @@ -4,7 +4,9 @@ package vfs import ( "context" + "errors" "io" + "io/fs" "os" "sync" @@ -71,23 +73,21 @@ func (s *vfsShm) shmOpen() _ErrorCode { return _OK } - // Always open file read-write, as it will be shared. - f, err := os.OpenFile(s.path, - os.O_RDWR|os.O_CREATE|_O_NOFOLLOW, 0666) - if err != nil { - return _CANTOPEN - } - // Closes file if it's not nil. + var f *os.File + // Close file on error. + // Keep this here to avoid confusing checklocks. defer func() { f.Close() }() - fi, err := f.Stat() - if err != nil { - return _IOERR_FSTAT - } - vfsShmListMtx.Lock() defer vfsShmListMtx.Unlock() + // Stat file without opening it. + // Closing it would release all POSIX locks on it. + fi, err := os.Stat(s.path) + if err != nil && !errors.Is(err, fs.ErrNotExist) { + return _IOERR_FSTAT + } + // Find a shared file, increase the reference count. for _, g := range vfsShmList { if g != nil && os.SameFile(fi, g.info) { @@ -97,13 +97,33 @@ func (s *vfsShm) shmOpen() _ErrorCode { } } - // Lock and truncate the file. - // The lock is only released by closing the file. - if rc := osLock(f, unix.LOCK_EX|unix.LOCK_NB, _IOERR_LOCK); rc != _OK { + // Always open file read-write, as it will be shared. + f, err = os.OpenFile(s.path, + os.O_RDWR|os.O_CREATE|_O_NOFOLLOW, 0666) + if err != nil { + return _CANTOPEN + } + + // Dead man's switch. + if lock, rc := osTestLock(f, _SHM_DMS, 1); rc != _OK { + return _IOERR_LOCK + } else if lock == unix.F_WRLCK { + return _BUSY + } else if lock == unix.F_UNLCK { + if rc := osWriteLock(f, _SHM_DMS, 1); rc != _OK { + return rc + } + if err := f.Truncate(0); err != nil { + return _IOERR_SHMOPEN + } + } + if rc := osReadLock(f, _SHM_DMS, 1); rc != _OK { return rc } - if err := f.Truncate(0); err != nil { - return _IOERR_SHMOPEN + + fi, err = f.Stat() + if err != nil { + return _IOERR_FSTAT } // Add the new shared file. @@ -157,7 +177,30 @@ func (s *vfsShm) shmMap(ctx context.Context, mod api.Module, id, size int32, ext func (s *vfsShm) shmLock(offset, n int32, flags _ShmFlag) _ErrorCode { s.Lock() defer s.Unlock() - return s.shmMemLock(offset, n, flags) + + // Check if we could obtain/release the lock locally. + rc := s.shmMemLock(offset, n, flags) + if rc != _OK { + return rc + } + + // Obtain/release the appropriate file lock. + switch { + case flags&_SHM_UNLOCK != 0: + return osUnlock(s.File, _SHM_BASE+int64(offset), int64(n)) + case flags&_SHM_SHARED != 0: + rc = osReadLock(s.File, _SHM_BASE+int64(offset), int64(n)) + case flags&_SHM_EXCLUSIVE != 0: + rc = osWriteLock(s.File, _SHM_BASE+int64(offset), int64(n)) + default: + panic(util.AssertErr()) + } + + // Release the local lock. + if rc != _OK { + s.shmMemLock(offset, n, flags^(_SHM_UNLOCK|_SHM_LOCK)) + } + return rc } func (s *vfsShm) shmUnmap(delete bool) { diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go index e302db7e6..17fefe562 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/shm_dotlk.go @@ -6,11 +6,11 @@ import ( "context" "errors" "io/fs" - "os" "sync" "github.com/tetratelabs/wazero/api" + "github.com/ncruces/go-sqlite3/internal/dotlk" "github.com/ncruces/go-sqlite3/internal/util" ) @@ -58,8 +58,7 @@ func (s *vfsShm) Close() error { return nil } - err := os.Remove(s.path) - if err != nil && !errors.Is(err, fs.ErrNotExist) { + if err := dotlk.Unlock(s.path); err != nil { return _IOERR_UNLOCK } delete(vfsShmList, s.path) @@ -82,9 +81,8 @@ func (s *vfsShm) shmOpen() _ErrorCode { return _OK } - // Create a directory on disk to ensure only this process - // uses this path to register a shared memory. - err := os.Mkdir(s.path, 0777) + // Dead man's switch. + err := dotlk.LockShm(s.path) if errors.Is(err, fs.ErrExist) { return _BUSY } diff --git a/vendor/modules.txt b/vendor/modules.txt index bffe1090e..fbb9ddfbc 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -520,12 +520,13 @@ github.com/modern-go/reflect2 # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 ## explicit github.com/munnerz/goautoneg -# github.com/ncruces/go-sqlite3 v0.21.1 +# github.com/ncruces/go-sqlite3 v0.21.2 ## explicit; go 1.21 github.com/ncruces/go-sqlite3 github.com/ncruces/go-sqlite3/driver github.com/ncruces/go-sqlite3/embed github.com/ncruces/go-sqlite3/internal/alloc +github.com/ncruces/go-sqlite3/internal/dotlk github.com/ncruces/go-sqlite3/internal/util github.com/ncruces/go-sqlite3/util/osutil github.com/ncruces/go-sqlite3/util/sql3util