Releases: streamnative/oxia
v0.11.1
What's Changed
- fix(db): delete duplicated callback by @mattisonchao in #550
- feat(wal): support crc for index file by @mattisonchao in #549
- fix(server): fix wrong options for testing by @mattisonchao in #552
Full Changelog: v0.11.0...v0.11.1
v0.11.0
New Features
Secondary indexes.
It's now possible, when writing a record, to have it indexed by additional keys other than its primary key.
Example:
client.Put(ctx, "my-user-id", []byte(value), SecondaryIndex("name", "my-user-name"))
This will allow to do a List()
or RangeScan()
operation based on the secondary index, instead of the primary key:
resCh := client.RangeScan(ctx, "A", "M", UseIndex("name"))
list, err := client.List(ctx, "A", "M", UseIndex("name"))
The returned list will be a list of the primary keys that match the boundaries in the secondary index.
Notes:
- The secondary key is not required to be unique (unlike the primary key for the record)
- A single record can have more that 1 secondary index (eg: index by
name
,age
,location
...) - There can be multiple secondary keys for the same secondary index. eg:
client.Put(ctx, "my-user-id", []byte(value),
SecondaryIndex("ref", "my-ref-1"),
SecondaryIndex("ref", "my-ref-2"),
)
What's Changed
- feat(wal): support chained CRC for write ahead log by @mattisonchao in #538
- Force configmap ownership when updating by @merlimat in #540
- Protobuf changes for secondary indexes by @merlimat in #541
- feat(wal): Decoupled codec related logic by @mattisonchao in #542
- Secondary indexes implementation by @merlimat in #544
- Allow to pass the same secondary index name multiple times on the same record by @merlimat in #546
- Client API changes for secondary idx by @merlimat in #545
- feat(wal): support discard corrupted uncommitted data by @mattisonchao in #547
Full Changelog: v0.10.0...v0.11.0
v0.10.0
What's Changed
- [Go client] Recover from write stream failures by @merlimat in #521
- Fix NPE in coordinator when closing a half-initialized node controller by @merlimat in #520
- Fixed notification DB read after DB was closed by @merlimat in #519
- Include session-id in CLI tool output stats by @merlimat in #524
- fix(server): print the correct error info by @mattisonchao in #527
- fix(tool): follow up #524 to add session id to output by @mattisonchao in #528
- Pool index buffer for read-write wal segments by @merlimat in #523
- Allow to disable notifications on a namespace by @merlimat in #526
- Implementation of disabling notifications on server side by @merlimat in #529
- Configure notifications disabled on standalone CLI by @merlimat in #531
- On delete-range send 1 single notification to clients by @merlimat in #532
- Async quorum-ack-tracker should trigger callback outside of mutex by @merlimat in #533
- feat(server): return storage entry to vtpool when callback error by @mattisonchao in #535
- feat(cmd): support wal cmd
truncate
command by @mattisonchao in #530 - fix(session): expired session write request will delete other session shadow key by @mattisonchao in #534
Full Changelog: v0.9.1...v0.10.0
v0.9.1
What's Changed
- fix(notification): support notification retention configuration by @mattisonchao in #515
Full Changelog: v0.9.0...v0.9.1
v0.9.0
What's Changed
- Rename ShardId field to Shard by @merlimat in #511
- fix(coordinator): panic when BadVersion in coordinator by @mattisonchao in #512
- Upgrade to go lint 1.61 by @merlimat in #514
- Add term check on the internal streams, to avoid wrong closures of leader controller by @merlimat in #513
Full Changelog: v0.8.0...v0.9.0
v0.8.0
What's Changed
- oxia: add write latency for writeStream by @mattisonchao in #507
- Reduce max segment size in list responses by @merlimat in #508
- Added async flushing of WAL by @merlimat in #509
- Async tracking of commit offset i QuorumAckTracker by @merlimat in #510
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- build(deps): bump google.golang.org/grpc from 1.64.0 to 1.64.1 by @dependabot in #498
- Added server side support for WriteStream operation by @merlimat in #499
- server: enable pebble bloom filter for better
read
performance by @mattisonchao in #500 - Use WriteStream in client sdk by @merlimat in #501
- [improve][doc] Add info to specify different wal and dir paths if running a local test. by @heesung-sn in #504
- Use unique version ids within the same batch by @merlimat in #505
New Contributors
- @heesung-sn made their first contribution in #504
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- *: fix benchmark test issue by @mattisonchao in #487
- Upgrade all dependencies by @merlimat in #490
- Update to Alpine 3.20 by @merlimat in #491
- tls: support server TLS options by @mattisonchao in #492
- tls: support coordinator TLS options by @mattisonchao in #493
- tls: Support different TLS settings between public and internal by @mattisonchao in #494
- auth: support OIDC authentication provider and token authentication by @mattisonchao in #496
- build(deps): bump github.com/go-jose/go-jose/v3 from 3.0.1 to 3.0.3 by @dependabot in #497
Full Changelog: v0.5.0...v0.6.0
v0.5.0
New Features
Get()
operation with floor/ceiling comparison
It's now possible to do a Get()
request for a key that is floor (<=
), ceiling (>=
), lower (<
) or higher >
.
eg.:
key, value, version, err := client.Get(ctx, "my-key", ComparisonFloor())
Partition Key
A PartitionKey
can be specified in all the operations. When a partition key is set, the shard routing mechanism will be based on it instead of using the record key.
eg.:
key1, v1, err := client.Put(ctx, "key-1", []byte("1"), PartitionKey("x"))
key2, v2, err := client.Put(ctx, "key-2", []byte("1"), PartitionKey("x"))
key2, v2, err := client.Put(ctx, "key-3", []byte("1"), PartitionKey("x"))
All these record are going to be stored on the same shard, even though they have different keys.
Operations such as Get()
with floor/ceiling match, List()
and RangeScan()
become more efficient when a PartitionKey()
option is set, since they only need to operate on a single shard.
Sequential Keys
Oxia can help generating unique and monotonically increasing keys composed on an arbitrary number of sequences.
key1, v1, err := client.Put(ctx, "a", []byte("0"), SequenceKeysDeltas(1), PartitionKey("x"))
// key1 -> a-00000000000000000001
key2, v2, err := client.Put(ctx, "a", []byte("0"), SequenceKeysDeltas(5), PartitionKey("x"))
// key2 -> a-00000000000000000006
RangeScan
RangeScan()
is similar to List()
, though it allows to efficiently iterate over a large set of records
Reading Coordinator configuration from config map
When running in Kubernetes, the Oxia coordinator can read the configuration directly from a config map. This will allow to get instant notifications of changes to the configuration and to get them applied immediately.
What's Changed
- improve oxia coordinatior status configmap by @labuladong in #456
- Upgrade to OTel 1.26 by @merlimat in #457
- Switch CI to Go 1.22 by @merlimat in #458
- Upgrade K8S client API lib by @merlimat in #459
- Fixed Trivy scan severity config by @merlimat in #460
- Watch config changes by @labuladong in #462
- Upgrade to protovt 0.6 by @merlimat in #463
- Bump google.golang.org/grpc from 1.58.2 to 1.58.3 by @dependabot in #464
- Ensure notification channel is always closed before client.Close() returns by @merlimat in #466
- Added support for Get() with ComparisonType in Db abstraction by @merlimat in #465
- Server side handling of floor/ceiling get requests by @merlimat in #467
- doc: add file type to avoid confusing by @mattisonchao in #468
- Added client side implementation of ceiling/floor get queries by @merlimat in #469
- Added partition-key to override shard routing by @merlimat in #470
- Only watch config file when running coordinator by @merlimat in #471
- Support sequential write operation on server dbs by @merlimat in #472
- Support sequential keys in client SDK by @merlimat in #474
- Hide internal keys in CLI listing by @merlimat in #475
- Refactored CLI client by @merlimat in #476
- Added CLI options for partition-key, comparison type and sequence keys by @merlimat in #477
- Added delete-range CLI command by @merlimat in #478
- Added range-scan support in oxia db by @merlimat in #479
- Added range-scan support in public RPC by @merlimat in #480
- Implemented range-scan in client API by @merlimat in #481
- Update Busybox to fix CVE-2023-42366 by @merlimat in #482
- Support range-scan in CLI by @merlimat in #483
- Allower to read cluster config directly from the k8s config-map by @merlimat in #484
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- Fix handling of GetNotifications() request when leader is not fully initialized by @merlimat in #437
- Close all closers when shutting down by @RobertIndie in #438
- Enable Trivy scan for Oxia image by @merlimat in #439
- Check all levels of vulnerabilities with Trivy by @merlimat in #440
- improve deploy doc by @labuladong in #441
- Bump google.golang.org/protobuf from 1.31.0 to 1.33.0 by @dependabot in #442
- *: support TLS/mTLS on the peer and client by @mattisonchao in #443
- Bump golang.org/x/net from 0.18.0 to 0.23.0 by @dependabot in #446
- Use single go-routine instead of mutex for shard-controller by @merlimat in #447
- Coordinator not passing Term in delete shard request by @merlimat in #448
- Close controller when delete shard fails by @merlimat in #449
- Improve CLI tools to display ephemeral node session information by @merlimat in #450
- Update Pebble to stable release v1.1.0 by @merlimat in #451
- Use
Recreate
rollout strategy for coordinator deployment by @merlimat in #452 - Add jq tool to Docker image by @merlimat in #453
- Fixed session expiry with multiple session in a shard by @merlimat in #454
New Contributors
- @RobertIndie made their first contribution in #438
- @labuladong made their first contribution in #441
Full Changelog: v0.3.0...v0.4.0