Skip to content

CI: don't kill JuiceFS mounts when restarting the TiDB playground - #7487

Merged
jiefenghuang merged 2 commits into
mainfrom
agents/analyze-issue-7458-root-cause
Sep 2, 2026
Merged

jiefenghuang merged 2 commits into
mainfrom
agents/analyze-issue-7458-root-cause

Conversation

@jiefenghuang

Copy link
Copy Markdown
Contributor

Problem

The scheduled dump_load (tidb) job timed out in Test Load & Dump with Json Fast Mode (three runs). It hung on the very first line of prepare_test:

19:12:55  + [[ ! -f /jfs/.config ]]
19:42:50  ##[error]The action ... has timed out after 30 minutes.

while /var/log/juicefs.log filled with a restart storm:

juicefs[15812] <FATAL>: database is not formatted, please run `juicefs format ...` first
juicefs[6706]  <ERROR>: mount process 15812: exit status 1, will restart in 1 second

Root cause

Three defects compose (verified against run 32660109543, job 97244858931):

1. kill_tiup_playground SIGKILLed the running mount. It reaped ports with lsof -ti tcp:$port, but lsof -i tcp:PORT matches clients of that port too, not just listeners. A JuiceFS mount holds MySQL connections to TiDB on 4000, so it went down with the server:

++ lsof -ti tcp:4000
+ pids='3958
6717'
+ kill -9 3958 6717

3958 is the old tidb-server; 6717 is the /jfs mount worker (child of supervisor 6706, mounted at 19:12:08).

2. install_tidb had no reuse guard. install_tikv returns early when the cluster is already healthy; install_tidb did not, so it rebuilt the playground on every step and tiup clean --all wiped the metadata of the still-mounted volume — hence database is not formatted. This is why only the tidb matrix entry failed.

3. The hang itself. The supervisor holds a dup of the /dev/fuse fd, so when the worker is killed the FUSE connection is never aborted: /jfs neither returns ENOTCONN nor unmounts, and every syscall blocks. umount_jfs began with [[ ! -f "$mp/.config" ]] — a stat() served by the dead daemon — so the job wedged there with no timeout.

Contributing: dump_load.sh ran start_meta_engine before any cleanup, and its EXIT trap only echoed the seed, so the Binary step routinely left /jfs mounted across the engine swap.

Changes

  • kill_tiup_playground filters to listening sockets and verifies ownership before killing (/proc/<pid>/exe under the tiup home, falling back to the process name). Spared listeners are reported. Genuine orphaned pd/tikv/tidb servers are still reaped, so the original tiup#2057 workaround keeps working.
  • install_tidb reuses a healthy playground, mirroring install_tikv.
  • umount_jfs decides from the mount table instead of reading through the mount, bounds juicefs status, and falls back to the process table when the given meta URL doesn't know the mount — /jfs2 is used by both $META_URL2 and sqlite3://test2.db, so the session lookup can legitimately miss and the pid must still be waited on.
  • dump_load.sh drops stale mounts before start_meta_engine replaces the engine (the old engine is still up there, so sessions resolve and processes are reaped cleanly) and unmounts on exit.

timeout is GNU coreutils and absent from a stock macOS runner (test-mac/mac_commands.sh sources common.sh), so run_with_timeout falls back to a watchdog. Notably not perl's alarm+exec: the Go runtime installs its own SIGALRM handler and silently ignores the signal, so it would never interrupt ./juicefs — measured 3s timeout vs. 20s actual runtime, exit 0.

Testing

CI-only shell changes, so no Go test target applies. Validated with a harness covering 22 cases, all passing:

  • The bug reproduces and is fixed: unfiltered lsof returns both server and client pids; with -sTCP:LISTEN the client is excluded and survives kill_tiup_playground.
  • A real playground component listening on the same port is still killed (guards against over-correcting).
  • is_tiup_component accepts both branches for genuine components and rejects juicefs/python3/mysqld/dockerd.
  • is_mounted against the real mount table, including /jfs vs /jfs2 prefix collisions.
  • run_with_timeout aborts a Go binary in the no-coreutils path and passes through stdout/exit status.
  • The process-table fallback finds the owning pid, matches the mount point exactly, and does not mistake juicefs umount <mp> for the daemon.

bash -n passes on all three files; shellcheck -S error reports no new findings.

Out of scope

The client-side defect remains: launchMount's restart loop is effectively unbounded (its give-up guard only covers the first 10s after initial launch), and because the supervisor pins the FUSE fd, a mount whose metadata engine is destroyed hangs indefinitely instead of failing fast with ENOTCONN. That affects any such scenario, not just CI, and is better addressed separately with its own regression test.

Fixes #7458

The scheduled dump_load (tidb) job hung for 30 minutes in the Json Fast
Mode step, blocked on the first `.config` probe of prepare_test.

kill_tiup_playground reaped ports with `lsof -ti tcp:$port`, which also
reports *clients* of that port, not just listeners. A running JuiceFS
mount keeps MySQL connections to TiDB on 4000, so it was SIGKILLed
together with the old tidb-server. Unlike install_tikv, install_tidb had
no "already healthy" guard, so it rebuilt the playground on every step
and `tiup clean --all` wiped the metadata of the still-mounted volume.
The mount supervisor then restarted its children forever with "database
is not formatted", and since it holds a dup of the /dev/fuse fd the FUSE
connection was never aborted, leaving /jfs blocked on every syscall.
umount_jfs started with `[[ ! -f "$mp/.config" ]]`, a stat() served by
the dead daemon, so the job wedged there until the step timed out.

  * kill_tiup_playground now only considers listening sockets and only
    kills a listener that really belongs to the playground, reporting
    the ones it spares. Orphaned pd/tikv/tidb servers are still reaped.
  * install_tidb reuses a healthy playground, mirroring install_tikv.
  * umount_jfs decides via the mount table instead of reading a file
    through the mount, bounds `juicefs status`, and falls back to the
    process table when the given meta URL does not know the mount, so a
    mount point that is shared by two volumes is still reaped.
  * dump_load.sh drops stale mounts before start_meta_engine replaces
    the engine, and unmounts on exit so nothing survives into the next
    step.

`timeout` is absent from a stock macOS runner, so run_with_timeout falls
back to a watchdog rather than perl's alarm: the Go runtime installs its
own SIGALRM handler and silently ignores the signal, which would never
interrupt ./juicefs.

Fixes #7458
@jiefenghuang
jiefenghuang requested a review from zxh326 September 2, 2026 04:02
Some command tests intentionally remount a volume on the same path after
changing its configuration. The metadata status then contains multiple
sessions for that mount point.

Restore the original behavior of unmounting once per session while still
performing one unmount when session discovery fails. Otherwise only the
topmost mount is detached and the first supervisor remains alive until the
60-second cleanup timeout.
@jiefenghuang
jiefenghuang merged commit 453b82c into main Sep 2, 2026
22 checks passed
@jiefenghuang
jiefenghuang deleted the agents/analyze-issue-7458-root-cause branch September 2, 2026 06:01
liu1700 added a commit to plori-ai/juicefs that referenced this pull request Sep 7, 2026
Seventeen upstream commits since merge base 537ed54 (2026-08-27):

  4cbf971 cmd/mount: skip the oom_score_adj adjustment inside a container (juicedata#7467)
  81095bc tools/lance-resolver: add standalone Lance dataset resolver for warmup (juicedata#7399)
  a5bbfd3 feat: add guid-mode configuration for UID/GID generation in Hadoop SDK (juicedata#7362)
  a23344e ai: remove backport review (juicedata#7485)
  55f3813 sdk: fix python sdk ctypes ABI widths (juicedata#7486)
  453b82c CI: don't kill JuiceFS mounts when restarting the TiDB playground (juicedata#7487)
  2782ee2 ci: wait for the block to be cached before evicting it in TestWarmup (juicedata#7488)
  888ec4d gateway: prevent object commits from recreating deleted buckets (juicedata#7492)
  f2f31b6 meta/tkv: prevent quota usage from being overwritten (juicedata#7494)
  4da0bed utils: avoid racing callback results in WithTimeout (juicedata#7503)
  0e5cb0c chunk: don't let an abandoned fetch turn a failed read into a success (juicedata#7500)
  c9a67b2 store: prevent page overwrite when loadRange falls back to full read (juicedata#7509)
  e95d2d5 improve AGENTS.md (juicedata#7518)
  c20d839 object: honor context cancellation in Get (juicedata#7512)
  00f05c9 meta: prevent timeout callbacks from overwriting caller state in stat and getattr (juicedata#7516)
  43aa500 chunk: synchronize staging cleanup after timeout (juicedata#7517)
  482a0c4 mount: isolate results from timed-out callbacks (juicedata#7519)

Conflicts resolved, both sides kept:

pkg/chunk/cached_store.go, wSlice.upload. Upstream 43aa500 replaced the
plain bool `stageFailed` with an atomic `stageState` tri-state so a stage that
finishes after the PutTimeout removes its own file instead of racing the
caller. The fork had added `&& !s.store.stagingBacklogFull()` to the writeback
guard (PLO-383, the backlog cap) plus the `stagingPath`/`stageFailed`
declarations upstream deleted. The resolution keeps the fork's guard on the
`if` and takes upstream's whole stageState body, dropping the two declarations
upstream superseded. `stagingBacklogFull` returns false at a zero cap, so
upstream's new test still reaches the staging path.

pkg/chunk/cached_store_test.go. Both sides appended tests to the end of the
file. Upstream 0e5cb0c added lateBody, lateStore and
TestReadAtNeverReportsSuccessWithUnfilledBuffer; the fork had added
TestUploadPublishesThePlainBlockToTheCache (PLO-414). Both are kept.

.github/scripts/start_meta_engine.sh, two hunks. Upstream 453b82c added
is_tiup_component so kill_tiup_playground signals only playground processes,
and gave install_tidb a reuse guard so a healthy cluster is not torn down under
a live JuiceFS mount (upstream juicedata#7458). The fork had added tikv_ready (probe PD
directly instead of trusting tcli) and stop_tiup_playground, and made
install_tidb tear down a half-started playground before retrying. The
resolution keeps all four functions, and install_tidb now uses upstream's
health guard with the fork's bounded mysql call, followed by the fork's
teardown only on the unhealthy path.

One resolution git did not flag. Upstream's two new pkg/chunk tests call
object.CreateStorage("mem", ...), and the release profile registers only `s3`
and `file` (pkg/object/register_plori.go), so
TestWritebackStageTimeoutRemovesLateStage failed at its require.NoError under
the release tag set. Both tests now use the fork's existing newTestStorage
helper, which resolves to `mem` on the default build and `file` under the
plori tag.

Behaviour note: upstream 4cbf971 skips AdjustOOMKiller when
JFS_INSIDE_CONTAINER=1. Nothing in this fork or its images sets that variable,
so the CSI mounts keep the current oom_score_adj behaviour.

Verification on Go 1.25.10. The base toolchain on this machine is go1.22.2,
so GOTOOLCHAIN=auto selects the version go.mod's `go` directive names; CI
pins 1.25.13 through .go-version and plori.yml, the same minor and three
patch releases newer.

  go build ./... on the default build and with the release tag set: pass
  go vet on cmd, pkg/chunk, pkg/fs, pkg/gateway, pkg/meta, pkg/object,
    pkg/plori, pkg/utils, pkg/vfs, tools: pass
  make test.plori.security: pass
  test.plori.meta (release tags, Redis on 127.0.0.1:6379): ok 86.6s
  test.plori.unit (release tags, chunk/vfs/plori, the cmd credential subset,
    and -race ./pkg/plori/...): all ok
  test.plori.upstream (default build, chunk/vfs/fs/object/mountspec, and
    -race ./pkg/object/...): all ok

./pkg/meta on the default build still aborts at TestLoadDump, whose tikv row
reaches logger.Fatalf in meta.NewClient with no PD listening. origin/main fails
at the same point with the same message, and the Makefile documents why
./pkg/meta is excluded from test.plori.upstream. TestKeyDB and TestRedisCluster
skip themselves under SKIP_NON_CORE. No test that passed on origin/main fails
here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EVFUf4zhE7YjRZ8TSzDCM9
EngHabu added a commit to unionai/juicefs that referenced this pull request Sep 29, 2026
#41)

* docs: OOM recovery in Redis best practices (juicedata#7194)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* meta: fix openfiles cleanup goroutine leak on Shutdown (juicedata#7208)

* sync: fix --limit budget and extra-dst handling, clean up checkpoint on DeleteDst (juicedata#7195)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
Co-authored-by: Xuhui zhang <xuhui@juicedata.io>

* test: add io_uring test case (juicedata#7201)

* meta: fix compactChunk error log (juicedata#7198)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* chunk: support extensible footer in staging files (juicedata#7209)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* cmd: use a dedicated ServeMux to avoid exposing pprof/metrics (juicedata#7214)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* meta/dump: fix goroutine leaks (juicedata#7224)

* meta/kv: fix entries skipped by readdir during concurrent deletion (juicedata#7226)

* meta: fix progress bar goroutine leak (juicedata#7225)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* bump to 1.5.0-dev (juicedata#7228)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* docs: add s3 files comparison (en & zh) (juicedata#6973)

Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* meta: fix setgid strip ignoring CheckPermission and supplementary groups (juicedata#7232)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Xuyuchao-juice <xuyuchao.juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* ai: update agents.md (juicedata#7237)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* utils: show realtime speed in progress bar (juicedata#7233)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* pkg/meta: use text for changelog entries (juicedata#7242)

* sync: don't skip destination listing with --force-update and --delete-dst (juicedata#7229)

* cmd/sync: support symlink handling for external links in files-from (juicedata#7218)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* cmd/sync: update multipart upload progress on each read (juicedata#7227)

* sync: fail over between global traffic control and local bwlimit (juicedata#7219)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* cmd/mount: replace open() with stat() to check if the file exists. Th… (juicedata#7252)

* docs: update wording (juicedata#7253)

* sdk/java: support disabling PA-FX-FAST for Kerberos auth (juicedata#7245)

* test: make warmup cache check reliable (juicedata#7254)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: avoid cache manager disk usage mock race (juicedata#7256)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* CI: Retry tier storage class assertion after forced set (juicedata#7247)

* doc: update wording of command_reference.mdx (juicedata#7260)

* CI: make `rmr-test (mysql)` cleanup non-fatal in `rmfiles` workflow (juicedata#7259)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* fuse: fix stale size=0 in replyAttr TOCTOU race (juicedata#7238)

Signed-off-by: huangzhibin1 <huangzhibin1@xiaomi.com>
Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* cmd/config: confirm min client version bumps (juicedata#7244)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* ai: add explicit version compatibility review guidelines (juicedata#7270)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* cmd/fsck: fix unexpected object storage head errors (juicedata#7257)

* ai: add shared review skill (juicedata#7273)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore/ai: structure review skill output (juicedata#7274)

* cmd/sync: Hide sync credentials from worker command arguments (juicedata#7255)

* object/oss: fix missing crc protection for OSS objects (juicedata#7275)

* CI: fix apt install in docker file (juicedata#7282)

* cmd/config: add warning for lower minclientversion (juicedata#7285)

* object/oracle: Support OCI dedicated S3 endpoints (juicedata#7277)

* doc: update wording of zh_cn/en _common_options.mdx (juicedata#7292)

* CI: drop min-client-version downgrade test (juicedata#7294)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: zhijian <djx@juicedata.io>

* CI: increase timeout for coverage-report (main, it) job (juicedata#7284)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* ci: increase `Remove test dir` step timeout from 30 to 60 minutes (juicedata#7296)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* build: fix makefile (juicedata#7299)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* ci: add wait_mysql_ready function for improved readiness checks (juicedata#7300)

* object: Isolate runtime tier state from configured tiers (juicedata#7305)

* CI: add tier tag tests (juicedata#7306)

* cmd/webdav: handle nil file info in Stat method (juicedata#7319)

* docs: update adopters list (juicedata#7314)

* CI: Allow the state machine to recover from an empty fd set (juicedata#7322)

* docs: translate FoundationDB best practices into English (juicedata#7313)

Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* CI: use unique temp paths in test_gc_trash_slices to avoid Windows PermissionError (juicedata#7320)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* fs: correct symlink relative path resolution and add ELOOP errno hand… (juicedata#7309)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* meta: add sync option for badger metadata engine (juicedata#7324)

* ci: use distro fusermount3 for unprivileged tests (juicedata#7328)

* log: suppress unconfigured storage tier warning (juicedata#7329)

* build: add Windows ZIP release archive (juicedata#7330)

* docs: translate TiKV best practices into English (juicedata#7312)

Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* docs/reference: Update wording (juicedata#7337)

* cache: avoid selecting store twice in exist (juicedata#7345)

Signed-off-by: light-city <455954986@qq.com>

* object/sftp: fix sftp endpoint escape (juicedata#7347)

* Revert "object/sftp: fix sftp endpoint escape" (juicedata#7348)

* meta: redis session heartbeats collapse at scale due to global-key WATCH contention (juicedata#7336)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* ai: expand review skill requirements (juicedata#7350)

* cmd/sync: treat deferred deletion failures as warnings when --limit is exhausted (juicedata#7334)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* test: sync bundle paths after directory rename (juicedata#7349)

* CI: use setup-node in dump load workflows (juicedata#7352)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* CI: Add ut for winfsp readdir (juicedata#7355)

* meta/fdb: use snapshot read for simpleTxn (juicedata#7351)

Signed-off-by: swj <1186093704@qq.com>

* build: fix Java SDK cross-build and release failure handling (juicedata#7371)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* go-fuse: use the asynchronous Wait() to reclaim zombie processes (juicedata#7375)

* meta: speedup trash cleanup by parallel directory deletion (juicedata#7356)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* meta: fix volume usage stats leak in trash creation (juicedata#7369)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* meta: Fix redisLock.Flock. Register F_RDLCK in locked$ index for stale cleanup (juicedata#7340)

* ci: always upload vdbench output log (juicedata#7380)

* Revert "go-fuse: use the asynchronous Wait() to reclaim zombie processes" (juicedata#7379)

* build: isolate Go linker flags from environment (juicedata#7384)

* meta: fix races on the format (juicedata#7378)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

* meta: add streaming slice scan (juicedata#7387)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* deps: upgrade dependencies to fix multiple CVEs (juicedata#7377)

* meta: fix delete slice task lock (juicedata#7390)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* go-fuse: use the non-block waitpid() to reclaim zombie processes (juicedata#7391)

* object: add User-Agent header to all storage backends  (juicedata#7393)

Co-authored-by: heardbefore <troyliljedahl@mac.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor/cache: split disk_cache.go into separate files (juicedata#7365)

* cmd/sync: fix delayed deletes in checkpoint (juicedata#7394)

* refactor/cache: rename disk cache (juicedata#7404)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* ci: fix tikv env (juicedata#7412)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* meta/redis: batch load quotas to reduce round trips (juicedata#7405)

* object/sftp: fix endpoint parsing for path colons (juicedata#7406)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* cmd/gc: support external sort (juicedata#7230)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* mount: fix avoid interrupting requests during graceful shutdown (juicedata#7417)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* ci: use fast apt mirrors (juicedata#7416)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* CI: use native concurrency cancel outdata runs (juicedata#7421)

* ci: add release distribution check workflow (juicedata#7409)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: pin workflow Go version to go.mod (juicedata#7422)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: add a crash consistency test (juicedata#7400)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* object/file: reject object keys that escape the filestore root (juicedata#7425)

Co-authored-by: Gogs <gogs@fake.local>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* object/hdfs: sort resolved nameservice addresses for deterministic order (juicedata#7430)

* object: move shared S3 helpers out of nos3-gated s3.go (juicedata#7432)

* deps: bump tikv client-go to tidb-8.5 (juicedata#7410)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* ci: allow checking a release distribution tag manually (juicedata#7433)

* cmd/gc: wait slice deletions before scanning objects (juicedata#7424)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* ci: add target mode for release distribution checks (juicedata#7435)

* build: enable java sdk auto publish (juicedata#7436)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* meta/redis: check errInodes against redis.Nil in doGetDirStat (juicedata#7437)

* meta/backup: fix goroutine leak in metadata backup (juicedata#7445)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* warmup: support byte range warmup via --file flag (juicedata#7398)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* meta: skip flushing zero directory stats (juicedata#7415)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* docs: restore star history chart in READMEs (juicedata#7447)

* CI: add delayed deletes in checkpoint test (juicedata#7444)

* docs: add zerofs comparison (juicedata#7366)

Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* hadoop: skip kerberos authentication when server principal is not configured (juicedata#7454)

* sql: fix read-only transaction capability race (juicedata#7451)

* vfs: align ioctl flag permissions with the kernel (juicedata#7408)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* S3/gateway: fix DeleteObjects API wrongly delete sibling object named as bucket (juicedata#7428)

Signed-off-by: miyang <myang@juicedata.io>

* sql: claim delayed slice cleanup rows atomically (juicedata#7449)

* sql: preserve batch unlink state across retried SQL transactions (juicedata#7460)

* cmd/warmup: treat malformed range suffix as path (juicedata#7463)

* meta: check sticky permission before rename type mismatch (juicedata#7468)

* meta: serialize xattr updates with inode lifecycle operations (juicedata#7457)

* CI: fix sync MinIO gateway startup race (juicedata#7470)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* cmd/mount: skip the oom_score_adj adjustment inside a container (juicedata#7467)

* tools/lance-resolver: add standalone Lance dataset resolver for warmup (juicedata#7399)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* feat: add guid-mode configuration for UID/GID generation in Hadoop SDK (juicedata#7362)

Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>

* ai: remove backport review (juicedata#7485)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* sdk: fix python sdk ctypes ABI widths (juicedata#7486)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* CI: don't kill JuiceFS mounts when restarting the TiDB playground (juicedata#7487)

* ci: wait for the block to be cached before evicting it in TestWarmup (juicedata#7488)

* gateway: prevent object commits from recreating deleted buckets (juicedata#7492)

Signed-off-by: miyang <myang@juicedata.io>

* meta/tkv: prevent quota usage from being overwritten (juicedata#7494)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* utils: avoid racing callback results in WithTimeout (juicedata#7503)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chunk: don't let an abandoned fetch turn a failed read into a success (juicedata#7500)

Signed-off-by: lizhitao <lizhitao@stepfun.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* store: prevent page overwrite when loadRange falls back to full read (juicedata#7509)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* improve AGENTS.md (juicedata#7518)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* object: honor context cancellation in Get (juicedata#7512)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* meta: prevent timeout callbacks from overwriting caller state in stat and getattr (juicedata#7516)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* chunk: synchronize staging cleanup after timeout (juicedata#7517)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* mount: isolate results from timed-out callbacks (juicedata#7519)

Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* gateway: improve concurrency consistency for buckets and objects (juicedata#7493)

* sync: avoid excess bandwidth reservations for small objects (juicedata#7498)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* meta: dedupe repeated names in BatchUnlink (juicedata#7526)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* object: make findLen available without QingStor (juicedata#7528)

Co-authored-by: Edric Mo <codingpoeta@gmail.com>

* sql: verify exact edge identity on mutation to prevent lost updates (juicedata#7476)

* meta: rewind SQL changelog scans and include logs in backups (juicedata#7522)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* meta: record  batch clone changelog (juicedata#7524)

* sql: upgrade XORM (juicedata#7411)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* meta: reset trash decision on transaction retry (juicedata#7477)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* meta: record overwritten inode open state in MOVE changelog (juicedata#7531)

* CI: add minio delay test (juicedata#7529)

* CI: fix the MinIO image address (juicedata#7536)

Signed-off-by: miyang <myang@juicedata.io>

* chunk: restore metrics for range read timeouts (juicedata#7520)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* cmd: reject format writes from clients excluded by the version policy (juicedata#7533)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chunk: exit the fallback watchdog after switching to memory cache (juicedata#7505)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* feat(gateway): support If-None-Match wildcard (juicedata#7479)

* Revert "feat(gateway): support If-None-Match wildcard" (juicedata#7539)

* meta: rebuild counters from load binary backup records (juicedata#7538)

Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
Signed-off-by: jiefenghuang <jiefeng@juicedata.io>

* cmd/gateway: propagate temporary directory creation errors (juicedata#7540)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* meta: record source engine in binary backups (juicedata#7548)

* meta: tolerate duplicate Redis backup records (juicedata#7549)

* meta: include rdev in CREATE changelogs (juicedata#7553)

* meta: publish ACL cache entries after transaction commit (juicedata#7551)

* gateway: improve object concurrency consistency (juicedata#7559)

Signed-off-by: miyang <myang@juicedata.io>

* chunk: fix zstd decompression overwriting adjacent slices (juicedata#7556)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>

* meta: record open state in UNLINKBATCH changelog (juicedata#7550)

* deps: update minio to require signed x-amz headers (juicedata#7562)

* meta: skip missing ACL loads on cache hits (juicedata#7561)

* CI: remove unused windows minio (juicedata#7565)

Signed-off-by: miyang <myang@juicedata.io>

* remove flaky unknown inode stats test (juicedata#7566)

Signed-off-by: miyang <myang@juicedata.io>

* CI: tolerate policies and users left over from the previous test (juicedata#7567)

Signed-off-by: miyang <myang@juicedata.io>

* meta: improve changelog (juicedata#7564)

* test: wait for asynchronous slice deletion in compact test (juicedata#7568)

* meta: record the full attr in REPAIRDIR changelogs (juicedata#7569)

* meta: fix nlink of cloned directory without recounting (juicedata#7570)

* cmd/summary: support sorting entries by size/inodes/cost (juicedata#7552)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* object/nfs: check Mount error before using the target (juicedata#7573)

* meta: record the full gid list in CLONE changelogs (juicedata#7575)

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>

* meta: skip trash insert when rename overwrites a relinked hardlink (juicedata#7508)

Co-authored-by: Yuzhong Zhang <BetterAndBetterII@users.noreply.github.com>

* meta: reap detached trees that contain immutable files (juicedata#7407)

* metrics/tkv: export volume name to tikv metrics (juicedata#7480)

Signed-off-by: Changxin Miao <miaochangxin@step.ai>

* CI: ignore summary duration in dump/load benchmark (juicedata#7586)

* CI: fix pysdk failed (juicedata#7585)

Signed-off-by: miyang <myang@juicedata.io>

* CI: build pinned MinIO images from official release binaries (juicedata#7584)

Signed-off-by: miyang <myang@juicedata.io>

* CI: force version-limit recovery in config test (juicedata#7588)

* CI: account for SQL rewind in changelog tests (juicedata#7587)

* test(object): fix data race on err in multipart upload test (juicedata#7581)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

* test: build sftp tests only without the nosftp tag (juicedata#7580)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

* meta: gofmt slice_domain_test.go

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UNRny5RvDeXz8GiwNo7Lae
Signed-off-by: Haytham Abuelfutuh <haytham@union.ai>

* Build fixes after the upstream merge

- go.mod: restore upstream's lanrat/extsort => juicedata/extsort replace
  (lost in the conflict resolution; pkg/utils/extsort needs its API).
- go.mod: point go-fuse at unionai/go-fuse haytham/sync-juicedata-2026-09
  (bc1941e: juicedata's pinned line merged into union).
- cmd/slice_refs.go: ListSlices was replaced upstream by the streaming
  ScanSlices (juicedata#7387); collect slice ids through it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UNRny5RvDeXz8GiwNo7Lae
Signed-off-by: Haytham Abuelfutuh <haytham@union.ai>

* chunk: staging ledger test follows the diskCache rename (juicedata#7404)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UNRny5RvDeXz8GiwNo7Lae
Signed-off-by: Haytham Abuelfutuh <haytham@union.ai>

---------

Signed-off-by: Xuhui zhang <xuhui@juicedata.io>
Signed-off-by: jiefenghuang <jiefeng@juicedata.io>
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Signed-off-by: huangzhibin1 <huangzhibin1@xiaomi.com>
Signed-off-by: light-city <455954986@qq.com>
Signed-off-by: Changxin Miao <miaochangxin@step.ai>
Signed-off-by: swj <1186093704@qq.com>
Signed-off-by: miyang <myang@juicedata.io>
Signed-off-by: lizhitao <lizhitao@stepfun.com>
Signed-off-by: Haytham Abuelfutuh <haytham@union.ai>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jiefenghuang <jiefeng@juicedata.io>
Co-authored-by: Caitin <34535727+CaitinChen@users.noreply.github.com>
Co-authored-by: Injun Baeg <ij.baeg@navercorp.com>
Co-authored-by: zhijian <djx@juicedata.io>
Co-authored-by: Xuhui zhang <xuhui@juicedata.io>
Co-authored-by: Frice Xu <39143307+Xuyuchao-juice@users.noreply.github.com>
Co-authored-by: shunqi wang <shunqi1996@outlook.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
Co-authored-by: T-TRz879 <614560331@qq.com>
Co-authored-by: Joe Zhou <zhehui.zhou@outlook.com>
Co-authored-by: 刘政 <849230283@qq.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: 自然选择 <2145973003@qq.com>
Co-authored-by: Changxin Miao <mcx_221@foxmail.com>
Co-authored-by: YunhuiChen <67582932+YunhuiChen@users.noreply.github.com>
Co-authored-by: Rui Su <rsu@juicedata.io>
Co-authored-by: dutor <440396+dutor@users.noreply.github.com>
Co-authored-by: Francis <455954986@qq.com>
Co-authored-by: Changxin Miao <miaochangxin@step.ai>
Co-authored-by: joss <1186093704@qq.com>
Co-authored-by: nueks <nueks@naver.com>
Co-authored-by: prOOrc <prOOrc@users.noreply.github.com>
Co-authored-by: heardbefore <troyliljedahl@mac.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Gogs <gogs@fake.local>
Co-authored-by: sw-cho <66065293+sw-cho@users.noreply.github.com>
Co-authored-by: Edric Mo <codingpoeta@gmail.com>
Co-authored-by: cxljs <fukua95@gmail.com>
Co-authored-by: Elias <wings.wyang@gmail.com>
Co-authored-by: hiltonhe <hiltontao96@163.com>
Co-authored-by: kyungwan-nam <kw.nam@navercorp.com>
Co-authored-by: myangitzh <93580975+myangitzh@users.noreply.github.com>
Co-authored-by: myangitzh <myang@juicedata.io>
Co-authored-by: Zhitao Li <lizhitao@stepfun.com>
Co-authored-by: Qingke <103391551+qingketsing@users.noreply.github.com>
Co-authored-by: Yun Seongmin <ilcm96@gmail.com>
Co-authored-by: YR Chen <stevapple@icloud.com>
Co-authored-by: AlanJager <alanjager@outlook.com>
Co-authored-by: Yuzhong Zhang <141388234+BetterAndBetterII@users.noreply.github.com>
Co-authored-by: Yuzhong Zhang <BetterAndBetterII@users.noreply.github.com>
jiefenghuang added a commit to jiefenghuang/juicefs that referenced this pull request Oct 14, 2026
jiefenghuang added a commit to jiefenghuang/juicefs that referenced this pull request Oct 15, 2026
davies pushed a commit that referenced this pull request Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI: dump_load (tidb) hangs when a stale mount survives across workflow steps

2 participants