agentscope-ai / agentscope-ai/agentscope-java

[Bug]: LocalFilesystemPersonalAssistantExampleTest flaky JUnit @TempDir cleanup race with session-tree-mirror thread

未關閉
#2,251 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
area/harness bug
主要語言
Java
星號
5.6k
分支
1.3k
平均合併
4 天 12 小時
30 天內合併 PR
77

描述

**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.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。