All notable changes to Yorkie will be documented in this file.
The format is based on Keep a Changelog, and Yorkie adheres to Semantic Versioning.
- Extract db name as an argument to value.yaml by @hackerwins in #1107
- Fix panic in pubsub by deleting subs in callback by @hackerwins in #1101
- Fix invalid version vector check logic for backward compatibility by @JOOHOJANG in #1105
- Refactor webhook method configuration and add CLI commands by @chacha912 in #1082
- Replace MaxCreatedAtMapByActor with VersionVector by @chacha912 in #1088
- Add migration script to remove version vector by @chacha912 in #1091
- Simplify unique constraint for documents by @hackerwins in #1098
- Fix Sharding Initialization with Dynamic Replica Set Configuration by @emplam27 in #1087
- Preserve Detached Client's Lamport in Version Vector by @JOOHOJANG in #1090
- Improve Version Vector Handling for Legacy SDK and Snapshots by @chacha912 in #1096
- Add missing MongoDB sharding configuration for version vectors by @hackerwins in #1097
- Add migration script to detach documents from deactivated clients by @raararaara in #1062
- Upate garbage collection algorithm design by @JOOHOJANG in #1061
- Convert
presence change
from string to binary by @chacha912 in #1069
- Add minLamport for proper GC of deactivated clients by @JOOHOJANG in #1060
- Optimize document detachment in Cluster Server by @raararaara in #1055
- Fix version vector cleanup during client deactivation by @raararaara in #1068
- Correct ReverseLowerBound behavior in MemDB by setting unique index by @chacha912 in #1074
- Update presence_change migration for JSON to Protobuf conversion by @chacha912 in #1075
- Introduce dedicated event publisher per document by @hackerwins in #1052
- Update Authorization Webhook Response Format and Handling by @chacha912 in #1037
- Fix version vector validation when running migration by @JOOHOJANG in #1057
- Introduce cmap for distributing mutexes per documents by @hackerwins in #1051
- Implement lock striping for cmap by @hackerwins in #1053
- Fix transaction in UpdateAndFindMinSyncedVersionVector by @hackerwins in #1050
- Introduce VersionVector by @JOOHOJANG in #1047
- Detach documents when client is deactivated by @hackerwins in #1036
- Remove
jstype=string
from resources.proto by @Aswinr24 in #1040 - Include yorkie-mongodb to yorkie-cluster Helm Chart by @hyun98 in #1031
- Add all-in-one Docker Compose and Grafana configuration by @window9u in #997
- Add metrics for WatchDocuments and enhance pushpull metrics by @emplam27 in #1008
- Add nginx-ingress-controller option by @emplam27 in #1022
- Reduce CI test time by optimizing task execution by @binary-ho in #988
- Use random generated key by @window9u in #1010
- Add Concurrency Tests between Array Operations by @cloneot in #985
- Add metric for WatchDocument streams by @emplam27 in #998
- Add Account Deletion and Change Password to CLI by @sigmaith in #983
- Optimize FindChangeInfosBetweenServerSeqs to prevent unnecessary Query by @kokodak in #974
- Rename SetByIndex to ArraySet by @hackerwins in #995
- Set
updated_at
withcreated_at
when creating Document by @window9u in #977
- Add a metric to collect the number of background routines by @kokodak in #963
- Modify health check endpoint and add HEAD method by @taeng0204 in #958
- [Revised] Fine-tuned CI Workflows in PR by @krapie in #965
- Fix invalid test case in FindDocInfosByKeys by @kokodak in #972
- Add HTTP health check handler for server health monitoring by @taeng0204 in #952
- Show Server Version in Yorkie CLI by @hyun98 in #938
- Support basic account action for admin by @gusah009 in #934
- Update docker compose command to V2 by @fourjae in #950
- Fix FindDocInfosByKeys when keys is empty by @blurfx in #945
- Handle panic during conversion to connectCode by @blurfx in #951
- Enhance housekeeping to add variety of tasks by @hackerwins in #932
- Enhance GetDocuments API by adding bulk retrieval by @kokodak in #931
- Improve performance for creating crdt.TreeNode by @m4ushold in #939
- Update
updated_at
only when there are operations in changes by @window9u in #935
- Provide error codes for enhancing error handling from clients by @hackerwins in #927
- Prevent exposure of removed documents when searching by @hackerwins in #918
- Ensure proper deletion of documents in MemDB by @hackerwins in #920
- Handle local changes correctly when receiving snapshot by @raararaara in #923
- Remove node from index during GC by @raararaara in #913
- Add GetDocuments API returning document summaries by @hackerwins in #909
- Update CI workflow to trigger Pull Request CI only on code-level changes by @kokodak in #906
- Return ErrAlreadyDetached when reattaching by @hackerwins in #908
- Add Project field to YorkieService logs by @hackerwins in #911
- Remove commit revision in version command by @hackerwins in #905
- Fix missing document detachments when client is deactivated by @raararaara in #907
- Fix duplicate changes when syncing and detaching by @hackerwins in #896
- Fix miscalculation of tree size in concurrent editing by @raararaara in #891
- Add RHTNode removal to converter for consistency by @hackerwins in #888
- Handle concurrent Tree.RemoveStyle by @hackerwins in #883
- Return ErrClientNotActivated for deactivated clients on WatchDocument by @hackerwins in #877
- Fix incorrect tree snapshot encoding/decoding by @raararaara in #881
- Implement RHT.GC by @hackerwins in #864
- Add Resource Configuration in
yorkie-mongodb
Helm chart by @krapie in #872 - Add snapshot-disable-gc flag by @hackerwins in #874
- Move ToXML from RHT to TreeNode by @raararaara in #863
- Apply GCPair to TreeNode, TextNode by @hackerwins in #866
- Handle concurrent editing and styling in Tree by @hackerwins in #854
- Fix inconsistent garbage collection for multiple nodes in text and tree type by @chacha912 in #855
- Support
yorkie-monitoring
andyorkie-argocd
Charts on NCP by @krapie in #846
- Support NCP ALB by @hackerwins in #835
- Move Client.Watch inside Client.Attach by @krapie in #803
- Use DBConnectionURI directly by @hackerwins in #833
- Move
istio-ingressgateway
to Yorkie Namespace by @krapie in #836
- Provide CODECOV_TOKEN to codecov-action by @hackerwins in #843
- Fix incorrect calculation in
indexTree.treePosToPath
operation by @raararaara in #824 - Fix logic errors in TreeNode.DeepCopy by @raararaara in #821
- Fix missing escapeString in Tree Marshal by @chacha912 #830
- Add Swagger Serving Command by @devleejb in #812
- Add MongoDB sharding document by @sejongk in #781
- Add merge and split concurrency tests by @justiceHui in #780
- Prevent RunTestConcurrency from creating garbage clients by @justiceHui in #793
- Add Test Server Wait Helper Function by @krapie in #787
- Update Design Document for Missing Document Link and Instructon by @krapie in #782
- Introduce MongoDB sharding rules to Project-wide and Document-wide collections by @sejongk in #776
- Add Helm chart for MongoDB sharded cluster by @sejongk in #769
- Improve object creation with an initial value of specific types by @highcloud100 in #766
- Refactor concurrency tests for basic Tree.Edit by @justiceHui in #772
- Remove unnecessary
String()
calls withstringer
interface by @sejongk in #777
- Add API for Retrieving All Documents by @raararaara in #755
- Introduce object creation interface with initial values by @highcloud100 in #756
- Implement Tree.RemoveStyle by @justiceHui in #748
- Fix RHT.Remove and Add test code by @justiceHui in #752
- FIx Finding Housekeeping Candidates and Modify Housekeeping Structure by @devleejb in #749
- Add concurrent editing test cases in Tree by @sejongk in #751
- Introduce TreeToken and tokensBetween to Tree by @sejongk in #747
- Add RPC and profiling ports to Yorkie deployment by @hackerwins in #727
- Change CLI TLS configuration to HTTP2 by @krapie in #742
- Replace grpcstatus.Errorf with connect.Error by @chacha912, @highcloud100 in #741
- Fix
getGarbageLen
to retrun correct size by @devleejb in #743 - Fix typo in
MAINTAINING.md
by @devleejb in #739
- Support concurrent insertion and splitting in Tree by @sejongk in #725
- Migrate RPC to ConnectRPC by @krapie, @hackerwins #703
- Address duplicate nodeIDs in Tree.Split @sejongk #724
- Add Rate Limit using Istio Envoy by @joonhyukchoi in #674
- Implement splitLevel of Tree.Edit by @hackerwins in #705
- Bump github.com/spf13/viper from 1.15.0 to 1.17.0 by @dependabot in #693
- Bump github.com/jedib0t/go-pretty/v6 from 6.4.0 to 6.4.9 by @dependabot in #695
- Bump actions/setup-go from 3 to 4 by @dependabot in #698
- Bump helm/chart-releaser-action from 1.5.0 to 1.6.0 by @dependabot in #699
- Bump docker/login-action from 2 to 3 by @dependabot in #700
- Bump google.golang.org/grpc from 1.58.2 to 1.58.3 by @dependabot in #701
- Bump golang.org/x/crypto from 0.14.0 to 0.16.0 by @dependabot in #702
- Bump github.com/rs/xid from 1.4.0 to 1.5.0 by @dependabot in #697
- Implement merge elements in Tree.Edit by @hackerwins in #659
- Add PushPull benchmark test by @sejongk in #658
- Setup Dependabot by @jongwooo in #675
- Bump up golangci-lint and fix lint errors by @hackerwins in #660
- Modify converter to allow setting values for object and array by @chacha912 and @hackerwins in #687
- Bump golang.org/x/net from 0.10.0 to 0.17.0 by @dependabot in #649
- Bump google.golang.org/grpc from 1.54.0 to 1.56.3 by @dependabot in #654
- Fix ArgoCD version to v2.7.10 by @krapie in #653
- Rename StructureAsString to toTestString by @hackerwins in #656
- Revise Prometheus PVC Spec Syntax Error by @krapie in #650
- Remove skip storing MinSyncedTicket when the ticket is initial by @hackerwins in #655
- Introduce Broadcast API by @sejongk in #631
- Add context to CLI for simplifying CLI commands by @Wu22e and @hackerwins in #647
- Add Tree.Edit benchmark by @JOOHOJANG in #637
- Bump checkout from v3 to v4 by @Yaminyam in #641
- Remove panic from crdt.Primitive @fourjae and @hackerwins in #636
- Remove unused trie by @hackerwins in #646
- Support concurrent formatting of Text by @MoonGyu1 in #639
- Fix typo in retention design document by @LakHyeonKim in #633
- Update Design Document for Missing Document Links and Ordering by @krapie in #630
- Recover Select to prevent unsupported operation by @hackerwins in #629
- Set cobra default output to stdout by @blurfx in #599
- Fetch latest snapshot metadata to determine snapshot creation need by @hyemmie in #597
- Update contributing docs by @MoonGyu1 in #601
- Add Pagination to Listing Projects for Housekeeping by @tedkimdev in #587
- Update workflow with latest versions of the actions which runs on Node16 by @jongwooo in #620
- Add integration tree test for sync with js-sdk by @MoonGyu1 in #611
- Add testcases for sync with js-sdk by @MoonGyu1 in #621
- Add tree document by @MoonGyu1 in #608
- Cache ProjectInfo by @blurfx in #586
- Handle concurrent editing of Tree.Edit by @hackerwins, @MoonGyu1, @sejongk in #607
- Support multi-level and partial element selection by @sejongk, @hackerwins in #624
- Remove Select operation from Text by @joonhyukchoi in #589
- Change 'Documents' from plural to singular in DocEvent by @chacha912 in #613
- Cleanup proto by @chacha912 in #614
- Replace matrix strategy with environment variable by @jongwooo in #619
- Change TreeNode to have IDs instead of insPrev, insNext by @JOOHOJANG in #622
- Fix typos and invalid link in the yorkie design document by @g2hhh2ee in #591
- Clean up code by @hackerwins in #595
- Clean up methods related to presence by @chacha912 in #594
- Remove panic from crdt.RGATreeList by @sejongk in #596
- Fix treePos calculating logic for text node by @JOOHOJANG in #615
- Move Presence from Client to Document by @chacha912, @hackerwins in #582
- Add include-snapshot flag to ListDocuments API by @YoonKiJin, @hackerwins in #575
- Revise log messages by @hackerwins in #574
- Bump google.golang.org/grpc from 1.50.0 to 1.53.0 by @dependabot in #576
- Allow users to pass multi nodes when calling Tree.edit by @JOOHOJANG in #579
- Remove unnecessary codes from gc by @JOOHOJANG in #581
- Add logout command to CLI by @blurfx in #571
- Add RemoveIfNotAttached flag to Detach by @emplam27 in #560
- Make attributes display properly in dashboard by @YoonKiJin in #564
- Remove panic from crdt.Tree and index.Tree by @JOOHOJANG in #570
- Add force flag to RemoveDocument command by @emplam27 in #558
- Apply garbage collection for tree by @JOOHOJANG in #566
- Resolve CI failure with longer MaxConnectionAge by @krapie in #556
- Update ClientInfo with ID and extract
testcases
package by @emplam27 in #557 - Filter out removed documents from ListDocuments API by @hackerwins in #563
- Add a workaround to prevent retrieving removed documents from MemDB by @hackerwins in #565
- Add TLS Option & Insecure Flag in Admin CLI by @krapie in #548
- Implement Tree.Style for setting attributes to nodes by @krapie, @hackerwins in #549
- Abstract the workflow to base-docker-publish.yml by @jongwooo in #552
- Change k8s version of yorkie-cluster chart to 1.23 by @emplam27 in #550
- Support UTF16 Code Units in yorkie.Tree by @krapie in #545
- Implement yorkie.Tree for text editors using tree model by @hackerwins in #535
- Add remove document command to CLI by @emplam27 in #540
- Remove panic method in crdt array by @emplam27 in #524
- Revise Helm Charts for Production Installations by @krapie in #537
- Resolve concurrent map issue by @chacha912 in #538
- Add Sharded Cluster Mode Design Document by @krapie in #523
- Remove panic and wrapping informational error from server by @emplam27 in #519
- Remove panic method in crdt text by @emplam27 in #522
- Integrate SDK RPC Server and Admin RPC Server to Single RPC Server by @krapie in #532
- Update Helm Chart Releaser Action by @krapie in #516
- Revise Helm charts & README.md by @krapie in #525
- Resolve Helm Chart Installation Fail on Custom Release Name by @krapie in #531
- Add Yorkie Helm Charts by @krapie in #507
- Add gRPC MaxConnectionAge & MaxConnectionAgeGrace Options by @krapie in #512
- Extend PushPull to support sync mode by adding push-only flag by @humdrum in #500
- Remove etcd-based cluster mode and replace it with sharding by @hackerwins in #504
- Lock watchDocuments depending on the client and doc by @chacha912 in #506
- Fixed a guide about path of docker-compose.xml file by @maruldy in #511
- Add ClientDeactivateThreshold field in admin CLI project list by @krapie in #477
- Add RemoveDocument API by @hackerwins in #484
- Add user agent metrics by @emplam27 in #492
- Add shard key in context by @hackerwins in #499
- Add pagination flags to document ls command by @emplam27 in #489
- Allow uppercase letters(A-Z) for document keys by @shiningsoo in #483
- Bump golang.org/x/net from 0.0.0-20221004154528-8021a29435af to 0.7.0 by @dependabot in #486
- Change the structure of WatchDocument API by @chacha912 in #491
- Add ClientDeactivateThreshold in Project by @krapie in #454
- Add validation module and document key validation by @easylogic in #467
- Filter out unsubscribed documents key in DocEvent by @chacha912 in #463
- Remove priority queue from RHTPQMap and entire project by @blurfx in #462
- Remove duplicated backslash in string escaping by @cozitive in #458
- Fix invalid index of SplayTree with single node by @hackerwins in #470
- Merge Text and RichText by @hackerwins in #438
- Fix the value type of Counter and remove double type from Counter by @cozitive in #441
- Fix wrong string escape in Text's attrs by @cozitive in #443
- Increase CRDT Counter in local change by @cozitive in #449
- Bump up Go to 1.19.2 by @hackerwins in #425
- Bump up libraries to the latest version by @hackerwins in #426
- Remove use of bou.ke/monkey library by @chromato99 in #427
- Replace deprecated ioutil library by @chromato99 in #428
- Remove duplicate logging when the function returns error by @hackerwins in #429
- Fix typo by @ppeeou in #421
- Fix invalid JSON from marshaling dates and use UNIX ms for Date by @hackerwins in #432
- Add additional unwrap code in ToStatusError gRPC error handler by @Krapi0314 in #434
- Add signup validation: #407
- Remove unused nodeMapByCreatedAt in RHT: #408
- Remove size cache from RGATreeList and use SplayTree instead: #415
- Adjust indexes so that each user has separate project names: #418
- Bind project and user with owner field: #398
- Validate fields when creating or updating a project: #399
- Add
--backend-snapshot-with-purging-changes
flag: #370
- Fix history command authentication error: #397
- Add
--auth-webhook-url
,--name
flag to updateProject command: #376
- Rename package names to match JS SDK: #395
- Introduce
buf
to enforce lint rules designed to guarantee consistency: #382 - Extract admin settings with flags and configurations: #384
- Change uint64 to int64 among data inserted into the DB: #381
- Add
[jstype = JS_STRING]
field option in admin.proto: #380
- Add signup and login commands and APIs: #357
- Fix the problem local changes were applied twice: #375
- Add document list command to CLI: #366
- Add SearchDocuments admin API: #363
- Fix incorrect index for nodes newly created then concurrently removed: #364
- Apply gRPC error details to update project api: #354
- Implement pagination flags to history command: #360
- Add MaxCallRecvMsgSize option to client: #353
- Improve performance of deletion in Text: #356
- Fix a bug when deleting blocks concurrently: #b645cf1
- Add history command to CLI: #349
- Introduce validator for project name: #345
- Revert text delection improvements: #350
- Add UpdateProject admin API: #338
- Improve performance of deletion in Text: #341
- Expose the missing exit code: #e87d9d3
- Skip storing the initial ticket to prevent GC interruption: #339
- Cache removed elements when creating a document from a snapshot: #340
- Detach the attached documents when deactivating the client: #342
- Update Go version to 1.18: #326
- Add trylock to memory locker: #234
- Print projects in table format: #324
- Fetch documents by project: #330
- Add time attributes to document API: #325
- Fix invalid JSON returns from document.Marshal: #328, #332
- Add the missing admin-port flag for CLI
- Rename projectID written in invalid conventions to project_id
- Add Project(Multi-tenancy): #313, #319
- Add Admin API(ListDocuments, GetDocument, ListProjects): #309, #312, #315, #320
- Cache ActorID.String to reduce memory usage: #308
- Rename Agent to Server: #311
- Rename Client Metadata to Presence: #323
- Fix LRU cache expiration when updating same key: #314
- Remove collection from document: #318
- Introduce named logging to separate logs by request or routine: #296
- Add missing serverSeq of change.ID in Protobuf: #f5a0c49
- Cache the key of RGATreeSplitNodeID to prevent instantiation: #306
- Cache the key of TimeTicket to prevent instantiation: #307
- Fix for use on Windows: #295
- Fix snapshot interval to make them trigger properly in memdb: #297
- Run tests using monkey patch only on amd64: #299
- Fix a warning that directory does not exist when running make proto: #c441b7b
- Add log-level flag: #290
- Fix a bug that reads config file incorrectly: #4cf184d
- Calculate minSyncedTicket based on time.Ticket: #289
- Allow users to set up logger of the client: #285
- Housekeeping to deactivate clients that have not been updated: #286
- Run GC when saving snapshots: #287
- Clean up client options: #284
2nd year release
2nd year release
- Monitoring #155
- Supporting TLS and Auth webhook #6
- Providing Cluster Mode #11
- Improved Peer Awareness #153
- Providing MemoryDB for Agent without MongoDB #276
- Fix a bug to pull changes from other documents in MemDB: #9c2af2e
- Add MemDB to run Yorkie without MongoDB: #276
- Add rpc-max-requests-bytes flag to set client request limit: #e544cdb
- Avoid creating snapshots of a document at the same time in ETCD: #274
- Extract auth-webhook-cache-size as config and flag: #3256b95
- Fix a bug where text nodes with tombstones were not counted: #277
- Add enable-pprof flag to open pprof via profiling server: #265
- Build multiple architecture docker images: #10d8c8b
- Add operations metrics in PushPull API: #d23fc14
- Replace XXXGauges with XXXCounters: #266
- Reduce memory usage in PushPull API: #268
- Fix goroutine leaks on subscriptions: #265
- Add missing go process collector on metrics: #35cefdb
- Fix missing gRPC interceptors for metrics: #901e4fa
- Add ETCD username and password flags: #259
- Change the flag missed when renaming to AuthWebHookXXX: #feb831d
- Fix a bug that gRPC metrics were not displayed: #02c1995
- Fix a bug that Go process metrics were not displayed: #262
- Revert "Replace hex.EncodeTostring with ActorID.key in Text and RichText (#255)"
- Improve Client's metadata to be updatable: #153
- Build binaries for environments when releasing a new version: #175
- Add config validation: #206
- Clean up flags in AuthXXX and XXXSec patterns: #168
- Update MaxConcurrentStreams to max: #227
- Clear performance bottlenecks: #251
- Change config format to YAML: #223
- Fix reduce array size when deleting the same position: #235
- Fix invalid version package path: #241
- Add registry missing in PR 185 to Metrics: #e65d5bb
- Add Cluster Mode: #183
- Add Authorization check to Watch API: #209
- Add authorization-webhook-methods flag: #193
- Add retry logic to Authorization webhook: #194
- Add authorization webhook cache: #192
- Change Watch events to be similar to JS SDK: #137
- Close Watch streams on agent shutdown: #208
- Fix a bug where deleted values from objects are revivded after GC: #202
- Add basic behavior of authorization webhook: #188
- Fix the concurrent editing issue of Move Operation: #196
- Delete RequestHeader in Protobuf: #188
- Add gRPC health checking: #176
- Add ca-certificates to access remote DBs such as MongoDB Atlas: #6d3e176
- Expose only basic command in Dockerfile: #317320b
- Fix incorrect sequences when detaching documents: #173
- Add more metrics related to PushPull API: #166
- Add command-line flags for agent command: #167
- Support for null values: #160
- Update Go version to 1.16: #161
- Calculate the size of Text in UTF-16 code units: #165
- Fix invalid states of SplayTree: #162
- Remove errors that occur when insPrev does not exist: #164
- Add customizable metadata for peer awareness: #138
- Use Xid instead of UUID for SubscriptionID: #142
- Replace the type of client_id to a byte array to reduce payload: #145
- Fix actorID loss while converting Change to ChangeInfo: #144
- Add version tag when pushing image: #102
- Add garbage collection for TextElement: #104
- Use multi-stage build for docker image: #107
- Wrap additional information to sentinel errors: #129
- Use status for one-dimensional value: #131
- Remove panics in the converter: #132, #135
- Fix check already attached document: #111
- Delete removed elements from the clone while running GC: #103
- Fix to use internal document when pulling snapshot from agent: #120
First public release
- Add basic structure of Yorkie such as
Document
,Client
, and Agent(yorkie
) - Add Custom CRDT data type
Text
for code editor: #2 - Add Snapshot API to reduce payload: #9
- Add Garbage Collection to clean CRDT meta: #3
- Add Custom CRDT data type
RichText
for WYSIWYG editor: #7 - Add Peer Awareness API: #48
- Add Prometheus metrics: #76
- Add Custom CRDT data type
Counter
: #82