These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | c299f76 | |
|---|---|---|
| Author: | JiHwan Yim | |
| Committer: | GitHub | |
Add disable_presence Document option for presence-free docs (#1841) Doc-scope opt-out so a document can declare it does not produce, consume, or store presence. First-attach fixate via mongo $setOnInsert; immutable thereafter. PushPull entry strip, snapshot serialization, and read path all enforce on the server side. Go SDK exposes WithDisablePresence and gates Document.Update presence emit based on the server-fixated value carried back in the attach response. Driven by insurance /car prod accumulation (~28K stale actors, ~170KB response). See the devops repo task doc for the measurement trail and the four-candidate evaluation that selected this option.
The documentation is generated from this commit.
| Commit: | 4f68cfd | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add per-project ChannelSessionTTL with admin override (#1827) ChannelSessionTTL has been a single global server config; this PR makes it tunable per project so operators can shape presence-count behavior per room (e.g. raise the TTL so a small room "feels" more populated by keeping recent visitors counted longer). api/types.Project gains ChannelSessionTTL (string) with a parse helper, mirrored on ProjectInfo and UpdatableProjectFields. The admin RPC accepts the field via UpdatableProjectFields with a new channel_session_ttl validator enforcing [1s, 5m], and bidirectional proto<->types converters wire it through both directions. channel.Manager.CleanupExpired resolves the TTL per project with per-tick memoization, falling back to the server-wide default on lookup or parse failure. The cleanup interval and count-cache TTL stay global. The yorkie project CLI gains --channel-session-ttl and a new column on ls -v; the flag is gated on .Changed so unrelated updates do not reset the stored value. server/config.DefaultChannelSessionTTL is now an alias of the database constant, removing the duplicate-constant drift risk. New projects default to 15s (matching the prior global default); existing rows with empty stored value fall back at runtime, so no DB migration is required. Design: docs/design/per-project-channel-session-ttl.md Dashboard counterpart: yorkie-team/dashboard#298 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| Commit: | 551a4ba | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add disable_gc opt-out for GC-free attach workloads (#1822) ChangePack.VersionVector is returned on every PushPull so clients can run tombstone GC against the server-computed minVV. The VV size grows with the number of unique actors that have ever written to the document. For documents that only use commutative CRDTs (Counter, primitive value replacement), the client never produces tombstones and the response VV serves no purpose on the receiving end. The server also pays the per-push UpdateMinVersionVector cost for every attached client. Add a per-request disable_gc flag carried on AttachDocumentRequest (field 4) and PushPullChangesRequest (field 5). RPC handlers read the flag into packs.PushPullOptions.DisableGC; when set, pullPack skips UpdateMinVersionVector entirely (no row written to versionvectors for this client) and nils resPack.VersionVector for both the change-info and snapshot pull paths. The flag is not persisted on the server. Each PushPull reads it from the request alone. A persisted design was tried first and rejected because the touch-point count favors stateless: persistence would have added a BSON field, an AttachDocument signature change cascading through ~30 test call sites, DeepCopy and cache-coherence updates — all to save one bool on the wire. DetachDocument and RemoveDocument deliberately do not carry the flag. Each calls PushPull at most once per session and one extra minVV write at terminus is negligible. Go SDK exposes client.WithDisableGC() as an attach option. The flag is recorded on the local Attachment so every subsequent PushPullChanges carries it. Use only with Counter or primitive workloads; misuse on a document that uses Tree, Text, or Array deletions leads to undefined GC behavior on this client.
| Commit: | 085ecad | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Cache project stats counts to keep GetProjectStats fast at scale (#1819) GetProjectStats (dashboard) calls CountDocuments on the clients and documents collections per request. For a production project with asynchronously by a new leader-only housekeeping task every 5 minutes (configurable). GetProjectStats reads the cached values via a projection-only FindOne, bypassing ProjectCache to avoid compounding staleness. The count queries run against the MongoDB secondary so the primary stays clean. ChannelsCount stays dynamic because it is an in-memory cluster RPC fanout, already fast. The refresh cursor uses an inclusive boundary on the first cycle so the auto-created default project (whose _id equals ZeroID) is walked like any other project. New API field stats_updated_at on GetProjectStatsResponse lets the dashboard show "Updated X minutes ago" and detect cold start via IsZero(). New CLI flag --housekeeping-project-stats-refresh-interval (default 5m) controls the refresh cadence; explicit "0s" disables the task entirely.
| Commit: | 065e4bb | |
|---|---|---|
| Author: | JOOHOJANG | |
| Committer: | GitHub | |
Channel RPC consolidation + PeekChannel (#1805) Live presence counters scaled poorly under the previous design. Joining a channel cost three round trips (ActivateClient, AttachChannel, RefreshChannel), every heartbeat hit MongoDB via FindActiveClientInfo, and dead sessions lingered for the full 60s TTL inflating the count. This change folds those costs down in four steps: - RefreshChannel handles ActivateClient + AttachChannel on its first call (empty session_id), returning the assigned client_id and session_id in the response. Subsequent heartbeats are unchanged. - The heartbeat path no longer calls FindActiveClientInfo. The in- memory channel session map is the sole liveness proof; a forged session_id cannot reach it because the server issued it. - Default ChannelSessionTTL drops from 60s to 15s. Heartbeat cadence on clients should be co-tuned to TTL/3 (5s) in a follow-up. - PeekChannel is a new stateless RPC that reads session_count without creating a Session, sending broadcasts, or paying pubsub fan-out cost. It's the right path for read-only displays of the count. presence design doc is updated to reflect the new flow. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| Commit: | 5fa05c7 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Fix Array.MoveAfter convergence with LWW position register (#1762) Replace movedFrom+cascade with Kleppmann's LWW position register to fix non-convergence when the same element is concurrently moved multiple times (#1416). Core changes: - Separate element identity from position: ElementEntry holds the logical value, RGATreeListNode is a position slot in the RGA list - MoveAfter creates a new position node and LWW-updates the element's position. Losing moves still create dead position nodes so that concurrent operations can reference them - Two maps: nodeMapByCreatedAt (position lookup) and elementMapByCreatedAt (element lookup) - LastCreatedAt returns PositionCreatedAt for stable position reference - PosCreatedAt conversion moved to call sites (MoveAfterByIndex, InsertIntegerAfter) to avoid element/position identity confusion - DeepCopy preserves dead position nodes and posMovedAt metadata - Snapshot serialization includes dead position nodes and move metadata via three new RGANode proto fields - GC support for dead position nodes via GCPair registration - Document set+move undo issue in undo-redo.md (requires proto change) Tests: - TestArrayConcurrencyTable: 49 op-pair cases - TestComplicatedArrayConcurrency: 4 double-move cases - Push-after-move, insert-after-move convergence tests Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| Commit: | bcff432 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add Counter dedup mode with HyperLogLog for UV measurement (#1733) Add a dedup Counter variant (IntegerDedupCnt) that uses HyperLogLog to count unique actors, enabling UV (Unique Visitor) measurement without external analytics infrastructure. Key changes: - HyperLogLog implementation (precision 14, ~16KB, ~2% error) using xxhash64 for uniform register distribution - New ValueType INTEGER_DEDUP_CNT encodes dedup mode at creation, ensuring all replicas know the mode via Set operations - IncreaseOperation carries optional actor field for dedup tracking - User-facing API: SetNewDedupCounter(key) + counter.Add(actor) - HLL state persisted in snapshots via hll_registers protobuf field - Dedup Counter blocks plain Increase (requires actor), enforces delta == 1, validates non-empty actor, and does not support undo - Design document: docs/design/counter-dedup.md Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
| Commit: | d7154c2 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Fix tree divergence across snapshot by persisting MergedFrom (#1729) TreeNode accumulated four runtime-only merge fields during the concurrent merge/split work (#1722-#1727), none of which were written to the snapshot encoding. A replica that attached after a remote merge and then received a concurrent insert targeting the merged-away parent would silently drop the insert, since FindTreeNodesWithSplitText could not find mergedInto on the tombstoned source. Existing integration tests missed the bug because they all run within a single session. Persist MergedFrom and MergedAt on moved children as two new optional TreeNode proto fields. MergedAt must be stored explicitly rather than derived from source.removedAt, because remove() overwrites removedAt under LWW when a later concurrent tombstone hits the same node and would produce a wrong causal boundary for SplitElement's Fix 8 check. On snapshot load, Tree.rebuildMergeState walks the tree and sets mergedInto on each source parent from the moved child's current location, falling back to source.removedAt for mergedAt on pre-fix snapshots. mergedChildIDs is removed entirely and recomputed on demand from target.Children(true) filtered by MergedFrom. Final merge-field count on TreeNode: 4 -> 3. Proto change is a backwards-compatible optional field addition. Verified by two new api/converter regression tests covering the contained-merge-and-insert and overlapping-merge-and-merge scenarios across a SnapshotToBytes roundtrip, a pkg/document/crdt unit test pinning the MergedAt immutability invariant, and the full integration suite. Design doc and two previously-stale task files updated along the way. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| Commit: | b36ac87 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add CompactDocumentByAdmin RPC to AdminService (#1702) Add a `force` boolean field to enable compaction even when clients are attached to the document. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| Commit: | 52a45a4 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add tree-level schema support (#1691) Add TreeNodeRule message with node_type, content, marks, and group fields to support structural constraints inside yorkie.Tree. Extend the existing Rule message with a repeated tree_nodes field, which is backward compatible (empty by default for non-tree rules). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
| Commit: | 29e1bed | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add attributes_to_remove support to Operation.Style for text undo/redo (#1678) Add the ability to remove text style attributes via Operation.Style, enabling undo/redo of text style operations in the JS SDK. This follows the existing TreeStyle pattern with attributesToRemove. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
| Commit: | 550adf0 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Replace WatchDocument and WatchChannel with unified Watch RPC (#1666) Consolidate two separate server-streaming RPCs into a single Watch RPC that supports multiplexing document and channel resources on one stream. The Watch request carries a list of ResourceDescriptors (document or channel), and responses use tagged unions to demux events per resource. Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
| Commit: | 67e6d57 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add active clients metric to project stats (#1660) Add activeClientsCount and activeClients time-series data to the GetProjectStats API, allowing users to see how many clients were active in a given time period. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
| Commit: | 18144cd | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Refactor channel terminology from presence to session (#1655) Rename the term "presence" to "session" across channel logic. Update Protobuf field name from "count" to "session_count" in channel API responses.
| Commit: | b7dc81e | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Batch cluster.GetChannels to reduce cluster RPC calls (#1636) Previously, hierarchical channels (e.g. room-1 and room-1.user-1) were requested separately, resulting in multiple ClusterService calls. This change refactors GetChannels to retrieve multiple related channels in a single request, grouping hierarchical channel queries together. As a result, the total number of cluster RPC calls is reduced. Benchmarks are added to measure GetChannels performance with hierarchical channel structures.
| Commit: | 6510b96 | |
|---|---|---|
| Author: | kokodak | |
| Committer: | GitHub | |
Remove non-expiring option for project invite tokens (#1630) To simplify invite management, non-expiring invite links have been removed. Invite tokens now expire after 1 hour, 24 hours, or 7 days, avoiding the need for explicit revocation logic.
| Commit: | d202b00 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add project member management functionality (#1616) Introduce project member management features, including member roles and invite workflows. Projects now maintain explicit memberships with support for creating and accepting invites, listing and removing members, and updating member roles (owner, admin, member).
| Commit: | c476b94 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Enhance statistics with active documents and channel count (#1610) This commit introduces active document analytics and aggregated channel count metrics across the cluster. Document attachment events are now collected in Yorkie Analytics and streamed through a new document-events Kafka topic. These events are persisted in StarRocks via a dedicated table and routine load, enabling tracking of active documents for monitoring and analysis. Channel total counts are aggregated at the server level using a broadcast (scatter–gather) pattern, allowing consistent cluster-wide results. The Admin Project Stats API has been extended to expose both active document metrics and total channel counts per project.
| Commit: | e825516 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Refactor channel metrics to be project-aware (#1603) This commit refactors Channel Manager to be project-aware and simplifies the channel metrics structure. Channel Manager now integrates with a database to resolve project information, allowing Prometheus channel metrics to include the project name as a label. New aggregated channel and session statistics were added to improve observability. The channel summary field was renamed from presenceCount to sessionCount across APIs and documentation to better reflect its meaning. --------- Co-authored-by: Youngteac Hong <susukang98@gmail.com>
| Commit: | 8757e54 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Add ListChannels to AdminService and ClusterService (#1602) Introduce ListChannels API for both AdminService and ClusterService to support channel listing and query-based filtering. The server uses a scatter-gather broadcast approach to aggregate results across cluster nodes, ensuring consistent presence counts and proper deduplication.
| Commit: | 42f7c8d | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Improve Project Caching and Invalidation Consistency (#1600) Enhanced the project caching mechanism with a dual-lookup strategy that uses project ID as the primary key and API key as a secondary key to achieve faster and more reliable lookups.
| Commit: | b7db11c | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Introduce GetRevision RPC and fix revision restore (#1595) Ensure the correct project instance is passed to PushPull during revision restore to prevent unnecessary revision and snapshot creation. Add the GetRevision RPC to YorkieService and update ListRevisions and RestoreRevision handlers to enforce proper access control and consistent document retrieval.
| Commit: | 8e058e5 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Collect active channel and session metrics (#1588) This commit adds analytics support for tracking active channels and sessions. New Kafka topics (channel-events, session-events) and corresponding StarRocks tables with routine loads are introduced, as these event types require separate schemas from user-events. Admin API project stats are updated to expose active channel and session metrics, and Yorkie Analytics Helm chart includes necessary resource changes. When running the server with analytics enabled, additional arguments are now required: --kafka-user-events-topic, --kafka-channel-events-topic, and --kafka-session-events-topic. Yorkie Analytics may need to be restarted due to added and updated resources, and the previous events routine load has been renamed to user-events with new routine loads added for channel and session events.
| Commit: | 18912f9 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Refactor revision handling (#1587) Simplified the revision by removing the seq field and reordering fields for consistency. Added sharding configuration for the revisions collection and updated sorting logic to rely on the document ID.
| Commit: | 1a2eba8 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Update revision creation with YSON format (#1584)
| Commit: | d65033e | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add document revision management (#1582) This commit introduces a revision management system to Yorkie. It adds new RPC methods that allow clients to create, list, retrieve, restore, and implements the corresponding backend logic with proper validation and error handling. The commit also introduces an optional per-project automatic revision feature, enabling snapshots to automatically create revisions when the project-level flag is turned on.
| Commit: | 0102a3d | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Introduce hierarchical channel keys (#1559) Introduced an Admin API to retrieve channel presence information without SDK attachment, supporting hierarchical channel keys with optional sub-path aggregation and internal shard-aware routing through the ClusterService.
| Commit: | 38c6df5 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Rename Presence to Channel (#1557) This commit refactored Presence to a more general-purpose Channel. The new Channel abstraction supports both presence tracking and message broadcasting within the same interface. All presence-related RPC methods have been renamed to their channel-based counterparts: AttachChannel, DetachChannel, RefreshChannel, and WatchChannel. Request and response message types have been updated to align with the channel architecture, and a new ChannelEvent type was introduced for unified event streaming and management. This change introduces breaking updates—existing integrations using Presence must migrate to the new Channel APIs.
| Commit: | 0a07d07 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Move Broadcast from Document to Presence (#1556) This commit refactored the broadcast system to use Presence as the primary communication channel instead of Document. PresenceEvent now supports broadcast events with publisher, topic, and payload details. It also removed document-based broadcast logic and updated request structures to use presence keys rather than document identifiers.
| Commit: | be279a0 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add InvalidateCache RPC for cluster-wide cache invalidation (#1553) This commit introduces InvalidateCache in ClusterService, enabling targeted cache invalidation by type and key. The backend now broadcasts invalidation requests across all cluster nodes to ensure cache consistency in distributed environments. Additionally, project caches are now automatically invalidated after project updates or key rotations. To support efficient communication, cluster client pooling mechanism has been introduced, improving the distribution of cache invalidation events.
| Commit: | dd12fb8 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Enhance presence with manual and realtime sync (#1546) - Modified `refreshPresence` to return presence count. - Updated client methods to use `WithKey` instead of `WithDocKey`.
| Commit: | f91eb51 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Add presence management for real-time user tracking (#1526) This commit introduces a new presence management system to track users in real time. A dedicated `presence` package and `Manager` struct handle user sessions and counting. The Backend now supports presence-related operations such as `Attach` and `Detach`. The server provides `AttachPresence`, `DetachPresence`, and `WatchPresence` methods to manage presence and stream real-time count updates. Document status handling has been updated to use `StatusType` for consistent status semantics.
| Commit: | 3081147 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Add presence management for real-time user tracking (#1526) This commit introduces a new presence management system to track users in real time. A dedicated `presence` package and `Manager` struct handle user sessions and counting. The Backend now supports presence-related operations such as `Attach` and `Detach`. The server provides `AttachPresence`, `DetachPresence`, and `WatchPresence` methods to manage presence and stream real-time count updates. Document status handling has been updated to use `StatusType` for consistent status semantics.
| Commit: | e931096 | |
|---|---|---|
| Author: | Hackerwins | |
| Committer: | Youngteac Hong | |
Add Dedicated Presence
| Commit: | ff92d34 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Add presence management for real-time user tracking This commit introduces presence management to track users in real time. A new presence package and Manager struct handle sessions and counting, while the Backend now supports operations such as Attach, Detach. The server includes AttachPresence, DetachPresence, and WatchPresence methods to manage presence and stream count updates. Document status handling was updated to use attachable.StatusType.
| Commit: | 9b23f80 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Add presence management for real-time user tracking This commit introduces presence management to track users in real time. A new presence package and Manager struct handle sessions and counting, while the Backend now supports operations such as Attach, Detach. The server includes AttachPresence, DetachPresence, and WatchPresence methods to manage presence and stream count updates. Document status handling was updated to use attachable.StatusType.
| Commit: | df410b7 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Add presence management for real-time user tracking This commit introduces presence management to track users in real time. A new presence package and Manager struct handle sessions and counting, while the Backend now supports operations such as Attach, Detach. The server includes AttachPresence, DetachPresence, and WatchPresence methods to manage presence and stream count updates. Document status handling was updated to use attachable.StatusType.
| Commit: | 7d84d17 | |
|---|---|---|
| Author: | Byeonggyu Park | |
| Committer: | GitHub | |
Move Snapshot configuration to project level (#1527) Previously, snapshot-related configurations were set at the server level and could be changed when creating the server. This change moves those configurations to the project level, allowing users to update them via the UpdateProject API or the project update CLI command.
| Commit: | 4400627 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Add presence management for real-time user tracking This commit introduces presence management to track users in real time. A new presence package and Manager struct handle sessions and counting, while the Backend now supports operations such as Attach, Detach. The server includes AttachPresence, DetachPresence, and WatchPresence methods to manage presence and stream count updates. Document status handling was updated to use attachable.StatusType.
| Commit: | a510719 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
[WIP] Introduce presence.Counter
| Commit: | c4e6a61 | |
|---|---|---|
| Author: | Youngteac Hong | |
Introduce presence.Counter
| Commit: | a80b6af | |
|---|---|---|
| Author: | kokodak | |
Revise serverSeq related code
| Commit: | 28e31b8 | |
|---|---|---|
| Author: | kokodak | |
| Committer: | kokodak | |
Merge branch 'main' of https://github.com/yorkie-team/yorkie into presences-offloading
| Commit: | ec0f822 | |
|---|---|---|
| Author: | kokodak | |
Extract Presence Data from DB to Memory
| Commit: | 1c17c33 | |
|---|---|---|
| Author: | Byeonggyu Park | |
| Committer: | GitHub | |
Move webhook configuration to project level (#1498) This change migrates webhook settings (auth/event) from server-level to project-level. Users can now update retry counts, min/max backoff intervals, and request timeouts through UpdateProject or the CLI. Timeout handling was refactored to use a per-request context for more precise control without overhead. Default values remain defined in project_info.go. Server-level ClientDeactivateThreshold is removed since it is already configurable at the project level.
| Commit: | 3c412f4 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | GitHub | |
Add project-level RemoveOnDetach setting (#1496) This commit introduces a project-level setting that enables automatic removal of documents when a client detaches, without requiring the explicit removeIfNotAttached: true flag in each detach call. A new --remove-on-detach option has been added to the CLI for project updates. In addition, new metrics for RPC response times and Push/Pull errors have been added to improve observability.
| Commit: | 2e14f97 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Count only successfully compacted documents (#1495) Internal housekeeping metrics now count a compaction only when it actually occurs, improving accuracy of compaction statistics.
| Commit: | 5443087 | |
|---|---|---|
| Author: | emplam27 | |
Add RemoveOnDetach to Project Settings
| Commit: | 41cc82a | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Enhance deactivation with asynchronous opts (#1473) Previously, client deactivation could be interrupted if the original request context was cancelled (e.g., on browser tab or window close). This change introduces DeactivateAsync, which runs deactivation in a background context to ensure proper cleanup.
| Commit: | 127a51e | |
|---|---|---|
| Author: | SANGHEEJEONG | |
| Committer: | GitHub | |
Introduce auth scheme and remove projectName from API requests (#1471) - Added explicit authentication schemes to Authorization header: - `Authorization: Bearer <user_token>` - `Authorization: API-Key <project_api_key>` - Removed redundant `projectName` field from project-related API request bodies. - CLI still accepts `projectName` for backward compatibility; `client.go` resolves it and injects the corresponding project key into the request context. - Server validates the project key and attaches the project context automatically. BREAKING CHANGE: All project-related API requests must now use the `API-Key` scheme. Existing CLI workflows remain functional but migrate internally to the new scheme.
| Commit: | b373878 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Remove deprecated SelectOperation (#1417) SelectOperation in Text is no longer needed since presence is now handled via Change. It was kept for backward compatibility, but has become obsolete after document compaction. This commit removes it completely.
| Commit: | 0c1fd5a | |
|---|---|---|
| Author: | Seungyong Lee | |
| Committer: | Youngteac Hong | |
Add `include_presences` option to GetDocuments API (#1391) This commit introduces an include_presences option for the GetDocuments API. This addition ensures that when fetching presences, the correct shard server is called to retrieve document information by implementing a new cluster API. Additionally, to aggregate presences for multiple documents, GetDocuments API now calls the cluster API multiple times internally, enabling concurrent processing through goroutines. This improvement optimizes latency when fetching presence data.
| Commit: | 97c27ba | |
|---|---|---|
| Author: | Seungyong Lee | |
| Committer: | GitHub | |
Add `include_presences` option to GetDocuments API (#1391) This commit introduces an include_presences option for the GetDocuments API. This addition ensures that when fetching presences, the correct shard server is called to retrieve document information by implementing a new cluster API. Additionally, to aggregate presences for multiple documents, GetDocuments API now calls the cluster API multiple times internally, enabling concurrent processing through goroutines. This improvement optimizes latency when fetching presence data.
| Commit: | 69c5a87 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | Youngteac Hong | |
Add clientKey field to API requests for clients collection key-wide hashed sharding
| Commit: | 4629035 | |
|---|---|---|
| Author: | emplam27 | |
Add clientKey field to API requests for clients collection key-wide hashed sharding
| Commit: | 7918b69 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | 6281223 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | b5e13cd | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | 5f9da0c | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Reorder fields in ClusterServiceDetachDocumentRequest message for consistency and update method signatures in database interface to use refKey for clarity
| Commit: | cf1747b | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Reorder fields in Attach, Detach, Watch, Remove, PushPull, and Broadcast request messages in yorkie.proto for consistency and clarity
| Commit: | b4ed439 | |
|---|---|---|
| Author: | emplam27 | |
Reorder fields in ClusterServiceDetachDocumentRequest message for consistency and update method signatures in database interface to use refKey for clarity
| Commit: | ed485c4 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Reorder fields in Attach, Detach, Watch, Remove, PushPull, and Broadcast request messages in yorkie.proto for consistency and clarity
| Commit: | f3571df | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | 5d35477 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | 45427b8 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | 5911fc1 | |
|---|---|---|
| Author: | Yourim Cha | |
| Committer: | GitHub | |
Enhance document attachment with schema validation (#1345) This commit introduces schema support to validate and manage the structure of collaborative documents. Schemas can be created and updated via the dashboard UI, and are stored and validated using the @yorkie-js/schema package. A schema can be attached to a document using the SDK before any clients are attached. If a schema is already attached or the document has active clients, the attachment is ignored. During local edits, the attached schema is used to validate changes, and schema violations result in client-side errors. Via the AdminService API, schemas can also be updated or detached from documents. The UpdateDocument API supports different behaviors depending on whether the `root` and `schemaKey` fields are present or empty. Currently, only primitive type validations are supported. Additional rule types will be implemented later in the ruleset generation and validation logic.
| Commit: | b5093ff | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | 92f8d83 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | e58017e | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | cd4ad8e | |
|---|---|---|
| Author: | Yourim Cha | |
Enhance UpdateDocument API to support schema updates
| Commit: | 89f28d0 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Rollback dedicated vv encoder and presence slice encoder (#1343) * Rollback dedicated versionvector encoder * Rollback Presence data structure to repeated string
| Commit: | 6d92f7f | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | 0141925 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | 9b47e34 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | 5f10242 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | 0406387 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | f423dc0 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | eda4ad5 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Refactor Presence data structure to repeated string (#1339) Co-authored-by: JiHwan Yim <raararaara@gmail.com>
| Commit: | 82bd52c | |
|---|---|---|
| Author: | JiHwan Yim | |
| Committer: | GitHub | |
Refactor Presence data structure to repeated string (#1335) Co-authored-by: Youngteac Hong <susukang98@gmail.com>
| Commit: | 27c6315 | |
|---|---|---|
| Author: | emplam27 | |
Refactor document key to include documentKey.
| Commit: | e8cc110 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | fae32c4 | |
|---|---|---|
| Author: | emplam27 | |
| Committer: | emplam27 | |
Refactor Project wide shard key
| Commit: | a3d030a | |
|---|---|---|
| Author: | emplam27 | |
Refactor document and client key and document key handling in API requests
| Commit: | ab9fc48 | |
|---|---|---|
| Author: | Yourim Cha | |
| Committer: | Yourim Cha | |
Add schemaKey to DocumentSummary
| Commit: | 5d8930a | |
|---|---|---|
| Author: | raararaara | |
| Committer: | raararaara | |
Fix Presence flatten
| Commit: | f505af7 | |
|---|---|---|
| Author: | raararaara | |
| Committer: | raararaara | |
Replace presence map to array
| Commit: | 76dbb8d | |
|---|---|---|
| Author: | emplam27 | |
Refactor Project wide shard key
| Commit: | b11f4fa | |
|---|---|---|
| Author: | Yourim Cha | |
Merge branch 'main' of https://github.com/yorkie-team/yorkie into schema
| Commit: | a5145f0 | |
|---|---|---|
| Author: | raararaara | |
| Committer: | raararaara | |
Replace presence map to array
| Commit: | ff96799 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | GitHub | |
Replace Push Lock with lock-free implementation (#1309) - Enhanced concurrent access for Attach, Detach, PushPull, and Compaction operations - Enabled compaction to coexist with lightweight operations via RWLock - Documented lock acquisition order and implementation guidelines
| Commit: | 46be6a0 | |
|---|---|---|
| Author: | Youngteac Hong | |
Add concurrent CreateChangeInfos test
| Commit: | 9e71fd0 | |
|---|---|---|
| Author: | Yourim Cha | |
| Committer: | Yourim Cha | |
Add schema validation test for document attachment
| Commit: | 452c306 | |
|---|---|---|
| Author: | Youngteac Hong | |
| Committer: | Youngteac Hong | |
Prevent concurrent issue between compaction and push/pull
| Commit: | 6e3e6c7 | |
|---|---|---|
| Author: | Yourim Cha | |
Merge branch 'main' of https://github.com/yorkie-team/yorkie into schema
| Commit: | 907c7ad | |
|---|---|---|
| Author: | KIM MIN WOO | |
| Committer: | Youngteac Hong | |
Implement project API key rotation with auth checks (#1296) This change introduces the ability to rotate API keys for projects, improving security by allowing periodic updates of keys. Project owners can now use the new RPC endpoint to rotate their project's keys securely.
| Commit: | a98ac24 | |
|---|---|---|
| Author: | JiHwan Yim | |
| Committer: | Youngteac Hong | |
Introduce document size limit (#1270) Added size limit for documents(10 MiB default), enforced during the document editing. Local updates will be checked against this limit, but remote changes exceeding the limit will still be accepted. This helps prevent excessive resource usage and ensures stable client-server interactions.
| Commit: | 0a8d81c | |
|---|---|---|
| Author: | Yourim Cha | |
Merge branch 'main' of https://github.com/yorkie-team/yorkie into schema
| Commit: | a54ac7e | |
|---|---|---|
| Author: | Yourim Cha | |
Add GetSchemas RPC for retrieving all versions of a schema
| Commit: | 15d5ca7 | |
|---|---|---|
| Author: | raararaara | |
Provide size limit to document
| Commit: | 2ec65fd | |
|---|---|---|
| Author: | raararaara | |
Introduce doc size limit from project