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 摘要。