agentscope-ai / agentscope-ai/agentscope-java
[Bug]: LocalFilesystemPersonalAssistantExampleTest flaky JUnit @TempDir cleanup race with session-tree-mirror thread
- Lingua principale
- Java
- Stelle
- 5.6k
- Fork
- 1.3k
- Merge medio
- 4g 12h
- PR unite (30g)
- 77
Descrizione
**Describe the bug**
`LocalFilesystemPersonalAssistantExampleTest` (`agentscope-harness`, package `io.agentscope.harness.agent.example`) intermittently fails in CI with:
```
org.junit.platform.commons.JUnitException: Failed to close extension context
Caused by: java.io.IOException: Failed to delete temp directory /tmp/junit-... The following paths could not be deleted (see suppressed exceptions for details): , agents, agents/my-local-assistant, agents/my-local-assistant/sessions
Suppressed: java.nio.file.DirectoryNotEmptyException: ...
```
This happens during JUnit's `@TempDir` teardown: it walks the temp directory tree to delete it, but a background thread named **`session-tree-mirror`** is still writing files into that same directory at teardown time, so the delete hits `DirectoryNotEmptyException` mid-walk. It's a teardown race between the test's async session-mirroring thread and JUnit's directory cleanup, not a logic bug in the test's assertions.
**To Reproduce**
Not reliably reproducible on demand — it's timing/scheduler dependent. Observed across multiple unrelated PRs in CI:
- PR #2113 (unrelated `OpenAITextEmbedding` change): failed on `ubuntu-latest` — [run](https://github.com/agentscope-ai/agentscope-java/actions/runs/29156943370/job/86555498510), method `localFilesystem_directDiskAccessFromHostProcess`.
- PR #2248 (unrelated `MemoryMaintenanceMiddleware` change): failed on `windows-latest` — [run](https://github.com/agentscope-ai/agentscope-java/actions/runs/29481707253/job/87566739340), method `localFilesystem_workspaceIsNotPartitionedByUserOrSession`. A CI run immediately prior on the exact same code passed cleanly.
Same test class, different failing methods, different OS, inconsistent pass/fail on identical code — consistent with a timing race rather than a deterministic bug.
**Expected behavior**
The test suite should not intermittently fail due to teardown races. Either:
- The `session-tree-mirror` background thread should be joined/stopped before the test method returns (so nothing writes to the temp dir during `@TempDir` cleanup), or
- The test should use a teardown mechanism that tolerates a still-active writer (e.g. retry-on-`DirectoryNotEmptyException` deletion, or an explicit shutdown hook for the mirror thread in an `@AfterEach`).
**Error messages**
```
org.junit.platform.commons.JUnitException: Failed to close extension context
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.io.IOException: Failed to delete temp directory /tmp/junit-5345473238498555742. The following paths could not be deleted (see suppressed exceptions for details): , agents, agents/my-local-assistant, agents/my-local-assistant/sessions
Suppressed: java.nio.file.DirectoryNotEmptyException: /tmp/junit-5345473238498555742
at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:246)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2828)
```
**Environment (please complete the following information):**
- AgentScope-Java Version: 2.0.1-SNAPSHOT
- Java Version: 21
- OS: both observed — ubuntu-latest and windows-latest (GitHub Actions runners)
**Additional context**
This is a CI-infra flake, not tied to any particular feature change — it has now surfaced on two unrelated PRs touching completely different modules (`agentscope-extensions-rag-simple` and `agentscope-harness` middleware). Filing separately so it can be tracked and fixed independently rather than blocking unrelated PRs.
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.