nytopop / blip Goto Github PK
View Code? Open in Web Editor NEWWrite you an in-process gRPC service mesh.
License: Apache License 2.0
Write you an in-process gRPC service mesh.
License: Apache License 2.0
This assertion fails, which means nodes don't always converge to the same configuration:
test three_node_cluster_partition_recovery ... FAILED
failures:
---- three_node_cluster_partition_recovery stdout ----
thread 'three_node_cluster_partition_recovery' panicked at 'assertion failed: c2.conf_id() == c3.conf_id()', tests/join_protocol.rs:146:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
three_node_cluster_partition_recovery
Pops up a lot in tests. Leaving this issue here so I don't forget about it.
This is probably the same as hyperium/h2/issues/417. From my (very) limited exploration into the cause, it seems like drop_stream_ref
doesn't actually remove the slab entry, although there's enough indirection present that I'm fairly unsure of that being the case.
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
thread 'tokio-runtime-worker' panicked at 'assertion failed: self.slab.is_empty()', /home/eric/.cargo/registry/src/github.com-1ecc6299db9ec823/h2-0.2.2/src/proto/streams/store.rs:212:13
Currently, the integration tests use fixed size (~small) clusters because of the amount of boilerplate involved in test setup.
Instead, each tested property should be demonstrated to hold at a number of different cluster sizes. To do this correctly there needs to be a way to spin up an arbitrary size cluster, and progress specific nodes individually.
Basically, ensure metadata is preserved across all nodes, especially if nodes rejoin with changed metadata.
The simulation
module doesn't actually provide any way to simulate faults yet, which severely limits its utility.
Not sure if it's worth continuing the implementation, as https://github.com/tokio-rs/simulation is still in development and should be better integrated w/ the tokio runtime.
^^
^^ title
It's deprecated
As it stands, services need to manage peer connections manually (and can't share them with each other), which introduces extra latency / overhead.
Instead, there should be a pool of connections in MultiNodeCut that all services have access to.
This will probably involve implementing some kind of lazy connection type, as one isn't provided natively by tonic.
Related: hyperium/tonic#167
I'd be curious to give this a try, but unfortunately all my gRPC services are using the latest 0.6 version of tonic - do you have any plans to update blip for this version? or do you have any idea what kind of work would be involved?
Fault detection right now runs fixed elimination rounds over all observed subjects. Instead, it should track successive failure counts of individual subjects.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.