This is an automated email from the ASF dual-hosted git repository. He-Pin pushed a commit to branch feat-virtualize-dispatcher-v2 in repository https://gitbox.apache.org/repos/asf/pekko.git
commit 0794a191eb6e624697d8e00ff3356f5c88bf4f54 Author: è鞣 <[email protected]> AuthorDate: Tue Apr 21 18:17:21 2026 +0800 chore: remove unrelated local files from branch Motivation: clean up accidental untracked files (.claude, .jvmopts, design docs) that should not be in PR Modification: remove .claude/settings.local.json, .jvmopts, .jvmopts-ci, and design docs Result: branch now contains only intended virtualize dispatcher changes Co-authored-by: Copilot <[email protected]> --- .claude/settings.local.json | 14 -- .jvmopts | 15 -- .jvmopts-ci | 15 -- ARCHITECTURE_DECISION_RECORD.md | 280 ----------------------- DESIGN_DELIVERY_SUMMARY.txt | 267 ---------------------- DESIGN_SUMMARY.md | 267 ---------------------- DESIGN_VIRTUALIZE_SOLUTION.md | 492 ---------------------------------------- IMPLEMENTATION_CHECKLIST.md | 382 ------------------------------- README_DESIGN_PACKAGE.md | 285 ----------------------- 9 files changed, 2017 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index 50ba628bec..0000000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(gh pr *)", - "Bash(gh api *)", - "Bash(git fetch *)", - "Bash(git checkout *)", - "Bash(git remote *)", - "Bash(grep -q '^fork$')", - "Bash(sbt -error 'stream/Compile/compile')", - "Bash(sbt -warn \"stream/Test/compile\")" - ] - } -} diff --git a/.jvmopts b/.jvmopts deleted file mode 100644 index d984212d94..0000000000 --- a/.jvmopts +++ /dev/null @@ -1,15 +0,0 @@ -# This is used to configure the sbt instance in CI - --XX:+UseG1GC --Xms4G --Xmx4G --Xss2M --XX:+AlwaysActAsServerClassMachine --XX:ReservedCodeCacheSize=256m --XX:MaxGCPauseMillis=750 --XX:+UseCompressedOops --XX:MetaspaceSize=512M --XX:-ClassUnloadingWithConcurrentMark --Djava.security.egd=file:/dev/./urandom --Dpekko.ci-server=true --Dio.netty.leakDetection.level=PARANOID diff --git a/.jvmopts-ci b/.jvmopts-ci deleted file mode 100644 index d984212d94..0000000000 --- a/.jvmopts-ci +++ /dev/null @@ -1,15 +0,0 @@ -# This is used to configure the sbt instance in CI - --XX:+UseG1GC --Xms4G --Xmx4G --Xss2M --XX:+AlwaysActAsServerClassMachine --XX:ReservedCodeCacheSize=256m --XX:MaxGCPauseMillis=750 --XX:+UseCompressedOops --XX:MetaspaceSize=512M --XX:-ClassUnloadingWithConcurrentMark --Djava.security.egd=file:/dev/./urandom --Dpekko.ci-server=true --Dio.netty.leakDetection.level=PARANOID diff --git a/ARCHITECTURE_DECISION_RECORD.md b/ARCHITECTURE_DECISION_RECORD.md deleted file mode 100644 index f4f328c6ed..0000000000 --- a/ARCHITECTURE_DECISION_RECORD.md +++ /dev/null @@ -1,280 +0,0 @@ -# ðïž æ¶æå³çè®°åœ (ADR) - -**æ é¢**: Apache Pekko èæçº¿çšæ¡ä»¶åå¯ç𿹿¡ -**äœè **: Copilot Chief Architect -**æ¥æ**: 2026-04-20 -**ç¶æ**: â å·²é纳讟计 -**äŒå 级**: P0 (å ³é®) - ---- - -## ð¯ èæ¯ - -### é®é¢éè¿° -åœå PR #2872 åš stream-testkit ç reference.conf äžæ æ¡ä»¶å¯çšäº `virtualize=on`ïŒå¯ŒèŽä»¥äžé®é¢ïŒ - -1. **å Œå®¹æ§ç Žè£**: JDK < 21 ç¯å¢äŒå èæçº¿çšäžæ¯æè倱莥 -2. **é 眮混乱**: æ æ³åºååŒåç¯å¢å nightly build ç¯å¢ -3. **CI/CD 猺é·**: nightly-builds.yml æªé çœ®çæ¬åçèæçº¿çšå¯çšçç¥ -4. **é£é©äŒ æ**: èæçº¿çšæ§èœæ¹è¿ä» åš JDK 21+ äžææïŒäœé 眮对ææç¯å¢åºçš - -### ç®æ -讟计äžäžª**åå±é çœ®æ¹æ¡**ïŒå®ç°ïŒ -- â JDK çæ¬å®å 𿣿µ -- â æ¡ä»¶åèæçº¿çšå¯çš -- â å®å šååå Œå®¹ -- â æž æ°çé çœ®ç»§æ¿ -- â æäºç»Žæ€åæ©å± - ---- - -## ð¡ å³ç - -### æ žå¿çç¥: äžå±åçŠ»æ¶æ - -``` -âââââââââââââââââââââââââââââââââââââââââââââââââââ -â Layer 1: è¿è¡æ¶æ£æµ (GitHub Actions) â -â ââ æ£æµ JDK çæ¬ â -â ââ è®Ÿçœ®çæ¬çžå ³ççŒè¯åæ° â -â ââ äŒ éèæçº¿çšå¯çšä¿¡å· â -ââââââââââââââââ¬âââââââââââââââââââââââââââââââââ - â -ââââââââââââââââŒâââââââââââââââââââââââââââââââââ -â Layer 2: æ¡ä»¶é 眮管ç (HOCON) â -â ââ é»è®€é 眮 (reference.conf) â -â â ââ virtualize = off (å®å šé»è®€) â -â ââ æ¡ä»¶é 眮 (nightly-reference.conf) â -â ââ include reference.conf â -â ââ override virtualize = on â -ââââââââââââââââ¬âââââââââââââââââââââââââââââââââ - â -ââââââââââââââââŒâââââââââââââââââââââââââââââââââ -â Layer 3: è¿è¡æ¶æ¯æ (JDK) â -â ââ VirtualThreadSupport.isSupported â -â â ââ JDK 21+: true, else: false â -â ââ èªåšé级 (JDK < 21 応ç¥èæçº¿çšé 眮) â -âââââââââââââââââââââââââââââââââââââââââââââââââââ -``` - -### å ³é®å³çç¹ - -#### å³ç 1: é»è®€é 眮åºä¿æçŠçš -**é项 A**: `virtualize = on` (åœåPR) -â **é®é¢**: JDK 17 ç¯å¢å€±èŽ¥ - -**é项 B**: `virtualize = off` (é纳) â -â **äŒå¿**: å®å šé»è®€ïŒbroad compatibility - -#### å³ç 2: èæçº¿çšå¯çšæ¹åŒ -**é项 A**: ä¿®æ¹å šå± reference.conf -â **é®é¢**: æ æ³åºåç¯å¢ - -**é项 B**: å建ç¯å¢äžçšé 眮æä»¶ (é纳) â -â **äŒå¿**: æž æ°çè莣å犻 - -#### å³ç 3: JDK çæ¬æ£æµ -**é项 A**: 硬çŒç åš build.sbt -â **é®é¢**: æå»ºæ¶æ£æµïŒçŒºä¹çµæŽ»æ§ - -**é项 B**: åš GitHub Actions äžæ£æµ (é纳) â -â **äŒå¿**: è¿è¡æ¶åšæé çœ®ïŒæäºç»Žæ€ - ---- - -## ð 诊ç»è®Ÿè®¡ - -### æä»¶ç»æ - -``` -stream-testkit/src/test/resources/ -âââ reference.conf # é»è®€é 眮 (virtualize=off) -âââ nightly-reference.conf # nightlyäžçš (virtualize=on for JDK 21+) - -.github/workflows/ -âââ nightly-builds.yml # çæ¬åå¯çšçç¥ - -project/ -âââ JdkOptions.scala # çæ¬æ£æµèŸ å©åœæ° -``` - -### é 眮继æ¿å ³ç³» - -``` -reference.conf (åºç¡é 眮) - â - â include - â -nightly-reference.conf (æ¡ä»¶èŠç) - ââ stream-testkit.fork-join-executor.virtualize = on - ââ (ä» åš JDK 21+ å 蜜) -``` - -### ç¯å¢åéæµèœ¬ - -``` -GitHub Actions - ââ æ£æµ JDK çæ¬ - ââ è¥ JDK >= 21 - â ââ 讟眮 VIRTUALIZE_OPTS="-D...virtualize=on" - ââ è¥ JDK < 21 - ââ 讟眮 VIRTUALIZE_OPTS="" - â - sbt åœä»€è¡åæ° - â - -Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on - â - è¿è¡æ¶é 眮èŠç -``` - ---- - -## â é纳æ å - -### å¿ é¡»æ»¡è¶³çæ¡ä»¶ - -- [x] **JDK 17 å Œå®¹æ§**: èæçº¿çšé 眮被応ç¥ïŒæµè¯æ£åžžè¿è¡ -- [x] **JDK 21+ äŒå**: èæçº¿çšå¯çšïŒæ§èœæ¹å -- [x] **é çœ®æž æ°æ§**: äžåç¯å¢äœ¿çšæç¡®çé 眮æä»¶ -- [x] **ååå Œå®¹**: ç°æä»£ç åèæ¬æ éä¿®æ¹ -- [x] **å¯ç»Žæ€æ§**: é çœ®ç»ææäºçè§£åæ©å± -- [x] **CI/CD éæ**: GitHub Actions èœå€æ£ç¡®æ¡ä»¶åå¯çš - -### é£é©çŒè§£ - -| é£é© | çŒè§£æªæœ | éªè¯æ¹æ³ | -|------|--------|--------| -| JDK 17 倱莥 | é»è®€ virtualize=off | åš JDK 17 äžæµè¯ | -| é 眮å 蜜é误 | äœ¿çš include æä»€ | æ£æ¥é 眮å 蜜æ¥å¿ | -| çæ¬æ£æµé误 | GitHub Actions åæ¯æ£æµ | CI æ¥å¿å®¡æ¥ | -| æ§èœåé | èæçº¿çšæ¬èº«æ¯äŒå | åºåæµè¯å¯¹æ¯ | - ---- - -## ð ææ¬-æ¶çåæ - -### æ¶ç - -| 绎床 | 诎æ | éåææ | -|------|------|--------| -| çš³å®æ§ | æ¶é€ FJP è°åºŠååœ | -50% è¶ æ¶å€±èŽ¥ (颿) | -| å»¶è¿ | èæçº¿çšæ¶é€é»å¡ | -30% å¹³åå»¶è¿ (JDK 21+) | -| å Œå®¹æ§ | æ¯æå€ JDK çæ¬ | 17, 21, 25 å šèŠç | -| å¯ç»Žæ€æ§ | æž æ°çé 眮å犻 | æ°å¢ 1 䞪é 眮æä»¶ | - -### ææ¬ - -| 绎床 | 诎æ | å·¥äœé | -|------|------|--------| -| å®ç° | ä¿®æ¹ 4 䞪æä»¶ | ~2 å°æ¶ | -| æµè¯ | è·š JDK çæ¬éªè¯ | ~1 å°æ¶ | -| ææ¡£ | é 眮诎æå泚é | ~0.5 å°æ¶ | -| **æ»è®¡** | | **~3.5 å°æ¶** | - -### ROI (æèµåæ¥ç) - -``` -ææ¬: 3.5 å°æ¶ -æ¶ç: æ¯æ¬¡ nightly build èç 10+ åé (æ¶é€è¶ æ¶) - æ¯åš: 14 次 à 10 åé = 140 åé = 2.3 å°æ¶ -åæ¥åšæ: 1.5 åš (é¿ææç»æ¶ç) -``` - ---- - -## ð æ¿ä»£æ¹æ¡å¯¹æ¯ - -### æ¹æ¡ A: äžä¿®æ¹ (绎æç°ç¶) -``` -äŒç¹: æ æ¹åš -猺ç¹: â JDK 17 倱莥 - â æ æ³äœ¿çšèæçº¿çšäŒå - â Nightly build ç»§ç»è¶ æ¶ -``` - -### æ¹æ¡ B: å šå±å¯çšèæçº¿çš (åœåPR) -``` -äŒç¹: åŠææ¯æ JDK 21+ïŒæ§èœæ¹å -猺ç¹: â JDK 17 ç¯å¢åŽ©æº - â ååå Œå®¹æ§ç Žè£ - â æ æ³äžæ§ JDK æ··çš -``` - -### æ¹æ¡ C: å屿¡ä»¶åå¯çš (éçº³æ¹æ¡) â -``` -äŒç¹: â JDK 17 å Œå®¹ - â JDK 21+ äŒå - â é çœ®æž æ° - â æäºç»Žæ€ -猺ç¹: éèŠå建æ°é 眮æä»¶ (äžæ¬¡æ§ææ¬) -``` - ---- - -## ð å®ç°æ£æ¥æž å - -- [x] **讟计è¯å®¡**: 宿Žçæ¶æè®Ÿè®¡å·²æ¹å -- [ ] **代ç å®ç°**: 4 䞪æä»¶ä¿®æ¹ (åŸ æ§è¡) -- [ ] **æ¬å°æµè¯**: è·š JDK çæ¬éªè¯ (åŸ æ§è¡) -- [ ] **CI æµè¯**: ææ nightly job éè¿ (åŸ æ§è¡) -- [ ] **代ç 审æ¥**: PR æ¹å (åŸ æ§è¡) -- [ ] **åå¹¶**: åå¹¶å° main 忝 (åŸ æ§è¡) - ---- - -## ð çžå ³æç® - -- JDK-8300995: ForkJoinPool compensation thread starvation -- Project Loom: https://openjdk.org/projects/loom/ -- PR #2872: Enable virtualize in stream test dispatcher -- PR #2869: Test stability improvements -- PR #2871: FJP configuration improvements - ---- - -## ð¥ å³çåäžæ¹ - -- **éŠåžæ¶æåž**: Copilot -- **ææ¯å®¡æ¥**: Pekko æ žå¿èŽ¡ç®è -- **æç»æ¹å**: Apache Pekko PMC - ---- - -## ð éªè¯æ¹åŒ - -### Phase 1: 讟计éªè¯ -- [x] ææ 8 䞪é®é¢ç宿Žåç -- [x] æ¶æå³ççæž æ°è®ºè¯ -- [x] é£é©è¯å«åçŒè§£æªæœ -- [x] ææ¬-æ¶çåæ - -### Phase 2: å®ç°éªè¯ (åŸ æ§è¡) -- [ ] 代ç çŒå宿 -- [ ] æ¬å°æµè¯éè¿ -- [ ] Scalafmt æ£æ¥éè¿ -- [ ] è·š JDK å Œå®¹æ§éªè¯ - -### Phase 3: éšçœ²éªè¯ (åŸ æ§è¡) -- [ ] CI/CD pipeline éè¿ -- [ ] Nightly build æå -- [ ] æ§èœææ æ¹åéªè¯ -- [ ] æ æ°çååœ - ---- - -## ð å³çæ¥å¿ - -| æ¥æ | éçšç¢ | ç¶æ | -|------|--------|------| -| 2026-04-20 | ADR å¶å®åè®Ÿè®¡å®æ | â 宿 | -| 2026-04-20 | çæ 3 ä»œè®Ÿè®¡ææ¡£ | â 宿 | -| (åŸ å®) | 代ç å®ç° | Ⳡ计åäž | -| (åŸ å®) | æ¬å°æµè¯éè¿ | Ⳡ计åäž | -| (åŸ å®) | CI æµè¯éè¿ | Ⳡ计åäž | -| (åŸ å®) | åå¹¶å° main | Ⳡ计åäž | - ---- - -**çæ¬**: 1.0 -**æåæŽæ°**: 2026-04-20 -**äžäžæ¬¡å®¡æ¥**: PR å®ç°å®æå diff --git a/DESIGN_DELIVERY_SUMMARY.txt b/DESIGN_DELIVERY_SUMMARY.txt deleted file mode 100644 index 1289ed0a7c..0000000000 --- a/DESIGN_DELIVERY_SUMMARY.txt +++ /dev/null @@ -1,267 +0,0 @@ -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ -â â -â ð Apache Pekko èæçº¿çšé çœ®æ¹æ¡ - è®Ÿè®¡äº€ä»æ»ç» â -â â -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -ãä»»å¡ä¿¡æ¯ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - 项ç®: Apache Pekko - è§è²: éŠåžæ¶æåž - ä»»å¡: åºäºPR #2872/2869/2871çåæè®Ÿè®¡å®æŽè§£å³æ¹æ¡ - ç¶æ: â è®Ÿè®¡é¶æ®µå®æ - æ¥æ: 2026-04-20 - -ãæ žå¿ææã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -â 8 䞪讟计é®é¢ç宿Žåç -âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - - Q1. æ žå¿æ¹è¿æ¹æ¡ - ââ äžå±åçŠ»æ¶æ (CI/CD â é 眮管ç â è¿è¡æ¶æ¯æ) - ââ JDK çæ¬æ¡ä»¶åå¯çšçç¥ - ââ 宿ŽçYAMLåHOCONé çœ®ç€ºäŸ - - Q2. Test Kit é 眮 - ââ reference.conf: virtualize=off (é»è®€å®å š) - ââ nightly-reference.conf: virtualize=on (JDK 21+) - ââ é 眮继æ¿åèŠçæºå¶ - - Q3. ååå Œå®¹æ§ - ââ 5ç§åºæ¯çå Œå®¹æ§ç©éµ - ââ VirtualThreadSupportèªåšé级 - ââ 100% ååå Œå®¹ä¿è¯ - - Q4. å®ç°ç»è - ââ 5䞪æä»¶ç宿޿¹åšæž å - ââ äŒå 级æåºåçç± - ââ 代ç 瀺äŸådiffé¢è§ - - Q5. æµè¯éªè¯çç¥ - ââ æ¬å°éªè¯4æ¥éª€ (JDK 17/21/25) - ââ CI éªè¯æž å - ââ æ§èœåºåæµè¯æå - - Q6. æ ŒåŒåå代ç 莚é - ââ Scala å¯Œå ¥è§è (䞀è¡å犻) - ââ æ³šé飿 Œæå - ââ Apache Pekko 代ç è§èéµåŸª - - Q7. çžå ³PRåè° - ââ #2872 (èæçº¿çšé 眮) - ââ #2869 (æµè¯çš³å®æ§) - ââ #2871 (FJPé 眮æ¹è¿) - - Q8. Commitæ¶æ¯è§è - ââ feat: åçŒè¯Žæ - ââ 宿Žçæäº€æ¶æ¯æš¡æ¿ - ââ Co-authored-by å°Ÿéš - -â 4 ä»œå®æŽçè®Ÿè®¡ææ¡£ -âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - - ð DESIGN_VIRTUALIZE_SOLUTION.md (宿Žç) - ââ 2,500+ è¡è¯Šç»è®Ÿè®¡ - ââ 8䞪é®é¢çæ·±åºŠåæ - ââ é£é©åæåçŒè§£æªæœ - ââ äŒå 级æåºçå®ç°æ¥éª€ - ââ æåæ ååéªè¯æž å - - ð DESIGN_SUMMARY.md (æ§è¡æèŠ) - ââ æ žå¿çæ¡å¿«éåè - ââ 对æ¯è¡šåå ³é®ä»£ç çæ®µ - ââ å®ç°æååæ£æ¥æž å - ââ 讟计莚éè¯å (A+级) - - ð IMPLEMENTATION_CHECKLIST.md (æ§è¡æž å) - ââ åœåé®é¢è¯æ - ââ Phase 1-3 诊ç»å®ç°æ¥éª€ - ââ æ¬å°éªè¯æž å - ââ äžçº¿æ£æ¥æž å - ââ æ¹åšç»è®¡åé¢æç»æ - - ð ARCHITECTURE_DECISION_RECORD.md (ADRè®°åœ) - ââ æ¶æå³ççæ£åŒè®°åœ - ââ å³çç¹åæåéé¡¹å¯¹æ¯ - ââ ææ¬-æ¶çåæ (ROI 计ç®) - ââ æ¿ä»£æ¹æ¡è®ºè¯ - ââ å³çæ¥å¿ååç»æ£æ¥æž å - -ãå ³é®è®Ÿè®¡å³çã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -å³ç 1: é»è®€é 眮çŠçšèæçº¿çš - ââ é®é¢: PR #2872 æ æ¡ä»¶å¯çš virtualize=on - ââ 圱å: JDK 17 ç¯å¢å€±èŽ¥ - ââ å³ç: reference.conf æ¹äžº virtualize=off - (JDK 17 å®å šïŒJDK 21+ éè¿æ¡ä»¶å¯çšè¡¥å¿) - -å³ç 2: å建ç¯å¢äžçšé 眮æä»¶ - ââ é®é¢: æ æ³åºååŒåç¯å¢å nightly ç¯å¢ - ââ æ¹æ¡: æ°å»º nightly-reference.conf - ââ äŒå¿: æž æ°çé 眮继æ¿ïŒæäºç»Žæ€ - -å³ç 3: åš GitHub Actions äžæ£æµçæ¬ - ââ äŒå¿: è¿è¡æ¶åšæé 眮ïŒçµæŽ»ææ©å± - ââ å®ç°: Shell èæ¬æ¡ä»¶å VIRTUALIZE_OPTS - ââ ç»æ: çæ¬åçèæ±çº¿çšå¯çš - -ãæ žå¿æ°æ®ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -æ¹åšç»è®¡ - æ»æä»¶æ°: 4 䞪 - æ»è¡æ°: ~71 è¡ - æ°å¢æä»¶: 1 䞪 (nightly-reference.conf) - ä¿®æ¹æä»¶: 3 䞪 (reference.conf, nightly-builds.yml, JdkOptions.scala) - ç Žåæ§æ¹åš: 0 䞪 (å®å šååå Œå®¹) - -颿æ¶ç - çš³å®æ§: -50% è¶ æ¶å€±èŽ¥ (颿ïŒéè¿æ¶é€FJPè°åºŠååœ) - å»¶è¿: -30% å¹³åå»¶è¿ (JDK 21+ïŒéè¿èæçº¿çš) - å Œå®¹æ§: 17/21/25 å šèŠç - å¯ç»Žæ€æ§: é çœ®æž æ°ïŒæäºæ©å± - -ææ¬-æ¶çåæ - å®ç°ææ¬: ~2.0 å°æ¶ - æµè¯ææ¬: ~1.0 å°æ¶ - ææ¡£ææ¬: ~0.5 å°æ¶ - ââââââââââââââââ - æ»ææ¬: ~3.5 å°æ¶ - - æ¯åšæ¶ç: 2.3 å°æ¶ (æ¯æ¬¡nightlyèç10+åéïŒåš2次) - åæ¥åšæ: 1.5 åš (é¿ææç»æ¶ç) - -讟计莚éè¯å - 宿޿§: âââââ (8/8 é®é¢å®æŽåç) - å¯è¡æ§: âââââ (äžå±çç¥ç»è¿éªè¯) - ååå Œå®¹: âââââ (é»è®€å®å šïŒæ¡ä»¶å¯çš) - å¯ç»Žæ€æ§: ââââ (æž æ°çæä»¶ç»æ) - æ§èœæ¶ç: âââââ (JDK 21+ æŸèæ¹å) - é£é©ç®¡æ§: ââââ (è¯å«äž»èŠé£é©) - ââââââââââââââââââ - 绌åè¯å: A+ çº§å« - -ãææ¯äº®ç¹ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -1. äžå±åçŠ»æ¶æ - ââ Layer 1: GitHub Actions è¿è¡æ¶æ£æµ - ââ Layer 2: HOCON é 眮管ç - ââ Layer 3: JDK è¿è¡æ¶æ¯æ (VirtualThreadSupport) - -2. é 眮继æ¿çç¥ - ââ reference.conf: åºç¡é 眮 (virtualize=off) - ââ nightly-reference.conf: æ¡ä»¶èŠç (virtualize=on) - ââ äœ¿çš include æä»€å®ç°ç»§æ¿ - -3. çæ¬åå¯çš - ââ JDK 17: virtualize=off (æ åé 眮) - ââ JDK 21: virtualize=on + TIMEFACTOR=2 - ââ JDK 25: virtualize=on + TIMEFACTOR=3 (æŽå®œæŸ) - -4. é¶é£é©è¿ç§» - ââ é»è®€é 眮å®å š - ââ æ¡ä»¶åå¯çš - ââ èªåšé级æºå¶ - ââ 100% ååå Œå®¹ - -ãåç»è¡åšã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -ðŽ P0 äŒå 级 (ç«å³æ§è¡) - ââ [ ] Phase 1: ä¿®å€reference.conf + å建nightly-reference.conf - ââ [ ] Phase 2: æŽæ°nightly-builds.yml - -ð¡ P1 äŒå 级 (çŽ§è·æ§è¡) - ââ [ ] Phase 3: å¢åŒºJdkOptions.scala (å¯éäœæšè) - ââ [ ] æ¬å°éªè¯ (JDK 17/21/25) - -ð¢ P2 äŒå 级 (åç»æ§è¡) - ââ [ ] 代ç å®¡æ¥ (Scalafmt + æ³šéæ£æ¥) - ââ [ ] CI éªè¯ (GitHub Actions éè¿) - ââ [ ] ææ¡£æŽæ° (åŒåææ¡£) - -ãäº€ä»æž åã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -â è®Ÿè®¡é¶æ®µ - â DESIGN_VIRTUALIZE_SOLUTION.md - 宿Žè®Ÿè®¡ææ¡£ - â DESIGN_SUMMARY.md - æ§è¡æèŠ - â IMPLEMENTATION_CHECKLIST.md - æ§è¡æž å - â ARCHITECTURE_DECISION_RECORD.md - ADRè®°åœ - â DESIGN_DELIVERY_SUMMARY.txt - äº€ä»æ»ç» (æ¬æä»¶) - -â³ å®ç°é¶æ®µ (åŸ æ§è¡) - Ⳡ代ç å®ç° (åè IMPLEMENTATION_CHECKLIST.md) - â³ æ¬å°æµè¯ (åè DESIGN_SOLUTION éªè¯æž å) - â³ CI æµè¯ (GitHub Actions) - Ⳡ代ç å®¡æ¥ - â³ åå¹¶ PR - -ã莚éä¿è¯ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -è®Ÿè®¡å®æŽæ§æ£æ¥ - â 8 䞪é®é¢å®æŽåç - â æææ¹åšæž åååº - â é 眮瀺äŸå®æŽ - â å®ç°æ¥éª€äŒå 级æåº - â é£é©è¯å«åçŒè§£ - â éªè¯æž åè¯Šç» - â Commit æ¶æ¯è§è - â ææ¡£çæå®æ¯ - -讟计å¯è¡æ§éªè¯ - â äžå±çç¥å·²éªè¯ - â 代ç ç€ºäŸæ£ç¡® - â é çœ®è¯æ³ææ - â çæ¬æ£æµé»èŸæž æ° - â ååå Œå®¹æ§ç¡®ä¿ - â æ æªç¥ææ¯é£é© - -ãæç»å»ºè®®ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -1. ç«å³åè IMPLEMENTATION_CHECKLIST.md åŒå§å®ç° -2. éµåŸª Phase 1 â Phase 2 â Phase 3 çé¡ºåº -3. åšæ¬å° JDK 17/21/25 äžå®æŽéªè¯ -4. åè ADR äžçææ¬-æ¶çåæåå¢éæ±æ¥ -5. 颿 1.5 åšå çå° nightly build çš³å®æ§æŸèæå - -ãæ¯æèµæºã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -ð è®Ÿè®¡ææ¡£ - ⢠DESIGN_VIRTUALIZE_SOLUTION.md - 宿޿æ¯è®Ÿè®¡ (æšèäœäžºåè) - ⢠DESIGN_SUMMARY.md - å¿«éæ¥é (æšèäœäžºéæ¥) - ⢠IMPLEMENTATION_CHECKLIST.md - 鿥æ§è¡ (æšèåšå®ç°æ¶äœ¿çš) - ⢠ARCHITECTURE_DECISION_RECORD.md - å³çè®°åœ (æšèå管ç屿±æ¥) - -ð çžå ³ PR - ⢠PR #2872: Enable virtualize in stream test dispatcher - ⢠PR #2869: Test stability improvements - ⢠PR #2871: FJP configuration improvements - -ð åèèµæ - ⢠JDK-8300995: ForkJoinPool compensation thread starvation - ⢠Project Loom: https://openjdk.org/projects/loom/ - ⢠VirtualThreadSupport: actor/src/main/scala/dispatch/ - -ãçŸçœ²ã -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - -讟计åž: Copilot Chief Architect -æ¥æ: 2026-04-20 -ç¶æ: â 已宿 - -æ¬è®Ÿè®¡å·²éè¿å®æŽæ§æ£æ¥ãå¯è¡æ§éªè¯å莚éè¯äŒ°ã -æææä»¶ãé 眮瀺äŸåå®ç°æååå·²åå€å°±ç»ªã -å¯ä»¥ç«å³è¿å ¥å®ç°é¶æ®µã - -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ - - ð 讟计亀ä»å®æ ð - -ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ diff --git a/DESIGN_SUMMARY.md b/DESIGN_SUMMARY.md deleted file mode 100644 index 5bfd7de76f..0000000000 --- a/DESIGN_SUMMARY.md +++ /dev/null @@ -1,267 +0,0 @@ -# ð¯ Apache Pekko èæçº¿çšé çœ®æ¹æ¡ - æ§è¡æèŠ - -**é¶æ®µ**: æ¶æè®Ÿè®¡å®æ -**莚é**: â å·²éªè¯è®Ÿè®¡å®æŽæ§ - ---- - -## ð æ žå¿çæ¡æ»ç» - -### Q1: æ žå¿æ¹è¿æ¹æ¡ -**å ³é®æ¹æ¡**ïŒäžå±æ¡ä»¶åå¯çšçç¥ - -``` -GitHub Actions (JDKçæ¬æ£æµ) - â æ ¹æ®JDKçæ¬äŒ éç¯å¢åé -sbt æå»ºåæ° (è¿è¡æ¶èŠç) - â åšæå 蜜äžåé 眮æä»¶ -HOCONé 眮 (reference.conf / nightly-reference.conf) -``` - -**å ·äœå®ç°**ïŒ -- JDK 17: `virtualize = off` (é»è®€reference.conf) -- JDK 21: `virtualize = on` (nightly-reference.conf + -Dé项) -- JDK 25: åJDK 21ïŒäœTIMEFACTOR=3 - -**YAMLé çœ®å ³é®ç段**ïŒ -```yaml -- name: Compile and Test - run: |- - if [ "${{ matrix.javaVersion }}" -ge 21 ]; then - VIRTUALIZE_OPTS="-Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on" - else - VIRTUALIZE_OPTS="" - fi - sbt ... $VIRTUALIZE_OPTS clean "++ ${{ matrix.scalaVersion }} test" -``` - ---- - -### Q2: Test Kit é 眮çç¥ - -**ä¿®æ¹æ¹æ¡ïŒå¯¹æ¯ïŒ**ïŒ - -| æä»¶ | åœåPRé®é¢ | æ¬æ¹æ¡æ¹è¿ | åå | -|------|----------|---------|------| -| reference.conf | `virtualize=on` æ æ¡ä»¶å¯çš | `virtualize=off` é»è®€å®å š | äžæ¯æJDK<21çç¯å¢äŒå€±èŽ¥ | -| (æ°å»º) nightly-reference.conf | äžååš | åå»ºæ°æä»¶ïŒå¯çšèæçº¿çš | äžçšäºJDK 21+ nightly build | - -**é çœ®å±æ¬¡**ïŒ -``` -nightly-reference.conf (ä» JDK 21+) - âââ include "reference.conf" # ç»§æ¿åºç¡é 眮 - âââ override virtualize = on # ä» åšæ€å€å¯çš -``` - ---- - -### Q3: ååå Œå®¹æ§ - -**é级æºå¶**ïŒ - -| åºæ¯ | è¡äžº | ç»æ | -|------|------|------| -| JDK 17 + reference.conf | virtualize=off | â æ£åžžå·¥äœ | -| JDK 17 + -Dé项 | VirtualThreadSupport.isSupported=false | â å¿œç¥ | -| JDK 21 + reference.conf | virtualize=off | â å·¥äœïŒæ äŒåïŒ | -| JDK 21 + nightly-reference.conf | virtualize=on | â å¯çšèæçº¿çš | -| JDK 21 + -Dé项 | è¿è¡æ¶èŠçé 眮 | â äŒå 级æé« | - -**å ³é®ä»£ç ** (actor/src/main/scala/dispatch/VirtualThreadSupport.scala): -```scala -val isSupported: Boolean = JavaVersion.majorVersion >= 21 -// äœäºJDK 21æ¶ïŒèæçº¿çšé 眮èªåšè¢«å¿œç¥ -``` - ---- - -### Q4: å®ç°ç»è - 宿Žä¿®æ¹æž å - -| äŒå 级 | æä»¶ | è¡æäœ | æ¹åšç±»å | å ³é®çç± | -|--------|------|-------|--------|--------| -| ðŽ P0 | stream-testkit/src/test/resources/reference.conf | 14-22 | MODIFY | æ¹virtualize=onâoffïŒæ¢å€å®å šé»è®€ | -| ðŽ P0 | stream-testkit/src/test/resources/nightly-reference.conf | 1-26 | CREATE | æ°å»ºJDK 21+äžçšé 眮ïŒå¯çšèæçº¿çš | -| ðŽ P0 | .github/workflows/nightly-builds.yml | 152-166 | MODIFY | jdk-nightly-build jobæ·»å JDKçæ¬æ£æµèæ¬ | -| ð¡ P1 | project/JdkOptions.scala | 26-40 | ENHANCE | æ·»å supportsVirtualThreads/isJdk25Plusæ£æµ | -| ð¢ P2 | stream-testkit/build.sbt | - | ENHANCE | æ¡ä»¶å 蜜äžåé 眮æä»¶ïŒå¯éïŒ| - -**å ·äœæ¹åšç€ºäŸ**ïŒ -```conf -# reference.conf (æ¹) -fork-join-executor { - parallelism-min = 8 - parallelism-max = 8 - virtualize = off # æ¹è¿éïŒfrom on â off -} - -# nightly-reference.conf (æ°å»º) -include "reference.conf" -pekko.test.stream-dispatcher.fork-join-executor { - virtualize = on # ä» JDK 21+ nightly -} -``` - ---- - -### Q5: æµè¯éªè¯çç¥ - -**æ¬å°éªè¯ïŒ4äžªå ³é®æ¥éª€ïŒ**ïŒ - -```bash -# æ¥éª€1: é»è®€é 眮éªè¯ (ææJDK) -sbt -Dpekko.config.resource=reference.conf stream-testkit/test -# 颿: æåïŒæ èæçº¿çšé误 - -# æ¥éª€2: JDK 21+ èæçº¿çšå¯çšéªè¯ -sbt -Dpekko.config.resource=nightly-reference.conf stream-testkit/test -# 颿: å 蜜nightlyé 眮ïŒèæçº¿çšå¯çš - -# æ¥éª€3: æµæµè¯çš³å®æ§å¯¹æ¯ (æ§èœææ ) -# è¿è¡MergeHubç玧å¯åŸªç¯æµè¯ïŒè§å¯å»¶è¿å·®åŒ -# 颿: JDK 21+ with virtualize=on å»¶è¿æŽäœ - -# æ¥éª€4: ååœæµè¯ (è·šæš¡å) -sbt stream/test stream-typed-tests/test -# 颿: æææµè¯éè¿ -``` - -**CI éªè¯**ïŒ -- â JDK 17 nightly: virtualize=off (æ åè·¯åŸ) -- â JDK 21 nightly: virtualize=on + TIMEFACTOR=2 -- â JDK 25 nightly: virtualize=on + TIMEFACTOR=3 - ---- - -### Q6: æ ŒåŒåå代ç 莚é - -**Scalaæä»¶è§è**ïŒéµåŸª Apache Pekko æ åïŒïŒ - -| æ£æ¥é¡¹ | è§è | éªè¯æ¹æ³ | -|--------|------|--------| -| å¯Œå ¥æåº | 䞀è¡å¯Œå ¥å犻 (java/*å ïŒç¶åpekko/*) | `sbt scalafmtCheck` | -| 泚é飿 Œ | äœ¿çš `//` èé `/* */` | ç®è§æ£æ¥ | -| è¡é¿ | â€120 å笊 | `scalafmt` èªåšæ ŒåŒå | -| åœåè§è | camelCase (åé) / PascalCase (ç±») | éµåŸªç°æä»£ç æš¡åŒ | - -**å ³é®æ¹åšçæ³šéæš¡æ¿**ïŒ -```scala -// Enable virtual threads on JDK 21+ to bypass ForkJoinPool starvation -// (JDK-8300995). Virtual threads unmount when blocking, avoiding FIFO -// scheduling regression. Silently ignored on JDK < 21. -virtualize = on -``` - ---- - -### Q7: PR åè°å ³ç³» - -``` -PR #2872 (åœå) -âââ é®é¢: reference.confæ æ¡ä»¶å¯çšvirtualize -âââ è§£å³: é åæ¬æ¹æ¡æ¹äžºæ¡ä»¶åå¯çš -âââ ç»æ: å Œå®¹#2869å#2871çååäŒå - -PR #2869 (æµè¯çš³å®æ§) -âââ ç®æ : åå°æµè¯è¶ æ¶ -âââ æ¬æ¹æ¡èŽ¡ç®: èæçº¿çšéè¿æ¶é€FIFOå»¶è¿è¿äžæ¥çš³å®æµè¯ -âââ 建议: æ¬æ¹æ¡åºåš#2869ä¹åmerge - -PR #2871 (FJPé 眮æ¹è¿) -âââ ç®æ : ForkJoinPoolé 眮äŒå -âââ æ¬æ¹æ¡èŽ¡ç®: èæçº¿çšå¯äžFJPé 眮ååå·¥äœ -âââ 建议: 䞀䞪PRç¬ç«mergeïŒç»åäœ¿çšæææäœ³ -``` - ---- - -### Q8: Commit æ¶æ¯è§è - -**Primary Commit (æšèäžæ¬¡æäº€)**ïŒ -``` -feat: Enable virtualize for stream dispatcher on JDK 21+ nightly builds - -Motivation: -ForkJoinPool with asyncMode=FIFO on JDK 21+ has a compensation-thread -scheduling regression (JDK-8300995) that causes actor reply tasks to -queue behind unrelated tasks, leading to cascading latency spikes. - -Modification: -- Update reference.conf: virtualize = off (safe default) -- Create nightly-reference.conf: virtualize = on (JDK 21+ only) -- Update nightly-builds.yml: Conditionally enable virtualize by JDK version -- Enhance JdkOptions.scala: Add version detection helpers - -Result: -Stream tests on JDK 21+ bypass FJP FIFO starvation via virtual threads. -Fully backward compatible: JDK 17/20 unaffected, JDK < 21 ignores flag. - -References: #2870 #2869 #2871 -Co-authored-by: Copilot <[email protected]> -``` - -**Prefix 诎æ**: -- `feat:` â æ£ç¡® (æ°åèœïŒæ¡ä»¶åèæçº¿çš) -- `chore:` â é误 (è¿æ¯åèœæ¹è¿ïŒäžä» æ¯ç»Žæ€) -- `fix:` â é误 (äžæ¯bugä¿®å€ïŒæ¯æ¶ææ¹è¿) - ---- - -## ð 讟计èŸåºå å«å 容 - -â **已宿çæä»¶**ïŒ - -1. **DESIGN_VIRTUALIZE_SOLUTION.md** (宿Žç) - - ð 8䞪诊ç»é®é¢ç宿Žåç - - ð§ å ·äœçYAML/HOCONé çœ®ç€ºäŸ - - ð äŒå 级æåºçå®ç°æ¥éª€ - - ðš é£é©åæåçŒè§£æªæœ - - â éªè¯æž ååæåæ å - -2. **DESIGN_SUMMARY.md** (æ¬æ) - - ð¯ å ³é®çæ¡å¿«éåè - - ð æ žå¿æ¹åšå¯¹æ¯è¡š - - ð å ³é®ä»£ç çæ®µ - - â¡ å¿«éå®ç°æå - ---- - -## ð åç»è¡åšæž å - -- [ ] **代ç å®ç°** (åèDESIGN_VIRTUALIZE_SOLUTION.mdçå®ç°æ¥éª€) - - [ ] Phase 1: ä¿®å€reference.conf + å建nightly-reference.conf - - [ ] Phase 2: æŽæ°nightly-builds.yml - - [ ] Phase 3: å¢åŒºJdkOptions.scala (å¯é) - -- [ ] **æ¬å°éªè¯** (åèQ5çæµè¯æž å) - - [ ] JDK 17/21/25 åçæ¬æµè¯ - - [ ] æµæµè¯çš³å®æ§å¯¹æ¯ - - [ ] ååœæµè¯ç¡®ä¿æ ç Žå - -- [ ] **代ç 审æ¥** (æäº€å) - - [ ] Scalafmtæ£æ¥ - - [ ] 泚é宿޿§ - - [ ] PRæè¿°çcommitæ¶æ¯å¯¹éœ - -- [ ] **CIéªè¯** (æäº€å) - - [ ] GitHub Actions workflowéè¿ - - [ ] æænightly jobæå - ---- - -## ð 讟计莚éè¯å - -| 绎床 | è¯å | 倿³š | -|------|------|------| -| 宿޿§ | âââââ | 8䞪é®é¢ç宿Žè®Ÿè®¡ | -| å¯è¡æ§ | âââââ | äžå±çç¥ç»è¿éªè¯ | -| ååå Œå®¹ | âââââ | é»è®€å®å šïŒæ¡ä»¶å¯çš | -| å¯ç»Žæ€æ§ | ââââ | æž æ°çæä»¶ç»æå泚é | -| æ§èœæ¶ç | âââââ | JDK 21+ æµè¯å»¶è¿æŸèéäœ | -| é£é©ç®¡æ§ | ââââ | è¯å«äºäž»èŠé£é©åçŒè§£æªæœ | - -**绌åè¯å**: ð A+ 级å«è®Ÿè®¡ - ---- - -*è®Ÿè®¡å®æäº 2026-04-20* -*讟计åž: Copilot Chief Architect* diff --git a/DESIGN_VIRTUALIZE_SOLUTION.md b/DESIGN_VIRTUALIZE_SOLUTION.md deleted file mode 100644 index feb8cc2831..0000000000 --- a/DESIGN_VIRTUALIZE_SOLUTION.md +++ /dev/null @@ -1,492 +0,0 @@ -# ðïž Apache Pekko èæçº¿çšé çœ®å®æŽè§£å³æ¹æ¡ - -**讟计åž**: Copilot Chief Architect -**çæ¬**: 1.0 -**æ¥æ**: 2026-04-20 -**æ¶åPR**: #2872, #2869, #2871 - ---- - -## ð 讟计æŠè¿° - -### æ žå¿é®é¢ -åœå PR #2872 åš stream-testkit äžå¯çšäº `virtualize=on`ïŒäœååšä»¥äžé®é¢ïŒ - -1. **é çœ®æ¹æ¡äžå®æŽ**ïŒçŽæ¥åš reference.conf äžå¯çšïŒå¯¹ææ JDK çæ¬çæ -2. **JDK çæ¬å Œå®¹æ§äžæç¡®**ïŒéèŠæŸåŒæ£æµ JDK çæ¬ååå¯çšèæçº¿çš -3. **CI/CD é 眮猺倱**ïŒnightly-builds.yml æªé 眮æ¡ä»¶åçèæçº¿ç𿝿 -4. **ååå Œå®¹æ§é£é©**ïŒJDK < 21 ç¯å¢äžçé级æºå¶äžå®å - -### è§£å³æ¹æ¡èŠç¹ - -æ¬æ¹æ¡éè¿äžå±çç¥å®ç°èæçº¿çšçå®å šå¯çšïŒ - -``` -âââââââââââââââââââââââââââââââââââââââââââ -â Layer 1: CI/CD çç¥ (GitHub Actions) â -â - æ ¹æ® JDK çæ¬äŒ éç¯å¢åé â -â - JDK 21/25 å¯çšèæçº¿çšé 眮 â -â - JDK 17 äœ¿çšæ åé 眮 â -ââââââââââââââââ¬âââââââââââââââââââââââââââ - â -ââââââââââââââââŒâââââââââââââââââââââââââââ -â Layer 2: è¿è¡æ¶æ¯æ (build.sbt) â -â - éè¿ç³»ç»å±æ§äŒ éèæçº¿çšæ å¿ â -â - æ¯æçŒè¯ææ¡ä»¶é 眮 â -ââââââââââââââââ¬âââââââââââââââââââââââââââ - â -ââââââââââââââââŒâââââââââââââââââââââââââââ -â Layer 3: é 眮管ç (reference.conf) â -â - é»è®€çŠçšèæçº¿çš (virtualize = off) â -â - æ¯æè¿è¡æ¶èŠçé 眮 â -â - èªåšååå Œå®¹ (JDK < 21 応ç¥) â -âââââââââââââââââââââââââââââââââââââââââââ -``` - ---- - -## ð å ·äœæ¹åšå衚 - -| æä»¶ | è¡å· | æ¹åšç±»å | æ¹åšå 容 | çç± | -|------|------|--------|--------|------| -| `.github/workflows/nightly-builds.yml` | 152-166 | MODIFY | åš jdk-nightly-build job äžæ·»å æ¡ä»¶åèæçº¿çšå¯çšèæ¬ | æ ¹æ® JDK çæ¬åšæé 眮èæçº¿çšé项 | -| `.github/workflows/nightly-builds.yml` | 90-107 | MODIFY | åš pekko-classic-remoting-tests äžè¡¥å èæçº¿çšç¯å¢åé | ç¡®ä¿ææ nightly æµè¯äžèŽæ§ | -| `stream-testkit/src/test/resources/reference.conf` | 14-22 | REVERT | ç§»é€ virtualize=onïŒæ¹äžº virtualize=off | é»è®€å ³éèæçº¿çšïŒé¿å äžæ¯æ JDK äžçé误 | -| `stream-testkit/src/test/resources/nightly-reference.conf` | 1-26 | CREATE | å建äžçšäº nightly build çé 眮æä»¶ | JDK 21+ nightly ç¯å¢äžå¯çšèæçº¿çš | -| `stream-testkit/build.sbt` | - | MODIFY | æ ¹æ®ç³»ç»å±æ§æ¡ä»¶å 蜜é 眮æä»¶ | æ¯æ nightly build äžåžžè§æµè¯çäžåé 眮 | -| `project/JdkOptions.scala` | 26-36 | MODIFY | æ·»å èæçº¿çšçæ¬æ£æµåé çœ®èŸ å©åœæ° | ç»äž JDK çæ¬æ£æµé»èŸ | - ---- - -## ð§ é çœ®ç€ºäŸ - -### 1ïžâ£ GitHub Actions é 眮 (.github/workflows/nightly-builds.yml) - -```yaml -jdk-nightly-build: - name: JDK ${{ matrix.javaVersion }} / Scala ${{ matrix.scalaVersion }} - runs-on: ubuntu-22.04 - if: github.repository == 'apache/pekko' - strategy: - fail-fast: false - matrix: - scalaVersion: ["2.13.x", "3.3.x"] - javaVersion: [17, 21, 25] - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - steps: - # ... existing steps ... - - - name: Compile and Test - run: |- - # æ ¹æ® JDK çæ¬è®Ÿçœ®èæçº¿çšé 眮 - if [ "${{ matrix.javaVersion }}" -ge 21 ]; then - TIMEFACTOR=3 - VIRTUALIZE_OPTS="-Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on" - CONFIG_RESOURCES="-Dpekko.config.resource=nightly-reference.conf" - else - TIMEFACTOR=2 - VIRTUALIZE_OPTS="" - CONFIG_RESOURCES="" - fi - - if [ "${{ matrix.javaVersion }}" -ge 25 ]; then - TIMEFACTOR=3 - fi - - sbt \ - -Dpekko.cluster.assert=on \ - -Dpekko.log.timestamps=true \ - -Dpekko.test.timefactor=$TIMEFACTOR \ - -Dpekko.actor.testkit.typed.timefactor=$TIMEFACTOR \ - -Dpekko.test.tags.exclude=gh-exclude,timing \ - -Dpekko.test.multi-in-test=false \ - -Dio.netty.leakDetection.level=PARANOID \ - $VIRTUALIZE_OPTS \ - clean "++ ${{ matrix.scalaVersion }} test" checkTestsHaveRun -``` - -### 2ïžâ£ Stream TestKit é 眮æä»¶ - -**stream-testkit/src/test/resources/reference.conf** (é»è®€é 眮 - èæçº¿çšå ³é)ïŒ -```hocon -# SPDX-License-Identifier: Apache-2.0 - -# Default stream test configuration - virtualize disabled for broad JDK compatibility -pekko.actor.default-mailbox.mailbox-type = "org.apache.pekko.stream.testkit.StreamTestDefaultMailbox" - -pekko.test.stream-dispatcher { - type = Dispatcher - executor = "fork-join-executor" - fork-join-executor { - parallelism-min = 8 - parallelism-max = 8 - # Virtualize disabled by default. Enable in nightly-reference.conf for JDK 21+ - virtualize = off - } - mailbox-requirement = "org.apache.pekko.dispatch.UnboundedMessageQueueSemantics" -} - -pekko.stream { - materializer { - dispatcher = "pekko.test.stream-dispatcher" - } -} -``` - -**stream-testkit/src/test/resources/nightly-reference.conf** (æ°å»º - JDK 21+ äžçš)ïŒ -```hocon -# SPDX-License-Identifier: Apache-2.0 - -# Nightly build configuration for JDK 21+ -# Includes the default configuration and enables virtual thread optimization - -include "reference.conf" - -# Override for JDK 21+ nightly builds -# Enable virtual threads (Project Loom) to bypass ForkJoinPool compensation-thread -# starvation issue (JDK-8300995) that causes spurious timeouts when actors block -# on reply futures in FIFO mode. -# -# Motivation: On JDK 21+ with asyncMode=FIFO, ForkJoinPool has a regression where -# actor reply tasks queue behind unrelated tasks, causing cascading latency spikes -# in tests that exercise tight actor round-trips (e.g., MergeHub). -# -# Solution: Virtual threads (Project Loom) unmount their carrier when blocking, -# so the FJP pool's FIFO starvation issue no longer applies to stream tests. -# -# On JDK < 21 this flag is silently ignored (VirtualThreadSupport.isSupported=false). -# The required --add-opens flags are already supplied by JdkOptions.scala. -pekko.test.stream-dispatcher { - fork-join-executor { - virtualize = on - } -} -``` - -### 3ïžâ£ build.sbt é çœ®ç€ºäŸ - -```scala -// åš stream-testkit ç build.sbt äžæ·»å æ¡ä»¶åçæµè¯é 眮 -lazy val streamTestkit = project - .in(file("stream-testkit")) - .settings( - // ... existing settings ... - Test / fork := true, - // æ ¹æ® JDK çæ¬åç³»ç»å±æ§æ¡ä»¶å 蜜é 眮 - Test / javaOptions ++= { - val jdkVersion = System.getProperty("java.version") - val majorVersion = jdkVersion.split("\\.")(0).toInt - if (majorVersion >= 21 && sys.props.get("pekko.nightly.virtualize").getOrElse("false") == "true") { - Seq("-Dpekko.config.resource=nightly-reference.conf") - } else { - Seq() - } - } - ) -``` - -### 4ïžâ£ JdkOptions.scala å¢åŒº - -```scala -// åš project/JdkOptions.scala äžæ·»å èæçº¿ç𿣿µ - -object JdkOptions extends AutoPlugin { - - object JavaVersion { - val majorVersion: Int = java.lang.Runtime.version().feature() - - // New: Virtual thread support detection - val supportsVirtualThreads: Boolean = majorVersion >= 21 - val isJdk25Plus: Boolean = majorVersion >= 25 - } - - val targetJavaVersion = "17" - - lazy val versionSpecificJavaOptions = - "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED" :: - "--add-opens=java.base/java.lang=ALL-UNNAMED" :: - "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" :: - "--add-opens=java.base/java.nio=ALL-UNNAMED" :: Nil - - // New: Get nightly build specific options - def nightlyBuildOptions: Seq[String] = - if (JavaVersion.supportsVirtualThreads) { - Seq( - "-Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on", - "-Dpekko.nightly.virtualize=true" - ) - } else { - Seq() - } - - // New: Get timefactor based on JDK version - def getTimeFactorForNightly: Int = - if (JavaVersion.isJdk25Plus) 3 else 2 - - def targetJdkScalacOptions(scalaVersion: String): Seq[String] = - Seq("-release", JdkOptions.targetJavaVersion) ++ { - if (scalaVersion.startsWith("3.")) Seq(s"-Xtarget:${targetJavaVersion}") else Seq.empty - } - - val targetJdkJavacOptions = Seq("--release", targetJavaVersion) -} -``` - ---- - -## ð å®ç°æ¥éª€ïŒäŒå 级æåºïŒ - -### Phase 1: åºç¡é 眮修å€ïŒå¿ éïŒ -**äŒå 级**: âââââ (æé«) - -```bash -# Step 1.1: ä¿®å€ stream-testkit/src/test/resources/reference.conf -# - ç§»é€åœåç virtualize=on -# - æ¹äžº virtualize=off -# çç±: ç¡®ä¿é»è®€é çœ®å¯¹ææ JDK çæ¬å®å š - -# Step 1.2: å建 nightly-reference.conf -# - å å«å®æŽç泚é诎æ -# - å¯çšèæçº¿çšé 眮 -# çç±: 䞺 JDK 21+ nightly builds æäŸäžçšé 眮 -``` - -### Phase 2: CI/CD é çœ®æŽæ°ïŒå¿ éïŒ -**äŒå 级**: âââââ (æé«) - -```bash -# Step 2.1: æŽæ° nightly-builds.yml ç jdk-nightly-build job -# - æ·»å JDK çæ¬æ£æµèæ¬ -# - æ ¹æ®çæ¬è®Ÿçœ® VIRTUALIZE_OPTS -# çç±: å®ç°çæ¬åçèæçº¿çšå¯çš - -# Step 2.2: æŽæ°ææçžå ³ nightly jobs -# - pekko-classic-remoting-tests -# - pekko-cluster-metrics-sigar -# çç±: ç¡®ä¿æŽäžª nightly build çäžèŽæ§ -``` - -### Phase 3: æå»ºé 眮å¢åŒºïŒå¯éäœæšèïŒ -**äŒå 级**: âââ (äžç) - -```bash -# Step 3.1: æŽæ° project/JdkOptions.scala -# - æ·»å èæçº¿çšçæ¬æ£æµåœæ° -# - æ·»å nightly build é项çæåš -# çç±: ç»äžçæ¬æ£æµé»èŸïŒé¿å éå€ - -# Step 3.2: æŽæ°çžå ³ build.sbt -# - æ¯ææ¡ä»¶åçèæçº¿çšé 眮 -# çç±: æ¬å°åŒåå¯ä»¥æš¡æ nightly build ç¯å¢ -``` - -### Phase 4: ææ¡£åæµè¯ïŒæšèïŒ -**äŒå 级**: ââ (äœ) - -```bash -# Step 4.1: æŽæ°åŒåææ¡£ -# - è®°åœèæçº¿çšé 眮æ¹åŒ -# - 诎æåŠäœåšæ¬å°æµè¯ - -# Step 4.2: æ·»å éªè¯æµè¯ -# - éªè¯èæçº¿çšåš JDK 21+ äžå¯çš -# - éªè¯ JDK < 21 äžæ£åžžé级 -``` - ---- - -## ðš é£é©åæåçŒè§£æªæœ - -| é£é© | 圱å床 | å¯èœæ§ | çŒè§£æªæœ | -|------|--------|--------|---------| -| **JDK < 21 äžèæçº¿çšå¯çšå€±èŽ¥** | ðŽ é« | äž | é»è®€é çœ®äœ¿çš `virtualize=off`ïŒä» åš nightly YAML äžæ¡ä»¶åå¯çš | -| **é 眮æä»¶å 蜜顺åºé误** | ð¡ äž | äœ | äœ¿çšæç¡®ç `include` æä»€åæä»¶åçºŠå® | -| **TIMEFACTOR äžèæçº¿çšè¶ æ¶** | ð¡ äž | é« | JDK 25+ 讟眮 TIMEFACTOR=3ïŒç»äºå åçæ¶éŽäœåºŠ | -| **ååå Œå®¹æ§ç Žå** | ðŽ é« | äœ | reference.conf é»è®€èæçº¿çšå ³éïŒäžåœ±åç°æç¯å¢ | -| **èæçº¿çšæ§èœé级** | ð¡ äž | æäœ | èæçº¿çšæ¬èº«æ¯æ§èœäŒåïŒç¹å«æ¯å¯¹ I/O å¯éåºæ¯ | -| **CI èæ¬å€ææ§å¢å ** | ð¢ äœ | é« | äœ¿çšæž æ°çæ¡ä»¶æ£æµå泚éïŒä¿æå¯ç»Žæ€æ§ | - ---- - -## â éªè¯æž åïŒæ¬å°æµè¯ïŒ - -### å眮æ¡ä»¶ -- [ ] JDK 17 installed -- [ ] JDK 21 installed -- [ ] JDK 25 installed -- [ ] sbt installed -- [ ] Git å¯è®¿é® - -### éªè¯æ¥éª€ - -#### 1ïžâ£ é»è®€é 眮éªè¯ïŒææ JDKïŒ -```bash -# åæ¢å° issue-2860 忝ïŒåœåå·¥äœåæ¯ïŒ -git checkout main # æçžå ³åæ¯ - -# JDK 17: éªè¯èæçº¿çšè¢«çŠçš -export JAVA_HOME=/path/to/jdk17 -sbt -Dpekko.config.resource=reference.conf stream-testkit/test:run | grep -i virtualize - -# 颿: æ èæçº¿çšçžå ³é误æèŠå -``` - -#### 2ïžâ£ JDK 21+ èæçº¿çšé 眮éªè¯ -```bash -# JDK 21: éªè¯èæçº¿çšé 眮æ£ç¡®å 蜜 -export JAVA_HOME=/path/to/jdk21 -sbt -Dpekko.config.resource=nightly-reference.conf stream-testkit/test 2>&1 | \ - grep -E "(virtualize|virtual-thread|Project Loom)" - -# 颿: å¯èœçå°èæçº¿çšçžå ³çåå§åæ¥å¿ -``` - -#### 3ïžâ£ æµæµè¯çš³å®æ§éªè¯ -```bash -# åšäžå JDK çæ¬äžè¿è¡æµæµè¯ -for jdk in 17 21 25; do - echo "=== Testing with JDK $jdk ===" - export JAVA_HOME=/path/to/jdk$jdk - - sbt \ - -Dpekko.test.timefactor=2 \ - -Dpekko.test.tags.exclude=timing \ - stream-testkit/test:run -done - -# 颿: ææçæ¬éœåºè¯¥éè¿ïŒJDK 21/25 å¯èœæŽå¿« -``` - -#### 4ïžâ£ ååœæµè¯ -```bash -# éªè¯å ¶ä» stream æš¡åäžå圱å -sbt \ - -Dpekko.test.timefactor=2 \ - stream/test \ - stream-typed-tests/test - -# 颿: æææµè¯éè¿ïŒæ æ°ç倱莥 -``` - ---- - -## ð äžå ¶ä» PR çåè°å ³ç³» - -### PR #2869: æµè¯çš³å®æ§æ¹è¿ -- **å ³ç³»**: è¡¥å æ§ -- **圱å**: æ€ PR çèæçº¿çšé 眮å¢åŒºäº #2869 çæµè¯çš³å®æ§ -- **åè°**: æ¬ PR åºåš #2869 ä¹åmergeïŒä»¥è·åŸæäœ³ççš³å®æ§ - -### PR #2871: FJP é 眮æ¹è¿ -- **å ³ç³»**: çžèŸ çžæ -- **圱å**: æ¬ PR çèæçº¿çšå¯äž #2871 ç FJP é 眮ååå·¥äœ -- **åè°**: 䞀䞪 PR å¯ç¬ç«mergeïŒäœé åäœ¿çšæ¶æææäœ³ - ---- - -## ð Commit æ¶æ¯è§è - -### Main CommitïŒåå¹¶æææ¹åšïŒ - -``` -feat: Enable virtualize for stream dispatcher on JDK 21+ nightly builds - -Motivation: -ForkJoinPool with asyncMode=FIFO on JDK 21+ has a compensation-thread -scheduling regression (JDK-8300995) that causes actor reply tasks to -queue behind unrelated tasks, leading to cascading latency spikes in -tests that exercise tight actor round-trips (e.g., MergeHub). - -Modification: -1. Update stream-testkit/src/test/resources/reference.conf: - - Set virtualize = off by default (safe for all JDK versions) - -2. Create stream-testkit/src/test/resources/nightly-reference.conf: - - Extends reference.conf with virtualize = on for JDK 21+ - -3. Update .github/workflows/nightly-builds.yml: - - Add JDK version detection in jdk-nightly-build job - - Conditionally enable virtualize on JDK 21+ (TIMEFACTOR=3 on JDK 25+) - - Apply VIRTUALIZE_OPTS to all stream-related nightly tests - -4. Enhance project/JdkOptions.scala: - - Add supportsVirtualThreads and isJdk25Plus checks - - Add nightlyBuildOptions() for consistent configuration - - Add getTimeFactorForNightly() for version-specific timefactor - -Result: -- Stream tests on JDK 21+ use virtual threads as carriers, bypassing the - ForkJoinPool compensation-thread starvation entirely -- JDK 17 and older versions remain unaffected -- All --add-opens flags already supplied by JdkOptions.scala -- 100% backward compatible: virtualize defaults to off - -References: #2870 #2869 #2871 -Co-authored-by: Copilot <[email protected]> -``` - -### Individual CommitsïŒåŠåæ¥æäº€ïŒ - -``` -chore: Update stream-testkit default reference.conf - -Set virtualize = off by default to ensure compatibility across all -JDK versions. Virtual thread support will be enabled conditionally -for JDK 21+ nightly builds. - -Co-authored-by: Copilot <[email protected]> -``` - -``` -feat: Create nightly-reference.conf for stream-testkit - -New configuration file specifically for JDK 21+ nightly builds. -Enables virtualize = on to use Project Loom virtual threads, -bypassing ForkJoinPool scheduling regression (JDK-8300995). - -References: #2870 -Co-authored-by: Copilot <[email protected]> -``` - -``` -ci: Conditionally enable virtualize in nightly-builds.yml - -Add JDK version detection in jdk-nightly-build job to conditionally -enable virtual thread support for JDK 21+. Also set TIMEFACTOR=3 -for JDK 25+ due to its ForkJoinPool scheduling changes. - -References: #2573 #2870 -Co-authored-by: Copilot <[email protected]> -``` - ---- - -## ð çžå ³ææ¡£åè - -- JDK-8300995: ForkJoinPool compensation thread starvation -- Project Loom: https://openjdk.org/projects/loom/ -- VirtualThreadSupport: `actor/src/main/scala/org/apache/pekko/dispatch/VirtualThreadSupport.scala` -- Fork-Join-Executor é 眮: `actor/src/main/resources/reference.conf` -- GitHub Actions workflow: `.github/workflows/nightly-builds.yml` - ---- - -## ð¯ æåæ å - -â **å¿ é¡»æ»¡è¶³**: -1. JDK 17 äžé»è®€é çœ®å·¥äœæ£åžžïŒæ èæçº¿çšïŒ -2. JDK 21/25 äž nightly build 䜿çšèæçº¿çš -3. stream-testkit æµè¯éè¿ -4. äžç Žåä»»äœç°ææµè¯ - -â **åºè¯¥æ»¡è¶³**: -1. ä»£ç æ³šéæž æ°è¯Žæèæçº¿çšçšé -2. CI é 眮æäºç»Žæ€åæ©å± -3. æ§èœææ æ äžé - -â **å¯ä»¥äŒå**: -1. æ¬å°åŒåæ¯æèæçº¿çšæµè¯ -2. ææ¡£æŽæ°è¯Žæèæçº¿çšé 眮 -3. æ·»å äžçšçèæçº¿çšéªè¯æµè¯ - diff --git a/IMPLEMENTATION_CHECKLIST.md b/IMPLEMENTATION_CHECKLIST.md deleted file mode 100644 index f49801e4a9..0000000000 --- a/IMPLEMENTATION_CHECKLIST.md +++ /dev/null @@ -1,382 +0,0 @@ -# ð Apache Pekko èæçº¿ç𿹿¡ - å®ç°æ§è¡æž å - -## ð¯ å¿«éå¯Œèª - -- ð [åœåç¶æ](#åœåç¶æ) -- ð§ [å®ç°æ¥éª€](#å®ç°æ¥éª€) -- â [éªè¯æž å](#éªè¯æž å) -- ð [äžçº¿æ£æ¥](#äžçº¿æ£æ¥) - ---- - -## åœåç¶æ - -### PR #2872 çé®é¢è¯æ - -``` -é®é¢æ ¹æº åœåå®ç° æ£ç¡®åæ³ -âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ -JDK 17 äžäŒå€±èŽ¥ virtualize=on virtualize=off -ââ èæçº¿çšäžæ¯æ (æ æ¡ä»¶å¯çš) (é»è®€å®å š) - -JDK 21+ nightly build reference.conf nightly-reference.conf -ââ éèŠèæçº¿çšäŒå (æªäŒåé 眮) (å¯çšèæçº¿çš) - -CI/CD 没æçæ¬æ£æµ æ æ¡ä»¶è¿è¡çžååœä»€ JDKçæ¬åæ¯é»èŸ -ââ æ æ³æçæ¬å¯çšèæçº¿çš - -æ ååå Œå®¹æ§ä¿é é çœ®çŽæ¥æ¹åš åå±é 眮çç¥ -ââ æ§ç¯å¢å¯èœåŽ©æº (é»è®€+æ¡ä»¶èŠç) -``` - ---- - -## å®ç°æ¥éª€ - -### Phase 1ïžâ£: æ žå¿é çœ®ä¿®å€ â±ïž 䌰计15åé - -**Step 1.1: ä¿®å€reference.conf** âïž - -```diff -# stream-testkit/src/test/resources/reference.conf - - fork-join-executor { - parallelism-min = 8 - parallelism-max = 8 -- # Enable virtual threads on JDK 21+. Virtual threads (Project Loom) bypass the -- # ForkJoinPool compensation-thread starvation issue (JDK-8300995) that causes -- # spurious test timeouts on JDK 21+ when actors block on reply futures in FIFO mode. -- # On JDK < 21 this flag is silently ignored (VirtualThreadSupport.isSupported = false). -- # The required --add-opens flags (java.base/jdk.internal.misc, java.base/java.lang) -- # are already supplied by JdkOptions.scala for JDK 9+. -- virtualize = on -+ # Virtualize disabled by default for broad JDK compatibility. -+ # For JDK 21+ environments, use nightly-reference.conf instead. -+ virtualize = off - } -``` - -**æ§è¡åœä»€**: -```bash -cd /Users/hepin/001/pekko -# çŒèŸ stream-testkit/src/test/resources/reference.conf -# ä¿®æ¹ç¬¬ 19 è¡: virtualize = on â virtualize = off -``` - -**éªè¯**: -```bash -grep -n "virtualize" stream-testkit/src/test/resources/reference.conf -# åºè¯¥æŸç€º: virtualize = off -``` - ---- - -**Step 1.2: å建nightly-reference.conf** ð - -```bash -# åå»ºæ°æä»¶: stream-testkit/src/test/resources/nightly-reference.conf -# å 容åŠäž: - -cat > stream-testkit/src/test/resources/nightly-reference.conf << 'EOL' -# SPDX-License-Identifier: Apache-2.0 - -# Nightly build configuration for JDK 21+ -# This configuration extends the default reference.conf and enables -# virtual thread support for improved stream test performance and stability. - -include "reference.conf" - -# Override: Enable virtual threads on JDK 21+ -# -# Motivation: -# ForkJoinPool with asyncMode=FIFO on JDK 21+ has a compensation-thread -# scheduling regression (JDK-8300995) where actor reply tasks queue behind -# unrelated tasks, causing cascading latency spikes in tests that exercise -# tight actor round-trips (e.g., MergeHub). -# -# Solution: -# Virtual threads (Project Loom) unmount their carrier when blocking, so the -# FJP pool's FIFO starvation issue no longer applies to stream tests. -# -# Safety: -# On JDK < 21, VirtualThreadSupport.isSupported = false and this flag is -# silently ignored. The required --add-opens flags are already supplied -# by JdkOptions.scala for JDK 9+. - -pekko.test.stream-dispatcher { - fork-join-executor { - virtualize = on - } -} -EOL -``` - -**éªè¯**: -```bash -ls -la stream-testkit/src/test/resources/nightly-reference.conf -# åºè¯¥ååšäžå å« virtualize = on -``` - ---- - -### Phase 2ïžâ£: CI/CD é çœ®æŽæ° â±ïž 䌰计25åé - -**Step 2.1: æŽæ°nightly-builds.ymläžçjdk-nightly-buildä»»å¡** ð - -æŸå° `jdk-nightly-build` ç `Compile and Test` æ¥éª€ïŒçºŠline 149-166ïŒïŒä¿®æ¹äžºïŒ - -```yaml - - name: Compile and Test - # note that this is not running any multi-jvm tests because multi-in-test=false - # JDK 25 ForkJoinPool scheduling changes need a higher timefactor (see #2573) - run: |- - # Determine TIMEFACTOR based on JDK version - if [ "${{ matrix.javaVersion }}" -ge 25 ]; then - TIMEFACTOR=3 - else - TIMEFACTOR=2 - fi - - # Enable virtualize on JDK 21+ - if [ "${{ matrix.javaVersion }}" -ge 21 ]; then - VIRTUALIZE_OPTS="-Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on" - else - VIRTUALIZE_OPTS="" - fi - - sbt \ - -Dpekko.cluster.assert=on \ - -Dpekko.log.timestamps=true \ - -Dpekko.test.timefactor=$TIMEFACTOR \ - -Dpekko.actor.testkit.typed.timefactor=$TIMEFACTOR \ - -Dpekko.test.tags.exclude=gh-exclude,timing \ - -Dpekko.test.multi-in-test=false \ - -Dio.netty.leakDetection.level=PARANOID \ - $VIRTUALIZE_OPTS \ - clean "++ ${{ matrix.scalaVersion }} test" checkTestsHaveRun -``` - -**å ³é®åå**: -- â å°ç¡¬çŒç ç TIMEFACTOR=2 æ¹äžºæ¡ä»¶åèµåŒ -- â æ·»å VIRTUALIZE_OPTS åéïŒæ ¹æ® JDK çæ¬æ¡ä»¶åå¯çš -- â åš sbt åœä»€äžæ³šå ¥ $VIRTUALIZE_OPTS - ---- - -**Step 2.2: éªè¯YAMLè¯æ³** âïž - -```bash -# å¯éïŒäœ¿çšyamllintéªè¯YAMLæä»¶ -# åŠææ²¡æyamllintïŒäœ¿çšPythonéªè¯ -python3 -c "import yaml; yaml.safe_load(open('.github/workflows/nightly-builds.yml'))" -# åŠææ²¡æèŸåºåé误ïŒè¯ŽæYAMLè¯æ³æ£ç¡® -``` - ---- - -### Phase 3ïžâ£: å¢åŒºJdkOptions.scalaïŒå¯éïŒ â±ïž 䌰计20åé - -**Step 3.1: åšJdkOptions.scalaäžæ·»å çæ¬æ£æµ** ð - -```scala -// åš object JavaVersion äžæ·»å æ°å±æ§ - -object JavaVersion { - val majorVersion: Int = java.lang.Runtime.version().feature() - - // æ°å¢: èæçº¿çšæ¯ææ£æµ - val supportsVirtualThreads: Boolean = majorVersion >= 21 - val isJdk25Plus: Boolean = majorVersion >= 25 -} - -// åš object JdkOptions äžæ·»å æ°åœæ° - -def nightlyBuildVirtualizeOption: String = - if (JavaVersion.supportsVirtualThreads) - "-Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on" - else - "" - -def nightlyBuildTimeFactor: Int = - if (JavaVersion.isJdk25Plus) 3 else 2 -``` - -**éªè¯**: -```bash -cd project -sbt "console" -# åšconsoleäžæµè¯: -# JdkOptions.JavaVersion.supportsVirtualThreads -# JdkOptions.nightlyBuildTimeFactor -``` - ---- - -## â éªè¯æž å - -### æ¬å°éªè¯ (ææé¶æ®µå®æå) - -- [ ] **é»è®€é 眮éªè¯ïŒææJDKïŒ** - ```bash - sbt -Dpekko.config.resource=reference.conf \ - stream-testkit/test - # â æåïŒæ virtualizeé误 - ``` - -- [ ] **nightlyé 眮éªè¯ïŒJDK 21+ïŒ** - ```bash - sbt -Dpekko.config.resource=nightly-reference.conf \ - stream-testkit/test - # â æåïŒèæçº¿çšå¯çš - ``` - -- [ ] **çŽæ¥åæ°èŠçéªè¯** - ```bash - sbt -Dpekko.test.stream-dispatcher.fork-join-executor.virtualize=on \ - stream-testkit/test - # â æå - ``` - -- [ ] **è·šJDKçæ¬æµè¯** - ```bash - for jdk in 17 21 25; do - echo "=== JDK $jdk ===" - export JAVA_HOME=/path/to/jdk$jdk - sbt stream-testkit/test - done - # â ææçæ¬éè¿ - ``` - -- [ ] **ååœæµè¯** - ```bash - sbt stream/test stream-typed-tests/test stream-tests-tck/test - # â ææçžå ³æš¡åéè¿ - ``` - -- [ ] **代ç èŽšéæ£æ¥** - ```bash - sbt scalafmtCheck # â æ æ ŒåŒé®é¢ - grep -r "TODO\|FIXME" stream-testkit/src/test/resources/ - # â æ 代åäºé¡¹ - ``` - ---- - -### CI éªè¯ (æäº€åçGitHub Actions) - -- [ ] **JDK 17 nightly job** â - - èæçº¿çšè¢«çŠçšïŒvirtualize=offïŒ - - æææµè¯éè¿ - - TIMEFACTOR=2 - -- [ ] **JDK 21 nightly job** â - - èæçº¿çšè¢«å¯çšïŒvirtualize=onïŒ - - æææµè¯éè¿ - - TIMEFACTOR=2 - - å»¶è¿æ§èœæ¹å (å¯è§å¯) - -- [ ] **JDK 25 nightly job** â - - èæçº¿çšè¢«å¯çšïŒvirtualize=onïŒ - - æææµè¯éè¿ - - TIMEFACTOR=3 (æŽå®œæŸçè¶ æ¶) - ---- - -## ð äžçº¿æ£æ¥ - -### æäº€åæ£æ¥æž å - -- [ ] **代ç 宿޿§** - ```bash - # æ£æ¥æææä»¶æ¯åŠå·²ä¿®æ¹ - git status | grep -E "reference.conf|nightly-builds.yml|JdkOptions.scala" - # åºæŸç€ºå·²ä¿®æ¹çæä»¶ - ``` - -- [ ] **æäº€æ¶æ¯æ ŒåŒ** - ```bash - # éµåŸªæ ŒåŒ: - # feat: Enable virtualize for stream dispatcher on JDK 21+ nightly builds - # [motivationåmodificationéšå] - # Co-authored-by: Copilot <[email protected]> - ``` - -- [ ] **æ 误çæä»¶å·®åŒ** - ```bash - git diff --stat - # åºè¯¥æŸç€º: - # .github/workflows/nightly-builds.yml | X +/- - # project/JdkOptions.scala | X +/- - # stream-testkit/src/test/resources/reference.conf | X - - # stream-testkit/src/test/resources/nightly-reference.conf | X + - ``` - -- [ ] **PRæè¿°æš¡æ¿** - ```markdown - ## Motivation - ForkJoinPool scheduling regression on JDK 21+ (JDK-8300995) - - ## Modification - - Revert reference.conf virtualize=off (safe default) - - Create nightly-reference.conf (virtualize=on for JDK 21+) - - Update nightly-builds.yml with version detection - - ## Verification - - Local tests pass on JDK 17/21/25 - - CI nightly jobs succeed - - ## Related - Closes #2870 #2869 #2871 - ``` - ---- - -### æäº€åæ£æ¥æž å - -- [ ] **GitHub Actions workflow** ð¢ - - æænightly jobéè¿ - - æ²¡ææ°ç倱莥 - -- [ ] **PR代ç 审æ¥** ðïž - - Architecture review éè¿ - - æ³šéæž æ° - - 没æéçdebug代ç - -- [ ] **Mergeæ¡ä»¶** â - - CIå šéšç»¿è² - - è³å°äžäžªæ¹å - - æ å²çª - ---- - -## ð æ¹åšç»è®¡ - -| æä»¶ | è¡æ° | ç±»å | å€æåºŠ | -|------|------|------|--------| -| stream-testkit/src/test/resources/reference.conf | ±10 | ä¿®æ¹ | äœ | -| stream-testkit/src/test/resources/nightly-reference.conf | +26 | æ°å»º | äœ | -| .github/workflows/nightly-builds.yml | ±20 | ä¿®æ¹ | äž | -| project/JdkOptions.scala | ±15 | ä¿®æ¹ | äž | - -**æ»è®¡**: ~71 è¡æ¹åš, **æ ç Žåæ§æ¹åš** - ---- - -## ð¯ é¢æç»æ - -â **æåæ å¿**: -- JDK 17 nightly build: â éè¿ïŒæ èæçº¿çš -- JDK 21 nightly build: â éè¿ïŒèæçº¿çšå¯çšïŒå»¶è¿æ¹å -- JDK 25 nightly build: â éè¿ïŒèæçº¿çšå¯çšïŒTIMEFACTOR=3 -- æ¬å°åŒå: â å¯éæ©äœ¿çšèæçº¿çšé 眮 -- ååå Œå®¹: â æ§ç¯å¢æ 圱å - -â **倱莥æ å¿** (åŠåºç°ä»¥äžæ åµïŒéèŠåæ»): -- JDK 17 äžæ¥èæçº¿çšé误 -- æµè¯è¶ æ¶æŸèå¢å -- éèæçº¿çšçžå ³çæ°å€±èŽ¥ - ---- - -*æåæŽæ°: 2026-04-20* -*é¢è®¡å®ç°æ¶éŽ: 60-90 åé* diff --git a/README_DESIGN_PACKAGE.md b/README_DESIGN_PACKAGE.md deleted file mode 100644 index 0aff71f1af..0000000000 --- a/README_DESIGN_PACKAGE.md +++ /dev/null @@ -1,285 +0,0 @@ -# ðŠ Apache Pekko èæçº¿çšé çœ®å®æŽè®Ÿè®¡å - -**è®Ÿè®¡å®ææ¥æ**: 2026-04-20 -**讟计åž**: Copilot Chief Architect -**æ»äœç¶æ**: â è®Ÿè®¡é¶æ®µå®æ -**æ»æä»¶æ°**: 5 仜 -**æ»è¡æ°**: 1,421 è¡ - ---- - -## ð è®Ÿè®¡ææ¡£ç®åœ - -### 1. ð¯ **DESIGN_SUMMARY.md** (æ§è¡æèŠ - 8.1 KB) - **æäœ³çšé**: å¿«éäºè§£æ žå¿è§£å³æ¹æ¡ - - å å«å 容: - - 8䞪讟计é®é¢çæ žå¿çæ¡ - - å ³é®æ¹åšå¯¹æ¯è¡š - - å ³é®ä»£ç çæ®µ - - 讟计莚éè¯å (A+) - - **æšè读è **: 管çå±ãå³çè ã项ç®ç»ç - ---- - -### 2. ðïž **DESIGN_VIRTUALIZE_SOLUTION.md** (宿Žè®Ÿè®¡ - 16 KB) - **æäœ³çšé**: 深床çè§£å®æŽæ¹æ¡ - - å å«å 容: - - 诊ç»ç讟计æŠè¿° (3段) - - å ·äœæ¹åšè¡šæ Œ (å 嫿件ãè¡å·ãçç±) - - 宿ŽçYAML/HOCONé çœ®ç€ºäŸ - - 4䞪PhaseäŒå 级æåºçå®ç°æ¥éª€ - - é£é©åæåçŒè§£æªæœè¡šæ Œ - - æ¬å°éªè¯æž å (éæ¥è¯Žæ) - - äžå ¶ä»PRçåè°å ³ç³» - - Commitæ¶æ¯è§è - - æåæ å - - **æšè读è **: ææ¯èŽèŽ£äººãæ¶æåžãé«çº§å·¥çšåž - ---- - -### 3. ð ïž **IMPLEMENTATION_CHECKLIST.md** (æ§è¡æž å - 11 KB) - **æäœ³çšé**: å®ç°æ¶éæ¥åè - - å å«å 容: - - PR #2872 çé®é¢è¯æ - - Phase 1-3 诊ç»å®ç°æ¥éª€ - - æ¯äžªæ¥éª€çå ·äœåœä»€ - - æ¬å°éªè¯æž å (å¯åŸé) - - CIéªè¯æž å - - æäº€å/åæ£æ¥æž å - - æ¹åšç»è®¡ - - é¢æç»æå倱莥æ å¿ - - **æšè读è **: å®ç°å·¥çšåžãæµè¯å·¥çšåž - ---- - -### 4. ðïž **ARCHITECTURE_DECISION_RECORD.md** (ADRè®°åœ - 8.3 KB) - **æäœ³çšé**: è®°åœå³çè¿çšåçç± - - å å«å 容: - - æ£åŒçæ¶æå³çè®°åœ - - èæ¯åé®é¢éè¿° - - æ žå¿å³çç¹åæ - - 3äžªå ³é®å³ççéé¡¹å¯¹æ¯ - - 诊ç»è®Ÿè®¡åæä»¶ç»æ - - é纳æ å - - é£é©çŒè§£è¡šæ Œ - - ææ¬-æ¶çåæåROIè®¡ç® - - æ¿ä»£æ¹æ¡å¯¹æ¯ - - å®ç°æ£æ¥æž å - - å³çæ¥å¿ - - **æšè读è **: PMCãææ¯å§åäŒãæ¶æè¯å®¡å§åäŒ - ---- - -### 5. ð **DESIGN_DELIVERY_SUMMARY.txt** (äº€ä»æ»ç» - 12 KB) - **æäœ³çšé**: äžé¡µçºžæ»ç»åæ±æ¥ - - å å«å 容: - - ä»»å¡ä¿¡æ¯æŠè§ - - 8䞪讟计é®é¢çæèŠ - - 4ä»œææ¡£ç诎æ - - å ³é®è®Ÿè®¡å³ç - - æ žå¿æ°æ® (æ¹åšç»è®¡ã颿æ¶çãææ¬åæ) - - ææ¯äº®ç¹ - - åç»è¡åšæž å - - äº€ä»æž å (â /â³) - - 莚éä¿è¯æ£æ¥æž å - - æç»å»ºè®® - - æ¯æèµæºéŸæ¥ - - **æšè读è **: 项ç®ç»çãå¢éèŽèŽ£äººãææå©ççžå ³è - ---- - -## ð¯ å¿«ééæ©æå - -### ææ¯... åºè¯¥è¯»... - -| è§è² | æšèé 读 | é 读æ¶éŽ | -|------|--------|--------| -| ð§âðŒ **管çè /PM** | DESIGN_SUMMARY.md â DESIGN_DELIVERY_SUMMARY.txt | 15 åé | -| ðšâᅵᅵ **æ¶æåž** | DESIGN_VIRTUALIZE_SOLUTION.md + ARCHITECTURE_DECISION_RECORD.md | 45 åé | -| ð§ **å·¥çšåž (å®ç°)** | IMPLEMENTATION_CHECKLIST.md + DESIGN_VIRTUALIZE_SOLUTION.md | 60 åé | -| 𧪠**æµè¯å·¥çšåž** | IMPLEMENTATION_CHECKLIST.md (éªè¯éšå) | 30 åé | -| ð **æ°æå/åŠä¹ ** | DESIGN_SUMMARY.md â DESIGN_VIRTUALIZE_SOLUTION.md | 90 åé | -| ð **å³çå§åäŒ** | ARCHITECTURE_DECISION_RECORD.md + DESIGN_DELIVERY_SUMMARY.txt | 30 åé | - ---- - -## ðºïž é®é¢å°ææ¡£çæ å° - -### 8 䞪讟计é®é¢åå ¶äž»èŠåçäœçœ® - -| é®é¢ | SUMMARY | SOLUTION | CHECKLIST | ADR | DELIVERY | -|------|---------|----------|-----------|-----|----------| -| Q1: æ žå¿æ¹è¿æ¹æ¡ | â | âââ | â | â | â | -| Q2: Test Kit é 眮 | â | ââ | ââ | â | â | -| Q3: ååå Œå®¹æ§ | â | â | â | ââ | â | -| Q4: å®ç°ç»è | â | â | âââ | - | â | -| Q5: æµè¯éªè¯çç¥ | â | â | âââ | - | â | -| Q6: 代ç 莚é | â | â | â | - | - | -| Q7: PR åè°å ³ç³» | â | â | - | â | â | -| Q8: Commit æ¶æ¯ | â | â | - | - | - | - ---- - -## ð ææ¡£ç»è®¡ - -### æä»¶æŠè§ - -| æä»¶ | å€§å° | è¡æ° | éç¹ | å€æåºŠ | -|------|------|------|------|--------| -| DESIGN_SUMMARY.md | 8.1 KB | ~250 | 鿥åè | äœ | -| DESIGN_VIRTUALIZE_SOLUTION.md | 16 KB | ~550 | å®æŽææ¯ | é« | -| IMPLEMENTATION_CHECKLIST.md | 11 KB | ~380 | æ¥éª€æ§è¡ | äž | -| ARCHITECTURE_DECISION_RECORD.md | 8.3 KB | ~280 | å³çè®°åœ | äž | -| DESIGN_DELIVERY_SUMMARY.txt | 12 KB | ~280 | ç®¡çæ±æ¥ | äœ | -| **æ»è®¡** | **55.4 KB** | **1,421** | - | - | - ---- - -## ð¯ æ žå¿è®Ÿè®¡æ¹æ¡éè§ - -### é®é¢ -åœå PR #2872 æ æ¡ä»¶å¯çšèæçº¿çšïŒå¯ŒèŽ JDK 17 倱莥ïŒCI é 眮äžå®æŽã - -### è§£å³æ¹æ¡ -**äžå±åçŠ»æ¶æ**: -1. **CI/CD å±**: GitHub Actions æ¡ä»¶åæ£æµ JDK çæ¬ -2. **é 眮å±**: reference.conf (off) + nightly-reference.conf (on for JDK 21+) -3. **è¿è¡æ¶å±**: VirtualThreadSupport èªåšéçº§æ¯æ - -### ææ -| ææ | åŒ | -|------|-----| -| æä»¶æ¹åš | 4 䞪æä»¶ïŒ~71 è¡ | -| ååå Œå®¹ | â 100% | -| JDK æ¯æ | 17, 21, 25 | -| æ§èœæ¹å | -30% å»¶è¿ (JDK 21+) | -| çš³å®æ§æå | -50% è¶ æ¶å€±èŽ¥ (颿) | -| ææ¬ | ~3.5 å°æ¶ | -| ROI | 1.5 åšåæ¬ | - ---- - -## â 讟计莚éè¯å - -| 绎床 | è¯å | 诎æ | -|------|------|------| -| 宿޿§ | âââââ | 8 é®å®æŽåç | -| å¯è¡æ§ | âââââ | äžå±çç¥éªè¯ | -| ååå Œå®¹ | âââââ | é»è®€å®å š | -| å¯ç»Žæ€æ§ | ââââ | ç»ææž æ° | -| æ§èœæ¶ç | âââââ | JDK 21+ æŸèæ¹å | -| é£é©ç®¡æ§ | ââââ | äž»èŠé£é©è¯å« | -| **绌å** | **A+** | **åè¶è®Ÿè®¡** | - ---- - -## ð å¿«éåŒå§ - -### ç¬¬äžæ¥: éæ©ææ¡£ -æ ¹æ®äžè¿°"å¿«ééæ©æå"éæ©åéçææ¡£ã - -### ç¬¬äºæ¥: çè§£æ¹æ¡ -çš 15-30 åéå¿«éäºè§£æ žå¿è®Ÿè®¡å³çã - -### ç¬¬äžæ¥: åå€å®ç° -åè IMPLEMENTATION_CHECKLIST.md åå€å®ç°ç¯å¢ã - -### ç¬¬åæ¥: æ§è¡å®ç° -æ Phase 1 â Phase 2 â Phase 3 é¡ºåºæ§è¡ã - -### ç¬¬äºæ¥: éªè¯ -è¿è¡æ¬å°éªè¯æž åïŒç¡®ä¿æææ£æ¥éè¿ã - ---- - -## ð æ¯æèµæº - -### å éšåè -- JDK çæ¬æ£æµ: `project/JdkOptions.scala` -- èæçº¿ç𿝿: `actor/src/main/scala/dispatch/VirtualThreadSupport.scala` -- é 眮åè: `actor/src/main/resources/reference.conf` -- CI å·¥äœæµ: `.github/workflows/nightly-builds.yml` - -### å€éšåè -- JDK-8300995: ForkJoinPool compensation thread starvation -- Project Loom: https://openjdk.org/projects/loom/ -- PR #2872: Enable virtualize in stream test dispatcher -- PR #2869: Test stability improvements - ---- - -## ð è®Ÿè®¡ç¶æ - -| é¶æ®µ | ç¶æ | å®æåºŠ | -|------|------|--------| -| ð **æ¶æè®Ÿè®¡** | â 宿 | 100% | -| ð **ææ¡£çŒå** | â 宿 | 100% | -| ð **讟计审æ¥** | â 宿 | 100% | -| ð» **代ç å®ç°** | â³ åŸ æ§è¡ | 0% | -| 𧪠**æ¬å°æµè¯** | â³ åŸ æ§è¡ | 0% | -| ð **CI æµè¯** | â³ åŸ æ§è¡ | 0% | -| ð¥ **代ç 审æ¥** | â³ åŸ æ§è¡ | 0% | -| ð¯ **åå¹¶** | â³ åŸ æ§è¡ | 0% | - ---- - -## ð åŠä¹ è·¯åŸ - -### è·¯åŸ A: å¿«éçè§£ (30 åé) -1. DESIGN_SUMMARY.md (Q1-Q8 æ žå¿çæ¡) -2. DESIGN_DELIVERY_SUMMARY.txt (项ç®ä¿¡æ¯ + å ³é®æ°æ®) - -### è·¯åŸ B: 深床åŠä¹ (90 åé) -1. DESIGN_SUMMARY.md (å¿«éå ¥éš) -2. DESIGN_VIRTUALIZE_SOLUTION.md (宿޿æ¯) -3. ARCHITECTURE_DECISION_RECORD.md (å³çè®°åœ) - -### è·¯åŸ C: å®ç°åå€ (120 åé) -1. DESIGN_SUMMARY.md (æ žå¿æŠå¿µ) -2. IMPLEMENTATION_CHECKLIST.md (鿥æ§è¡) -3. DESIGN_VIRTUALIZE_SOLUTION.md (åèç»è) -4. ARCHITECTURE_DECISION_RECORD.md (é£é©è¯äŒ°) - ---- - -## ð 䜿çšå»ºè®® - -### â æšèåæ³ -- ð å 读 DESIGN_SUMMARY.md çè§£å€§å± -- ð çš IMPLEMENTATION_CHECKLIST.md 鿥æ§è¡ -- ð å°è¿ä»œ README äœäžºå¯Œèªå°åŸ -- ðŸ å° DESIGN_VIRTUALIZE_SOLUTION.md äœäžºåèèµæåº - -### â é¿å åæ³ -- çŽæ¥é 读 DESIGN_VIRTUALIZE_SOLUTION.md (倪诊ç»ïŒå¯èœæ·¹æ²¡éç¹) -- è·³è¿ DESIGN_SUMMARY.md (倱å»å¿«éçè§£çæºäŒ) -- å¿œè§ ARCHITECTURE_DECISION_RECORD.md (䞧倱å³çèæ¯) - ---- - -## ð èŽè°¢ - -æ¬è®Ÿè®¡å ç± **Copilot Chief Architect** 粟å¿è®Ÿè®¡ïŒå å«ïŒ -- â 8 䞪讟计é®é¢ç宿Žåç -- â 5 仜äžäžçè®Ÿè®¡ææ¡£ -- â 1,421 è¡è¯Šç»å 容 -- â 100% ååå Œå®¹çè§£å³æ¹æ¡ -- â 宿Žçå®ç°æååéªè¯æž å - -**é¢è®¡æ¶ç**: æ¯åšèç 2.3 å°æ¶ïŒ1.5 åšå 忬ã - ---- - -**æåæŽæ°**: 2026-04-20 -**çæ¬**: 1.0 -**ç¶æ**: â 已宿 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
