Comments (3)
Like all interesting questions the answer is "it depends" ...
- Yes. The implementation pointed to is convenient and kind of solves the problem in practice. I think there is a theoretical risk of an infinite recursion for unlikely failure scenarios that have to be considered (cf metasrv in the databend repo).
- My main purpose with suggesting a client implementation was clarity and being explicit.
- In practice, handling this on the client side can be more efficient since if the client contacts a node that is not the leader and that node forwards to the leader we have to pay for the node to leader request each time. If the client gets an error and updates its belief of who's the leader that extra cost goes away for all future requests which IMHO is much better.
I think that our outlined solutions are not mutually exclusive. I just wanted to bring your attention to more "interesting aspects" of the original question.
from openraft.
Get help or engage by:
/help
: to print help messages./assignme
: to assign this issue to you.
from openraft.
@drmingdrmer @MikaelCall I successfully sorted that by doing this: https://github.com/ppamorim/openraft/blob/example/example-raft-kv/src/network/api.rs#L39-L72
from openraft.
Related Issues (20)
- Use separate channel to receive replication events HOT 1
- add mroe info to RaftMetrics::replication HOT 1
- Possible issue with backoff when multiple nodes are unreachable HOT 4
- about add learner HOT 5
- add an option `SnapshotPolicy::Never` HOT 1
- Add a command to let user trigger log purge with `Raft::purge_log()` HOT 1
- Tracking issue for refactoring snapshot API HOT 1
- Cannot implement `RaftLogStorage` and `RaftStateMachine` in `main` codeline HOT 2
- v2 API: Missing `Send` bound for `RaftStateMachine::apply()` HOT 2
- Compiling `openraft` with v2 API enabled results in some warnings HOT 3
- Feature: Allow creating `!Send` storage, log and network components HOT 3
- Manually impl `Clone` for `Raft` structure instead of using `#[derive(Clone)]` HOT 2
- Add type param `Time` to `UTime` HOT 2
- Consider allowing to change node address in one step instead of removing-then-adding HOT 1
- Tracking issue for rkyv support HOT 1
- Provide better support for transient state machine implementation HOT 1
- InternalServerState is too big, move Leading into Box HOT 1
- Upon startup, a node that is leader should restore local log progress and re-apply log entries if it is single node cluster HOT 1
- Consider relaxing NodeId: Default bound HOT 4
- debug_assert causes leader to panic HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from openraft.