Open raararaara opened 1 month ago
[!IMPORTANT]
Review skipped
Draft detected.
Please check the settings in the CodeRabbit UI or the
.coderabbit.yaml
file in this repository. To trigger a single review, invoke the@coderabbitai review
command.You can disable this status message by setting the
reviews.review_status
tofalse
in the CodeRabbit configuration file.
This update enhances error handling and control flow during client detachment and deactivation processes, ensuring system consistency and integrity. Key enhancements include new methods for simulating document attachment and activation, improved backend interactions during client deactivation, and effective presence management. The housekeeping process has been refined to clean up presence more efficiently, addressing potential growth in the presence snapshot.
File | Change Summary |
---|---|
client/client.go | Added PretendAttach and PretendActivate methods for simulating attachment and activation; improved error handling in the Detach method. |
pkg/document/document.go | Introduced ToDocument function for converting InternalDocument to Document ; added setInternalDoc for better internal document management. |
pkg/document/internal_document.go | Added SyncCheckpoint and ToDocument methods to enhance synchronization and conversion functionalities. |
server/clients/clients.go | Modified Deactivate function to utilize *backend.Backend , ensuring proper client info retrieval and document update logic. |
server/rpc/yorkie_server.go | Updated DeactivateClient to use s.backend instead of s.backend.DB , improving backend interactions. |
server/server.go | Altered DeactivateClient and RegisterHousekeepingTasks methods to integrate rpcAddr , enhancing client management and housekeeping task registration. |
build/charts/yorkie-cluster/templates/yorkie/deployment.yaml | Added GATEWAY_HOST environment variable to Kubernetes deployment for flexible service discovery. |
build/charts/yorkie-cluster/values.yaml | Introduced a new gateway configuration option to enhance service routing capabilities. |
Objective | Addressed | Explanation |
---|---|---|
Handle Presence Cleanup in Housekeeping Process (#602) | β | |
Ensure presence is cleared during document detachment | β | Presence is now correctly managed during detachment processes. |
π In warren deep, where shadows play,
Changes weave a bright array.
With presence clear, and logic sound,
The rabbit hops where joy is found!
π₯β¨
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?
Attention: Patch coverage is 27.45098%
with 37 lines
in your changes missing coverage. Please review.
Project coverage is 50.82%. Comparing base (
a4ce314
) to head (3c5f5e1
). Report is 15 commits behind head on main.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
@hackerwins
The answer to question B is:
During the deactivate process, the VerifyAccess()
was performed, and a test case that failed was found during this process, such as authorization webhook test.
For the remaining questions, I look forward to hearing ideas from others.
@hackerwins I think using yorkie gateway to delegate detach is a good idea, considering that the housekeeping server will send only necessary request to the server to delegate. I'm wondering what will happen when detach is not performed on other documents that user was attached, and then deactivation occurs?
@krapie Could you please explain in more detail what you are curious about?
Are you referring to a situation where document detach fails and only client deactivate occured during the process of client deactivation, specifically clients.deactivate()
?
I have identified an issue related to Authorization as pointed out by @hackerwins . Specifically, the issues are as follows:
verifyAccess
process is required during deactivate
or detach
.
deactivate
or detach
request from an external source, the client's token value is passed along with the request.To address this issue, I'm considering the following two actions:
Issuing a Server-Specific Token:
We plan to generate a shared token for all servers, allowing us to skip the verifyAccess
step for server-specific tokens. We are considering methods such as injecting this token through the defaultFlag
or a DevOps manifest.
Defining a systemService
:
Currently, only rpcService
and adminService
are defined. We propose defining a new systemService
to separate the logic for inter-server communication from existing services.
Given the additional work required, I will mark this PR as a draft.
And of course, any feedback or comments are welcome!
@raararaara My apologizes, I was asking the wrong question.
What this PR does / why we need it?
This PR addresses the absence of presence clearing logic in document detach during client deactivation for Housekeeping compared to document detach by the SDK. By implementing server-side presence clearance, this PR ensures that presence is correctly handled during the housekeeping process.
Any background context you want to provide?
The changes include: 1) Performing document detach with client deactivation and updating the SyncedSeq solely through the database -> making an API call similar to the SDK's document detach This change allows presence to be cleared through
client.detach()
during deactivation and detach processes, simplifying the process and omitting the need for updating SyncedSeq separately. In case of deactivation failure, some documents may not detach completely, but another deactivation attempt is possible. 2) Consideration for clustering and sharding per document Taking into account document structures sharded across clusters by keys, the update allows one server to act as a client while multiple servers can perform detach operations.What are the relevant tickets?
Fixes #602
Special notes for your reviewer:
Does this PR introduce a user-facing change?:
Additional documentation:
Checklist:
Summary by CodeRabbit
Summary by CodeRabbit
New Features
Bug Fixes
Chores