-
Notifications
You must be signed in to change notification settings - Fork 3.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix an issue with deleting frames #8872
Conversation
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThe changes in the Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
cvat-core/src/frames.ts (2)
570-572
: Restore previous cache carefully.Restoring from
previousCache
is a neat fallback mechanism if new metadata loading fails. Consider logging or handling partial updates for better debugging, especially if a half-updated cache can cause inconsistent data.
631-631
: Improve clarity on destructured meta.
const { meta: prevMeta } = cached;
is good, but consider a more direct naming (e.g.,oldMeta
) for clarity and consistency.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
cvat-core/src/frames.ts
(6 hunks)
🔇 Additional comments (8)
cvat-core/src/frames.ts (8)
42-43
: Consider adopting consistent resolved/promise states.
The union approach (holding either a FramesMetaData
or a Promise<FramesMetaData>
) helps lazy-load metadata. However, be mindful of potential edge cases if code assumes a resolved state prematurely. Continue ensuring all consumers handle both states safely.
44-47
: Enum-based approach improves readability.
Using DeletedFrameState
clarifies frame deletion statuses and avoids "magic strings." This design is more resilient and discoverable.
90-96
: Validate opposite state reset workflow.
The logic for toggling between DELETED
and RESTORED
is solid. Nonetheless, ensure that simultaneous toggles (e.g., concurrent modifications) do not cause race conditions. If concurrency is a concern, consider adding suitable synchronization or queueing.
566-566
: Cache assignment could introduce race conditions.
Reassigning frameMetaCache[id]
after loading new metadata is acceptable, but be cautious of concurrent requests that might overwrite or revert the cache unexpectedly.
578-580
: Immediate promise resolution ensures efficiency.
Returning a pre-resolved promise when the cache is already available is an efficient short-circuit. This prevents unnecessary server calls and reduces latency.
Line range hint 633-646
: Ensure chunk redefinition handles unsaved data.
When meta.chunksUpdatedDate
changes, clearing old data is correct. However, double-check for any unsaved or ephemeral data that could be lost in the process.
647-658
: Merging updated fields with new metadata is robust.
Applying the local changes from prevMeta
to meta
ensures user actions aren't lost. This approach is well-organized. Nonetheless, consider adding logs or metrics if frequent merges lead to confusion or performance concerns.
810-816
: Throwing an error on uninitialized or still-pending metadata is prudent.
The explicit error message helps debugging. Consider clarifying next steps in a user-facing message if this error can bubble up to the UI.
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #8872 +/- ##
===========================================
- Coverage 73.90% 73.90% -0.01%
===========================================
Files 408 408
Lines 44131 44163 +32
Branches 3986 3993 +7
===========================================
+ Hits 32615 32637 +22
- Misses 11516 11526 +10
|
Quality Gate passedIssues Measures |
Motivation and context
Previously, in the Honeypots patch, we introduced periodic metadata updates to allow the UI to reflect chunk changes dynamically. However, this introduced a couple of issues:
Steps to Reproduce the Frame Deletion Issue
jobMetaDataReloadPeriod
inconfig.ts
ofcvat-core
to a small interval, such as 15 seconds (the default is 1 hour)./data/meta
request is sent.jobMetaDataReloadPeriod
to elapse./data/meta
request is sent.Resolution
To fix this, I removed the secondary storage of
jobMeta
inframeDataCache
. Now, it uses an asynchronous getter that fetches data directly fromframeMetaCache
. Having two caches for the same data caused synchronization issues, which led to this bug.To fix second issue I added merge logic inside getFramesMeta function that will update new object with unsaved data.
How has this been tested?
Checklist
develop
branch[ ] I have updated the documentation accordingly(cvat-canvas,
cvat-core,
cvat-data and
cvat-ui)
License
Feel free to contact the maintainers if that's a concern.
Summary by CodeRabbit
New Features
Bug Fixes
Refactor