Code Monkey home page Code Monkey logo

iggy's People

Contributors

armanm avatar bartoszciesla avatar berendsliedrecht avatar daniel-pape avatar dependabot[bot] avatar dfy313 avatar gibbz00 avatar h3xas avatar hubcio avatar igokulganesh avatar jakkaz avatar kushnerykpavel avatar mechtee avatar melbourne2991 avatar mmodzelewski avatar molter23 avatar nearsyh avatar numinnex avatar pradovic avatar rupert648 avatar sailnmobula avatar seroze avatar spetz avatar vdnhi avatar yhm404 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iggy's Issues

Connection string

Implement connection string for IggyClient to automatically connect and authenticate the client connection.

Run `iggy-server` with just one tokio worker

To verify if there aren't any deadlocks. And run perf tests.

EDIT:
just to add - this is pure exercise that can result in not-producing any code that'll be commited to master. in other words, it's just a task to check if everything's fine ;)

Fix nested env var config overriding

The current implementation of ConfigProvider uses the following code, to allow the overriding of server configuration via environment variables:

let config: Result<ServerConfig, figment::Error> = config_builder
    .merge(Env::prefixed("IGGY_").split("_"))
    .extract();

For example, the following setting:

[system.database]
path = "database"

Can be easily overwritten with:

export IGGY_SYSTEM_DATABASE_PATH=mydb

However, this will not work with the underscored field names, such as:

[quic.certificate]
self_signed = true

Will not be updated with:

export IGGY_QUIC_SELF_SIGNED=false

More information about this issue can be found here and in the mentioned nesting docs.

Indicators or spinners for the CLI

Maybe we could make use of some spinners or other kinds of indicators displaying the overall status, ongoing command execution etc.? Available crates spinoff, indicatif - I've tried to use indicatif once on the server-side, but had some issues with the tracing logger integration, even when using tracing-indicatif.

Offering my help to build stuff

Hey mate, this project looks great.

I am building a video streaming platform: videocall-rs https://github.com/security-union/videocall-rs

We currently use NATs, it works great but I am very interested in contributing to a pure rust message streaming platform that is more aligned with our stack and values.

What really called my attention is that you are planning to add a REST api, with NATs we all end up just writing this by hand, so this really makes me happy

How can we help you? what are you working on?

CC @griffobeid

Use separate struct of bundle of messages

Something like

struct Messages {
    messages: Vec<Arc<Message>>
    total_size_bytes: usize
}

so we can have faster putting into cache, without iterator in buffer.rs, method extend.

Allow passing unique consumer id or name

For now, when calling the poll_messages() the underlying consumer or consumer group, make use of u32 ID. Investigate the usage of Identifier instead (same like when working with the streams, topics, users or other resources) to improve the developer experience by passing either numeric or text ID.

PoC: accessible iggy-cmd from web GUI

The idea is to start ssh server inside iggy-server docker container, add new user with minimal priviliges, add iggy-cmd to PATH.

In the web gui, it should be possible to ssh user@server:port and see output of terminal.

Main purpose of this is to access this terminal, and use iggy-cmd thru it. (so it would be good to have nice ssh hello msg)

Fix load_messages_to_cache

When iggy-server is starting and cache is enabled, it tries to load everything to Vec<Arc<Messages>>. If on SSD there is more messages than memory, we get killed by system. Aim of this issue is to fix this problem by proposing new API, something like:
async fn get_newest_messages_by_size(u64: size_bytes)
and iterate starting from newest segments.

This way we would fetch only the amount we need, not everything.

Indicators or spinners for the server

Maybe we could make use of some spinners or other kinds of indicators displaying the overall status, ongoing command execution etc.? Available crates spinoff, indicatif - I've tried to use indicatif once on the server-side, but had some issues with the tracing logger integration, even when using tracing-indicatif.

Metrics: add cache hit KPI

So we could know anything regarding cache. Also, maybe think of some other metrics (not cache related) that are worth tracking.

Allow passing numeric or string resource ID in new CLI

In order to make a new CLI compatible with existing API, we could allow the user to provide either numeric ID (e.g. Stream = 1), or string ID (e.g. Topic = "orders") for the resources such as stream, topic and user.

For example, the SDK command looks like this:

pub struct DeleteTopic {
    pub stream_id: Identifier,
    pub topic_id: Identifier,
} 

And the CLI command could either use the same Identifier wrapper or just make use of String? to work similarly:

pub(crate) struct TopicDelete {
    stream_id: u32,
    topic_id: u32,
}

The only exceptions are CreateStream and CreateTopic commands (in the latter, you can use the Identifier for stream_id only).

Fix errors build.rs when publishing a crate

When trying to publish a crate with cargo publish it fails with:

Caused by:
  Source directory was modified by build.rs during cargo publish. Build scripts should not modify anything outside of OUT_DIR.

Delete segments command

Similar to the existing DeletePartitions command, we could introduce another kind of "administrative" request for deleting the segments. Given the specific Stream ID + Topic ID + Partition ID, the segments_count should remove all the segments starting from the oldest one (the lowest start offset in the log filename). The manual segments removal should act in the same way as the automated message expiration feature.

Custom Error type

Refactor the existing Error into more concise (and easier to use) component with a helper methods for converting the values to/from string, int etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.