1
0
Fork 0

Merge branch 'master' of github.com:rqlite/rqlite into other-node-status

master
Philip O'Toole 3 years ago
commit 0cca0dc603

@ -0,0 +1,20 @@
---
name: Bug report
about: Create a report to help improve rqlite
title: ''
labels: ''
assignees: ''
---
**What version are you running?**
**What did you do?**
**What did you expect to happen?**
**What happened instead?**
**Please include the Status and Expvar output from each node**
See https://github.com/rqlite/rqlite/blob/master/DOC/DIAGNOSTICS.md

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for rqlite
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

@ -0,0 +1,16 @@
---
name: Question about rqlite
about: Ask a question about rqlite and its use
title: ''
labels: ''
assignees: ''
---
Before you ask a question here about rqlite, consider instead posting your question to the rqlite Google Group. That way you can benefit from that larger community's expertise.
https://groups.google.com/g/rqlite
You can also start a discussion on the rqlite GitHub discussion page.
https://github.com/rqlite/rqlite/discussions

@ -3,7 +3,7 @@ This release implements a significant design change, which improves rqlite clust
In the 5.0 series, _Follower_ nodes learned the HTTP API address of the cluster Leader via information - known as _Metadata_ - that each node wrote to the Raft log. This Metadata was then available to each node in the cluster, if that node needed to redirect queries to the cluster Leader (assuming that node wasn't the Leader at that time). However that design was somewhat complex, and required the tracking of extra state, in addition to the SQLite database. It also meant that if the Metadata got out of sync with the Raft state, the cluster could be in a degraded state.
In this new design, a node now queries the Leader as needed, when that node needs to learn the Leader's HTTP API address. As a result, the Metadata component has been removed from rqlite, since it is no longer needed. And without any possibility of discrepancy between Metadata and Raft state, a whole class of potential bugs is removed. Any request for the Leader HTTP API address means a node connects to the TCP port already open (and required) for Raft connections, so does not introduce any new failure modes. This multiplexing of the Raft connection is performed via the `mux` package.
In this new design, a node now queries the Leader as needed, when that node needs to learn the Leader's HTTP API address. As a result, the Metadata component has been removed from rqlite, since it is no longer needed. And without any possibility of discrepancy between Metadata and Raft state, a whole class of potential bugs is removed. Any request for the Leader HTTP API address means the requesting node node connects to a TCP port already open on the Leader for Raft connections, so does not introduce any new failure modes. This multiplexing of the Raft TCP port is performed via the `mux` package.
This new design does mean that nodes running earlier software cannot communicate with 6.0 nodes, as 6.0 software no longer performs Metadata updates. As a result, **rqlite clusters running 5.x software or earlier must be explicitly upgraded**. To upgrade from an earlier version to this release you should [backup your Leader node](https://github.com/rqlite/rqlite/blob/master/DOC/BACKUPS.md), and [restore the database dump](https://github.com/rqlite/rqlite/blob/master/DOC/RESTORE_FROM_SQLITE.md) into a new 6.0 cluster.
@ -11,6 +11,7 @@ The data API and cluster-management API remain unchanged however, so client code
### Implementation changes and bug fixes
- [PR #792](https://github.com/rqlite/rqlite/pull/792): Fetch leader HTTP API addresses on demand.
- [PR #797](https://github.com/rqlite/rqlite/pull/797): Remove `redirect` key from HTTP status output.
## 5.12.1 (April 29th 2021)

@ -538,9 +538,8 @@ func (s *Service) handleStatus(w http.ResponseWriter, r *http.Request) {
}
httpStatus := map[string]interface{}{
"addr": s.Addr().String(),
"auth": prettyEnabled(s.credentialStore != nil),
"redirect": s.LeaderAPIAddr(),
"addr": s.Addr().String(),
"auth": prettyEnabled(s.credentialStore != nil),
}
nodeStatus := map[string]interface{}{

@ -358,6 +358,7 @@ class TestIdempotentJoin(unittest.TestCase):
deprovision_node(self.n1)
def test(self):
'''Test that a node performing two join requests works fine'''
self.n0 = Node(RQLITED_PATH, '0')
self.n0.start()
self.n0.wait_for_leader()

Loading…
Cancel
Save