Proto commits in streamnative/oxia

These 70 commits are when the Protocol Buffers files have changed:

Commit:34ebe93
Author:Qiang Zhao
Committer:Qiang Zhao

step commit

Commit:0a516df
Author:Qiang Zhao
Committer:Qiang Zhao

step commit

Commit:e83a133
Author:Qiang Zhao
Committer:Qiang Zhao

step commit

Commit:76555b0
Author:Qiang Zhao

fix: fix assignment lost when restart node

Commit:0b405d7
Author:Matteo Merli
Committer:GitHub

Allow to pass the same secondary index name multiple times on the same record (#546)

The documentation is generated from this commit.

Commit:583497a
Author:Matteo Merli
Committer:GitHub

Protobuf changes for secondary indexes (#541)

Commit:76e9f52
Author:Matteo Merli
Committer:GitHub

On delete-range send 1 single notification to clients (#532) When there is a delete-range request, we are currently sending 1 `deleted` notification for each of the keys that were deleted in the range. The problem is that the number of keys in the range is unbounded and can lead to a huge batch in the DB and also to a big notification batch to send out to client. It's not easy to split the notification batch, since it needs to be written atomically with the db update itself. Instead, we add a new notification type that will simply tell the client that a range of keys was deleted.

Commit:2db3434
Author:Matteo Merli
Committer:GitHub

Allow to disable notifications on a namespace (#526) This is part-1 of the changes. It adds the option to configure a namespace with notifications disabled. If a use case only needs key-value semantics and doesn't use notifications, we can disable them to avoid the overhead. (Part-2 will use the configuration to implement the notifications skipping).

Commit:f8b82de
Author:Matteo Merli
Committer:GitHub

Rename ShardId field to Shard (#511) Renaming the protobuf field from `ShardId` to `Shard`. The motivation is to have consistent `shard: 123` in the logs, such that filtering them based on shard becomes easier. All logs context are already using the `shard` label, though when we print Protobuf struct directly, it would today have `shardId`.

Commit:4c82804
Author:Matteo Merli
Committer:GitHub

Added server side support for WriteStream operation (#499)

Commit:78a820f
Author:Matteo Merli
Committer:GitHub

Added range-scan support in oxia db (#479)

Commit:1077dee
Author:Matteo Merli
Committer:GitHub

Support sequential write operation on server dbs (#472)

Commit:b09a8bf
Author:Matteo Merli
Committer:GitHub

Added partition-key to override shard routing (#470)

Commit:821a731
Author:Matteo Merli
Committer:GitHub

Server side handling of floor/ceiling get requests (#467)

Commit:c53fb3b
Author:Mattison Chao

*: Update license

Commit:8cccb57
Author:Matteo Merli
Committer:GitHub

Use VT proto for serialization (#366) Using https://github.com/planetscale/vtprotobuf for adding extra methods to the generated Protobuf code. The extra marshallVT/unmarshallVT methods are generated as "rolled-out" code instead of using reflection so they're using much less CPU and memory allocations. It's also capable of generating hooks for getting objects from pool.

Commit:dcdd34b
Author:Matteo Merli
Committer:GitHub

Include head & commit offset in GetStatus (#326)

Commit:518db2f
Author:Matteo Merli
Committer:GitHub

Added server side support for deleting shards (#299)

Commit:a4a0db5
Author:Matteo Merli
Committer:GitHub

Changed shard id type to int64 (#296) With namespaces, we'll be able to create and delete shards. It will be safer to use `int64` rather than `uint32` to avoid having to deal with any rollover.

Commit:138812a
Author:Matteo Merli
Committer:GitHub

Passing namespace to server components for metrics and logs (#292)

Commit:d0f4ca6
Author:Matteo Merli
Committer:GitHub

Added namespace into assignments dispatcher (#291)

Commit:42f3233
Author:Matteo Merli
Committer:GitHub

Added support in coordinator for multiple namespaces (#289) Added concept of "default" namespace. `ReplicationFactor` and `InitialShardsCount` are now moved at the namespace level.

Commit:8f572e5
Author:Dave Maughan
Committer:GitHub

Make KeepAlives non-streaming (#267)

Commit:5e707db
Author:Dave Maughan
Committer:GitHub

Streaming read (#257)

Commit:c1c1823
Author:Dave Maughan
Committer:GitHub

Remove batched list (#250) stacked on #245 diff: https://github.com/nahguam/oxia/compare/add-list-rpc...nahguam:oxia:remove-batched-list?expand=1

Commit:c08a264
Author:Dave Maughan
Committer:GitHub

Split List out to separate streaming rpc (#245)

Commit:2b5b49c
Author:Matteo Merli
Committer:GitHub

Added client identity (#249) Added concept of client identity in the API: 1. A client can pass an optional `Identity` option (string). If none is passed, a UUID is internally generated 2. A session is tied to a particular client's identity 3. The client identity is the same across all the shards 4. The identity is exposed in the `Version` object (for ephemeral records) 5. Applications can make several uses of client identity: 1. Specify the client identity as in "node-port" of a particular service 2. Debug to know who created an ephemeral record 3. Allow creating more complex abstractions by identifying "was this record created by me?" 4. Maintain the identity across restarts of the same applications (e.g.: restart a pod that comes back up with the same name and will use the same client identity). There will be no effort from Oxia to disallow conflicting identities, though they should be discouraged.

Commit:a6e423e
Author:Andras Beni
Committer:GitHub

Add batching in the leader, before writing to WAL (#237)

Commit:4f11d2b
Author:Matteo Merli
Committer:GitHub

Renamed Payload -> Value (#239) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:1dec117
Author:Matteo Merli
Committer:GitHub

Renamed Stat -> Version (#233) 1. Renaming the concept of `Stat` to `Version` object 2. Changed `Version` field into `VersionId` which represents the offset when the record was modified 3. Added `ModificationsCount` field to let users know how many changes since the record was last created Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:a6c7ad4
Author:Matteo Merli
Committer:GitHub

Renamed Fence -> NewTerm (#232) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:2efbfae
Author:Dave Maughan
Committer:GitHub

proto cleanup (#230) * Fix import path (remove 'proto/' prefix) * Apply make proto_format * Apply protolint fixes * enums CAPITALS_WITH_UNDERSCORES * sessionId -> session_id * import order Co-authored-by: Matteo Merli <mmerli@apache.org>

Commit:039312c
Author:Andras Beni
Committer:GitHub

Break Snapshot chunks into small gRPC requests (#218)

Commit:fa8bc8d
Author:Matteo Merli
Committer:GitHub

Rename epoch -> term (#229) Using `term` as it's generally more suited to indicate different leader election periods (Stacked on #225, #226, #227 and #228) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:ff6ad3d
Author:Matteo Merli
Committer:GitHub

Renamed AddEntries to Replicate (#228) (Stacked on top of #225, #226 and #227) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:66b388c
Author:Matteo Merli
Committer:GitHub

Renamed "index" to "offset" (#227) (Stacked on top of #225 & #226 ) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:275937f
Author:Matteo Merli
Committer:GitHub

Renamed ShardsAssignmentsResponse -> ShardsAssignments (#226) (stacked on top of #225) Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:f45f80d
Author:Matteo Merli
Committer:GitHub

Renamed OxiaControl proto service to OxiaCoordination (#225) Renamed proto file `coordiationation.proto` -> `replication.proto` and the Service to `OxiaCoordination` Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:d2eabe2
Author:Matteo Merli
Committer:GitHub

Adding license and license headers (#210) Added license, headers and tool to add and verify in CI. * `make license-check` * `make license-format`

Commit:47d1f73
Author:Andras Beni
Committer:GitHub

Session Manager (#120) https://www.notion.so/streamnativeio/Design-for-session-management-b3be2beca3a941bf8c2313a0ddeaf8b3

Commit:d02e952
Author:Matteo Merli
Committer:GitHub

Leader sends snapshot to followers when needed (#176) The leader will send a snapshot to followers when either: * The follower is getting bootstrapped * The follower is tailing at an entry that was already trimmed in the leader wal (Stacked on top of #173) Co-authored-by: Dave Maughan <davidamaughan@gmail.com>

Commit:a126733
Author:Matteo Merli
Committer:GitHub

Added client implementation of notifications (#166) Stacked on top of #164 & #165 Client API and implementation for notifications Co-authored-by: Andras Beni <andras.beni@streamnative.io> Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:6ce5f5c
Author:Matteo Merli
Committer:GitHub

When the coordinator restarts, check leader status (#163) When the coordinator restarts, we need to double-check if the leader is up & running and in the expected state, otherwise, trigger a new leader election. Added a new `GetStatus()` RPC for the coordinator to get info about storage nodes.

Commit:30b546d
Author:Matteo Merli
Committer:GitHub

Notification support in DB (#164) First part, added support in DB to handle the log of notifications. As described in https://www.notion.so/streamnativeio/Notifications-4f1a9c5e09da4346a05cf27f6cf0f3b0 Co-authored-by: Andras Beni <andras.beni@streamnative.io>

Commit:47e1041
Author:Dave Maughan
Committer:GitHub

Shard upperbound inclusive (#145)

Commit:4fff471
Author:Matteo Merli
Committer:GitHub

Ensure entries timestamp are assigned only once (#139) We are currently assigning the timestamps on entries at the time when they get applied on the db layer. The problem is that this happens in each node (leader and followers) and the result is that the timestamp will change after a new leader election. We need a stable timestamp that is assigned only once in the leader and gets applied in all the followers. Added end-to-end test that verify the "stat" is the same after a new leader is elected.

Commit:d227c72
Author:Matteo Merli
Committer:GitHub

Fixed truncate (#141) Fixed the logic of truncate on 2 aspects: 1. We need to be able to truncate a follower after a restart, as long as it's on the same epoch 2. The leader needs to compare the head index of a late follower with its own head index "at the moment of the leader election" and it should never ask to truncate to an offset which is past the last offset of the follower

Commit:dbb9b59
Author:Matteo Merli
Committer:GitHub

Follower controller handling of snapshot (#132) * Follower controller handling of snapshot * Update server/internal_rpc_server.go Co-authored-by: Andras Beni <andras.beni@streamnative.io> Co-authored-by: Andras Beni <andras.beni@streamnative.io>

Commit:daa2065
Author:Matteo Merli
Committer:GitHub

Remove epoch from RPC responses (#123) * Coordinator tests * Fixed lint * Perform fencing in parallel * Fixed race conditions * Fixed lint * Fixed lint * Retry fencing failed followers * Fixed lint * Fixed race condition in test * Improved testing assertion * Fixed duplicated CLI options * Remove epoch from RPC responses * Fixes * Use individual response types * Fixed merge issue * fixed compile

Commit:a60c7a9
Author:Matteo Merli
Committer:GitHub

Retry fencing failed followers (#122) * Coordinator tests * Fixed lint * Perform fencing in parallel * Fixed race conditions * Fixed lint * Fixed lint * Retry fencing failed followers * Fixed lint * Fixed race condition in test * Improved testing assertion * Fixed duplicated CLI options

Commit:d6c6db5
Author:Elliot West
Committer:GitHub

[Improvement] GetRange → List (#109) * GetRange → List * GetRange → List Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:1ca1e8c
Author:Matteo Merli
Committer:GitHub

Improved logic for epoch checking in follower controller (#92)

Commit:96738a8
Author:Andras Beni
Committer:GitHub

Assignment dispatcher (#62) * Assignment dispatcher * Almost tests * Roll back string replace * Revert mock refactoring * Fix standalone server's leader port * Add tests * Review comments * typo * Remove unused field

Commit:04e38f1
Author:Matteo Merli
Committer:GitHub

Refactoring to use Offset instead of EntryId where possible (#74) When referring to a position in the log, it's not necessary to always carry the EntryId(Epoch, Offset) around. While the entry id is needed in Fence & Truncate calls, once we have a leader or follower, they can refer to positions with just the offset, playing from the commit index to head index. Modifications * For a given shards: * valid offsets are going from 0 to N * -1 the InvalidOffset * When the WAL is empty, the last offset is -1 * Tidwall/wal is based on that the first entry has index 1 -> Therefore we are translating from 0..N to 1..N+1. * In the long run it would probably make sense to fork the wal code inside our codebase and make some adjustments. eg: the idx starting at 0 and the serialization format (which we don't need since we already have one). * Changed the wal implementations to avoid tracking the wal readers, since it was not needed and was causing deadlocks given the different order of locks between the wal and the readers. * Refactoring to use Offset instead of EntryId where possible * Avoid atomic.Int64 type since it's only in Go 1.19 * Fixed typo

Commit:7e75fa1
Author:Matteo Merli
Committer:GitHub

Refactor leader changes (#58) * Follower cursor implementation * Leader controller refactoring * Update server/follower_controller.go Co-authored-by: Andras Beni <andras.beni@streamnative.io> * Removed unused message * Fixed issue of sending fence requests to both leader and follower * Fixes after merge with main * Fixed test Co-authored-by: Andras Beni <andras.beni@streamnative.io> Co-authored-by: Dave Maughan <dave.maughan@streamnative.io>

Commit:a480cd8
Author:Andras Beni
Committer:GitHub

Remove reconfiguration from proto & go code (#51)

Commit:2044aa0
Author:Elliot West
Committer:GitHub

[Doc] Comment typos (#53) * Fix typos * Typo * Note sort order * Typo^2

Commit:26e43db
Author:Elliot West
Committer:GitHub

Fix typos (#52)

Commit:2ce7db5
Author:Elliot West
Committer:GitHub

[Improvement] Rename Status.BAD_VERSION (#49) * Rename Status.BAD_VERSION * Further instances

Commit:41448bd
Author:Dave Maughan
Committer:GitHub

Client side shard management (#29) * Client side shard management * CR changes * lint Co-authored-by: Matteo Merli <mmerli@apache.org>

Commit:608ba66
Author:Dave Maughan
Committer:GitHub

Split client batch to separate writes and reads (#33)

Commit:756330b
Author:Matteo Merli
Committer:GitHub

Use shard-id field in all internal RPC requests (#27) * Use shard-id field in all internal RPC requests * Fixed writing stream response back * Fixed compile error

Commit:9441816
Author:Matteo Merli
Committer:GitHub

Added option to have multiple hashing/sharding schemes (#22)

Commit:30cd432
Author:Dave Maughan
Committer:GitHub

[Cleanup] Proto cleanup (#21)

Commit:f237f0d
Author:Matteo Merli
Committer:GitHub

Added DB interface and impl (#19) * Indexed database batch * Added DB interface and impl * Merged with client proto changes and broke down into methods

Commit:d09633f
Author:Dave Maughan
Committer:GitHub

[Feature] Client proto service (#20) * [Feature] Client proto service First cut of the client protobuf service for Milestone 1 * rename range requests and responses * Merge ShardAssignment and Shard

Commit:37dad58
Author:Andras Beni
Committer:GitHub

Shard manager implementation (#15) * Shard manager implementation * Remove diff files Co-authored-by: Matteo Merli <mmerli@apache.org>

Commit:04eb38f
Author:Matteo Merli

Linked basic put operation

Commit:71ec4ea
Author:Matteo Merli

Added the logic to open/close leader and follower controllers

Commit:ad5ecd3
Author:Matteo Merli

Initial import