Proto commits in danrusei/danube

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

Commit:87351ee
Author:Dan Rusei
Committer:GitHub

replace the single-slot PendingDelivery in the Exclusive and Shared r… (#235) * replace the single-slot PendingDelivery in the Exclusive and Shared reliable dispatchers with a pipelined in-flight window * dispatch config section has been added for max_unacked_messages * dispatch config section has been added for max_unacked_messages * validate the dispatch config

The documentation is generated from this commit.

Commit:bc4e283
Author:Dan Rusei

retrieve all security bindings for danube admin ui

Commit:c0a0f0e
Author:Dan Rusei
Committer:GitHub

refactor admin UI cluster page and create new page for rbac admin in UI (#225) * add topic subscription details * improve cluster page, add raft consensus and load balancing * add security services within UI

Commit:0529eb3
Author:Dan Rusei
Committer:GitHub

danube-admin serve schema registry details (#224)

Commit:c45eb04
Author:Dan Rusei
Committer:GitHub

Edge register implementation (#220) * add edge registry with heartbeat * add tests for edge registry * use topics defined on the config instead autogenerated

Commit:68fd53b
Author:Dan Rusei
Committer:GitHub

create the danube-edge capability (#217) * create the danube-edge capability * adapted the auth model * danube-edge server side refactor * use danube-client in danube-edge for resilience * adding edge broker workflow and tests * token is not required for auth none * implement create and delete topic on edge mode * consumer on cloud created after the edge creates the topic on remote cluster * add coordination between edge broker to cluster while creating / deleting topics * start edge service only to cluster mode * resolve wal missing broadcast in append batch * remove the edged secured tests for now * use StreamMessage instead of trimed messsage * First batch resolves via StorageFactory, subsequent batches hit the local HashMap

Commit:fc0f5e7
Author:Dan Rusei
Committer:GitHub

Impl key shared subs (#213) * key shared subscription implementation in progress * expose the public api for key shared

Commit:2425ead
Author:Dan Rusei
Committer:GitHub

client auth cleanup and eager topic creation (#212) * implement with_token_supplier in order to dynamically rotate the token * create JwtValidationCache in order to cache 30 sec the authn * resolved the bug broker couldn't serve topics assigned to it during convergence window

Commit:d5d73f2
Author:Dan Rusei
Committer:GitHub

implement RBAC and authz (#211) * implemented authentication context propagation and authorization model and metadata-backed authorizer * create roles and bindings though the admin cli * jwt-first authentication implementation for Danube * consolidate the security files within 3 main files * implement cache for authz calls * ensure secure connect between brokers raft traffic * added super admin * add authz metrics * created the unit tests * create the secure end to end tests * resolve a bug of clusters running with seed nodes * add correct path to the certs * resolved the bug on how security data was retrieved from raft * creating the topic for tests

Commit:9de24b5
Author:Dan Rusei
Committer:GitHub

implement Nack and dead letter queue (#210) * created the SubscriptionFailurePolicy with the defaults * wire nack * wire the pendingdelivery struct in reliable dispatchers * policy-based delay/backoff wiring * implemented retry exhaustion only * implemented subscription dlq * add reliable nack , redelivery metrics * adding dispatch failure handling * create replicatoor for dlq * replicator may need tls to connects to the peers * revert publish message async logic * engine holds failure policy * improve the structure of the dispatcher

Commit:a4abe78
Author:Dan Rusei
Committer:GitHub

use autodiscovery of existing cluster, for scalling up with helm (#202)

Commit:a266c8d
Author:Dan Rusei
Committer:GitHub

add raft cluster commands to admin cli and mcp (#201) * add mcp tools for raft cluster * remove etcd references from danube-persistent-storage

Commit:d015e18
Author:Dan Rusei
Committer:GitHub

Migrate from etcd to openraft/redb for metadata storage (#199) * replaced ETCD with embeded raft consensus layer * improve the danube-raft tests * second phase of the implementation of the raft service * updating config files * initializing raft cluster within danube * using serde to serialize instead of bincode * increase the raft timers for grpc transport * small changes to ensure data consistency * document the danube-raft crate * remove etcd from docker-compose files * removed local cache, use instead the raft state machine * new node should use --join commands * resolve the admin https config * remove broker A gracefully from the cluster

Commit:807317a
Author:Dan Rusei
Committer:GitHub

Proxy connect (#195) * introduced connect_url + broker_url to work with proxy in case of k8s * ensure connect_url contain https scheme if secure * use the x-danube header also for heath-check * delete old files

Commit:7affa8c
Author:Dan Rusei
Committer:GitHub

Improve /simplify danube client (#190) * danube client builders returns Result instead of panicking * centralize retry/backoff logic * state machines for TopicConsumer/TopicProducer * schema registry ergonomics * removed the references for ErrorType or ErrorMessage

Commit:680dc88
Author:Dan Rusei
Committer:GitHub

resolve rebalance issue, allow to be used from admin , even if autorebalance is off (#189)

Commit:b9bafbd
Author:Dan Rusei
Committer:GitHub

danube load manager auto rebalance (#182) resolve #51 * implemented danube automated rebalancing * add balance and rebalance admin cli commands * based on the user define assignment strategy, calculate rankings * include topic based metrics in the ranking calculation * rebalancing moved within its own module * create danube rebalance test workflow * wire up config to load manager * expeted imbalance on phase 1, but load manager redistrubute the topics balanced * updated the topic list command in the workflow * update all topics count operation * broker id to number parse bug * use polling instead of sleep * the code was using the ranking score instead of the topic count * extended automatic rebalancing polling * added load_report_interval_seconds field configurable * ensures each new topic assignment sees updated load state * use strategy fair in tests, as the topics have no traffic * adaptive threshold based on CV severity * ensure topics are not counted twice * ensures true round-robin for initial topic assignments * min load for small loads * resolve the rebalancing storm, allow only one move per cycle * validate inbalance after broker activate

Commit:6d0ade1
Author:Dan Rusei
Committer:GitHub

Schema registry improvements (#168) * improve schema registry, implement get_schema_by_id * update the danube clis with the latest changes to the schema * resolve multiple schema versions working for a topic * resolve one admin test issue * schema_id is gloabl unique now

Commit:6c6571a
Author:Dan Rusei
Committer:GitHub

Schema registry implementation (#165) * implement schema registry * adding the examples * add schema register compatibility check * add schema register compatibility check * doc the implementation * created the TopicSchemaContext and move it's implementation to topic_schema * create schema registry tests * remove the println from tests * implemented the schema registry for admin cli * create a test for broker-side schema registry integration for the Danube admin CLI * updated the tests with the new StreamMessage structure * adapt clis to use the newly implemented schema registry * minor bug on describe topic * add danube cli tests * run broker without tls for testing purpose * remove old comments

Commit:ea6340f
Author:Dan Rusei
Committer:GitHub

get topic lists from admin grpc instead scrapping from prom (#157) * get topics to broker mapping from brokers via grpc * added delivery strategy on listing topics * add logs for cluster/topic actions * resolve the topic listing errors

Commit:280ae0a
Author:Dan Rusei
Committer:GitHub

added cluster/topic actions for danube-admin-gateway (#156) * added cluster/topic actions for danube-admin-gateway * small readme update

Commit:9033c7b
Author:Dan Rusei
Committer:GitHub

refactored danube-admin-gateway, additional broker details added on registering (#153) * add admin and admin-clean targets in Makefile * on broker registration add additional fields * refactoring * identify the broker id for the broker hosting the topic

Commit:368e0b1
Author:Dan Rusei
Committer:GitHub

deactivate / activate an broker for maintenance (#142)

Commit:6f6463d
Author:Dan Rusei
Committer:GitHub

Unload topic from the broker, moving to another available broker in the cluster (#141) * implementation plan * updated the implemetation plan * implemented unload topic

Commit:97998d9
Author:Dan Rusei
Committer:GitHub

removed segment reference from StreamMessage (#123)

Commit:9e0a2e6
Author:Dan Rusei
Committer:GitHub

Reliable topic options removed from producer creation (#121) * topic reliable creationg refactor doc * removed topic realiable dispatch options from producer creation

Commit:2ef40a1
Author:Dan Rusei
Committer:GitHub

removed unused proto file (#103) Co-authored-by: Dan Rusei <dan.rusei@booking.com>

Commit:3d077c4
Author:Dan Rusei
Committer:GitHub

admin-cli: add E2E workflow; add JSON outputs and topic describe (#86) * admin-cli: add E2E workflow; add JSON outputs and topic describe; add base64 dep; add isolated CLI integration tests for namespaces/topics (partitioned + non-partitioned); stabilize tests by commenting describe; improve partition handling in tests * resolve the topics describe

Commit:6a33ac0
Author:Dan Rusei
Committer:GitHub

Resolve remote (#81) * connect when is needed to grpc storage backend * use streaming to send grpc data to backend storage * update Storagebackends only with closed segments

Commit:9e00dba
Author:Dan Rusei
Committer:GitHub

Permanent storage (#77) * create persistent storage crate * move disk storage code * use PersistentStorage instead of DiskStorage * configured managed storage * remove storage crates * resolve the disk storage with /namespace/topic

Commit:540d7ac
Author:Dan Rusei
Committer:GitHub

implement TLS transport and JWT authentication (#73) * garbage * add tls and jwt support * create the AuthService * create the script to generate the certificates * adding rustls required for grpc with tls * add auth to danube-client * implement Auth for HealthCheck and Schema service * add auth service to lookup service and consumers / producers * copy the certificates * add certs to github secrets * add ca volume on each broker * make integration tests to use tls * change the certificate generation * make the tests to work with tls * update the tests * simplify the tests * simplify client configuration * add schema type * resolve a bug with overlapping segments for distinct topics * ensure the response form lookup is with https if secure * updated the certificates

Commit:7bdef6f
Author:Dan Rusei
Committer:GitHub

use proto with no version (#71)

Commit:e6fc130
Author:Dan Rusei
Committer:GitHub

ensure message uniqueness, by adding offset to the Segment and adapting the MessageID (#70)

Commit:1994e26
Author:Dan Rusei

add proto files in danube-core crate

Commit:b22c52e
Author:Dan Rusei
Committer:GitHub

Chg storage (#57) * move StorageConfig from client to server configuration * add storage config in topic creation * renameStorageBackend to MetadataStorage for clarity and instantiate message storage in Broker

Commit:17daa75
Author:Dan Rusei
Committer:GitHub

use client defined Reliable Options (#35) * allow users to provide reliable dispatch details * use danube_client reliable_options and config_dispatch on all crates * implement on broker From<TopicDispatchStrategy> for ConfigDispatchStrategy * improve github workflows, ensure the unit tests are run for libs as well * set proper segment size as are provided in MB

Commit:8eecc0f
Author:Dan Rusei
Committer:GitHub

Impl storagebackend (#34) * create storage backends * implement InMemory storage * resolve reliable dispatch test errors * resolve the topic_storage tests * enable user to select backend storage type * implement disk and aws permanent storage

Commit:9cf3093
Author:Dan Rusei
Committer:GitHub

Create the reliable dispatch library (#30) * new reliable delivery crate in progress * move reliable_dispatch to the other crate * change reliable_delivery to reliable_dispatch * move consumer dispatcher logic to dispatchers * complete the move of reliable dispatch to new lib * change from TopicDeliveryStrategy to TopicDispatchStrategy

Commit:42b5712
Author:Dan Rusei
Committer:GitHub

simplify consumer dispatch code (#29) * create AckMessage struct and remove subscription_name from MsgID * refactor the consumer dispatch code to be cleaner

Commit:c231acd
Author:Dan Rusei
Committer:GitHub

Segment size (#28) * moving from segment number of messsages to segment size * resolve consumer.receive contention * resolve the consumer ack bug

Commit:de44deb
Author:Dan Rusei
Committer:GitHub

Impl msg ack (#27) * change within document from retention to delivery strategy * work in progress define the message * use StreamMessage for both receiving from producer as well as sending to consumer * enable consumer to send ack * implement server side message acknowledge * refactor the consumer dispatch to send messages in strict order * improving the consumer dispatch methods

Commit:b3ab1eb
Author:Dan Rusei
Committer:GitHub

Delivery strategy (#26) * create the topic storage struct with the main functions * creating new reliable dispatchers * create TopicStore lifecycle management policy * implement dispatcher reliable single consumer * add few comments * share the topic_storage across all subscription dispatchers * add segments index to have the ordered list of segments * creating the dispatcher reliable multiple consumers * change from reliable to persistent verb * allow client to define retention strategy * minor bug, on matching the str * rename from persitent to reliable delivery

Commit:fe095d2
Author:Dan Rusei

implement the consumers for partitioned topics

Commit:73495f5
Author:Dan Rusei

update admin cmds

Commit:a1dc4d7
Author:Dan Rusei

remove unsused admin cmds

Commit:2a6a6b8
Author:Dan Rusei

adding metadata message and custom attributes

Commit:607f024
Author:Dan Rusei

fix add / remove topics from danube-admin

Commit:d64d5c6
Author:Dan Rusei

add broker_info

Commit:ff0fe27
Author:Dan Rusei

introduce the danube admin cli crate

Commit:dba4ea0
Author:Dan Rusei

implement health check service on the client side

Commit:0736890
Author:Dan Rusei

implemented client service healthcheck on the server side

Commit:8dd1641
Author:Dan Rusei

implement client lookup service

Commit:0005795
Author:Dan Rusei

get_topic return Result instead of tuple

Commit:2f9a292
Author:Dan Rusei

send actionable errros to client using grpc Status

Commit:3c8d4d0
Author:Dan Rusei

consumer struct moved to Arc Mutex as it has to be modified by several functions

Commit:612940a
Author:Dan Rusei

proto file refactoring

Commit:2912491
Author:Dan Rusei

server side subscribe - add consumer to dispatchers

Commit:2aa4af4
Author:Dan Rusei

subscribe server side - work in progress

Commit:d2ee8e3
Author:Dan Rusei

implemented subscribe on the client side

Commit:e9aee47
Author:Dan Rusei

create the consumer client interface

Commit:125bd03
Author:Dan Rusei

work in progress for the send_message server side

Commit:a7b8319
Author:Dan Rusei

change the namings in proto file to reduce confusion

Commit:dd722df
Author:Dan Rusei

working to send messages with producer

Commit:dfdaf68
Author:Dan Rusei

defining the proto for producer send

Commit:0c35240
Author:Dan Rusei

create schema on the client side

Commit:2f6f0db
Author:Dan Rusei

client create producer

Commit:09b9564
Author:Dan Rusei

using ErrorDetails to respond to grpc calls

Commit:4fdbb39
Author:Dan Rusei

minor changes to producer proto file

Commit:b79f39d
Author:Dan Rusei

client to broker connection via grpc

Commit:b9231e8
Author:Dan Rusei

creating the initial proto file

Commit:afac568
Author:Dan Rusei

setting up infrastructure