Repository navigation
Load comments and users in chunks in wp comment list and wp user list - #666
swissspidy wants to merge 1 commit into
Conversation
…ist` Like `wp post list`, query the IDs of all matching comments or users first, then load the objects a chunk at a time and clear the object cache after each chunk. Combined with the formatter streaming CSV and JSON output for iterators, the memory use no longer grows with the number of items. If a displayed field is read through the object cache, like user meta or the post title of a comment, the cache is kept. Also only compute the `url` field of comments, users and terms when it is displayed. For comments it took about 40% of the time. The chunk size and the cache helper move to CommandWithDBObject. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D26yjkN2BiqCXT6p6o1WqS
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (7)
💤 Files with no reviewable changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review. 📝 WalkthroughWalkthroughComment and user listings now load eligible results in chunks. Comment, user, and term listings add URLs only when requested. Added feature scenarios check large comment and user listings and CSV output. ChangesEntity listing updates
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Refactor Sequence Diagram(s)sequenceDiagram
participant CLI
participant Comment_Command
participant Database
participant Formatter
participant RuntimeCache
CLI->>Comment_Command: request comment listing
Comment_Command->>Database: retrieve matching IDs
Comment_Command->>Database: load comment batches
Comment_Command->>Formatter: yield comments in ID order
Comment_Command->>RuntimeCache: clear cache when requested fields permit
sequenceDiagram
participant CLI
participant User_Command
participant Database
participant Formatter
participant RuntimeCache
CLI->>User_Command: request user listing
User_Command->>Database: retrieve matching IDs
User_Command->>Database: load user batches
User_Command->>Formatter: yield users in ID order
User_Command->>RuntimeCache: clear cache unless requested fields may need user meta
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The chunked listing changes appear mergeable after normal checks; no concrete listing regression remains identified. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Stacked on #663. It applies the same approach as
wp post listto comments and users. Please merge #663 first; this PR's base will then switch tomain.Changes
wp comment listandwp user listquery the IDs of all matching items first, then load the objects a chunk at a time and clear the object cache after each chunk. Together with Stream CSV and JSON output when items are given as an iterator wp-cli#6420 (CSV and JSON streamed from iterators), memory no longer grows with the number of items.urlonly when displayed: theurlfield of comments, users and terms is now only computed when it's requested. For comments it was about 40% of the time.Post_CommandtoCommandWithDBObject.--format=idsand--format=countkeep their existing path.Results
--format=csvwp comment list, 100k commentswp user list, 50k usersRun time drops by about 40% for both. The output is identical to
main.Tests
features/comment.featureandfeatures/user.feature. Each lists more items than one chunk (1,200 comments, 600 users) and checks:--format=ids,urlfield for comments, and a user meta field for users.comment.feature,user.feature,term.featureandpost.featurepass locally on MariaDB and SQLite.🤖 Generated with Claude Code
https://claude.ai/code/session_01D26yjkN2BiqCXT6p6o1WqS
Summary by CodeRabbit