Skip to content
This repository was archived by the owner on Feb 18, 2025. It is now read-only.
This repository was archived by the owner on Feb 18, 2025. It is now read-only.

API response of api/status to a follower node in raft mode returns RaftHealthyMembers field of null #1433

@geek981108

Description

@geek981108

Background

Topology

Raft mode with:

  • 192.168.7.50: Follower
  • 192.168.7.51: Follower
  • 192.168.7.52: Leader

Request API

api/status

Response Example

Followers:

{
	"Code": "OK",
	"Message": "Application node is healthy",
	"Details": {
		"Healthy": true,
		"Hostname": "ecs-22dfc66mki113jo2941m",
		"Token": "76987b1fdac8522b2867b0637b30f64e437d30a42866d3a21ce9920a6772ba60",
		"IsActiveNode": false,
		"ActiveNode": {
			"Hostname": "192.168.7.52:10008",
			"Token": "",
			"AppVersion": "",
			"FirstSeenActive": "",
			"LastSeenActive": "",
			"ExtraInfo": "",
			"Command": "",
			"DBBackend": "",
			"LastReported": "0001-01-01T00:00:00Z"
		},
		"Error": null,
		"AvailableNodes": [{
			"Hostname": "ecs-22dfc66mki113jo2941m",
			"Token": "76987b1fdac8522b2867b0637b30f64e437d30a42866d3a21ce9920a6772ba60",
			"AppVersion": "3.2.6",
			"FirstSeenActive": "2022-03-17T09:35:29Z",
			"LastSeenActive": "2022-03-17T12:27:50Z",
			"ExtraInfo": "",
			"Command": "",
			"DBBackend": "/usr/local/orchestrator/orchestrator.sqlite3",
			"LastReported": "0001-01-01T00:00:00Z"
		}],
		"RaftLeader": "192.168.7.52:10008",
		"IsRaftLeader": false,
		"RaftLeaderURI": "http://192.168.7.52:3000",
		"RaftAdvertise": "192.168.7.51",
		"RaftHealthyMembers": null
	}
}

Leader:

{
	"Code": "OK",
	"Message": "Application node is healthy",
	"Details": {
		"Healthy": true,
		"Hostname": "ecs-4rn1v6e2772s1rry7guq",
		"Token": "1ccf60cf5a82b4c24a55fdcf28926ebb12fde4cbf17cbb3c88efd616e85e7069",
		"IsActiveNode": true,
		"ActiveNode": {
			"Hostname": "192.168.7.52:10008",
			"Token": "",
			"AppVersion": "",
			"FirstSeenActive": "",
			"LastSeenActive": "",
			"ExtraInfo": "",
			"Command": "",
			"DBBackend": "",
			"LastReported": "0001-01-01T00:00:00Z"
		},
		"Error": null,
		"AvailableNodes": [{
			"Hostname": "ecs-4rn1v6e2772s1rry7guq",
			"Token": "1ccf60cf5a82b4c24a55fdcf28926ebb12fde4cbf17cbb3c88efd616e85e7069",
			"AppVersion": "3.2.6",
			"FirstSeenActive": "2022-03-17T09:35:29Z",
			"LastSeenActive": "2022-03-17T12:30:26Z",
			"ExtraInfo": "",
			"Command": "",
			"DBBackend": "/usr/local/orchestrator/orchestrator.sqlite3",
			"LastReported": "0001-01-01T00:00:00Z"
		}],
		"RaftLeader": "192.168.7.52:10008",
		"IsRaftLeader": true,
		"RaftLeaderURI": "http://192.168.7.52:3000",
		"RaftAdvertise": "192.168.7.52",
		"RaftHealthyMembers": ["192.168.7.52", "192.168.7.51", "192.168.7.50"]
	}
}

Problems

When an API of status check called for followers, it gaves field RaftHealthyMembers null which is confused.

Expect

When an API of status check called for followers, it gaves field RaftHealthyMembers same result of leader node.

Solution

Make a replication of request to leader node when status check API called and get RaftHealthyMembers from it to replace follower one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions