Skip to content

Commit

Permalink
etcdserver: add ability to auto-promote learners to voters
Browse files Browse the repository at this point in the history
Enable new learners to be marked for automatic promotion to voters upon
catching up with the leader.

Adds the ability to supply one or more promotion rules when adding a new
learnere. Promotion rules govern if and when a learner may be promoted
to a new role. Currently only promotion to voter is supported, but the
APIs added in this commit are flexible and allow for
backwards-compatible introduction of additional promotion targets (e.g.
reader).
  • Loading branch information
maxenglander committed Sep 11, 2021
1 parent c2937d7 commit 1e29cb3
Show file tree
Hide file tree
Showing 27 changed files with 2,629 additions and 469 deletions.
66 changes: 64 additions & 2 deletions Documentation/dev-guide/apispec/swagger/rpc.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@
"tags": [
"Cluster"
],
"summary": "MemberPromote promotes a member from raft learner (non-voting) to raft voting member.",
"summary": "MemberPromote promotes a member from raft non-voting member to raft voting member.",
"operationId": "Cluster_MemberPromote",
"parameters": [
{
Expand Down Expand Up @@ -1508,6 +1508,13 @@
"DELETE"
]
},
"MemberMonitorOp": {
"type": "string",
"default": "GREATER_EQUAL",
"enum": [
"GREATER_EQUAL"
]
},
"RangeRequestSortOrder": {
"type": "string",
"default": "NONE",
Expand Down Expand Up @@ -2332,6 +2339,13 @@
"items": {
"type": "string"
}
},
"promoteRules": {
"description": "promoteRules govern the automatic promotion of learner members.",
"type": "array",
"items": {
"$ref": "#/definitions/etcdserverpbMemberPromoteRule"
}
}
}
},
Expand All @@ -2349,6 +2363,13 @@
"items": {
"type": "string"
}
},
"promoteRules": {
"description": "promoteRules govern the automatic promotion of learner members.",
"type": "array",
"items": {
"$ref": "#/definitions/etcdserverpbMemberPromoteRule"
}
}
}
},
Expand Down Expand Up @@ -2395,6 +2416,32 @@
}
}
},
"etcdserverpbMemberMonitor": {
"type": "object",
"properties": {
"delay": {
"type": "integer",
"format": "int64"
},
"op": {
"$ref": "#/definitions/MemberMonitorOp"
},
"threshold": {
"type": "string",
"format": "uint64"
},
"type": {
"$ref": "#/definitions/etcdserverpbMemberMonitorType"
}
}
},
"etcdserverpbMemberMonitorType": {
"type": "string",
"default": "PROGRESS",
"enum": [
"PROGRESS"
]
},
"etcdserverpbMemberPromoteRequest": {
"type": "object",
"properties": {
Expand All @@ -2420,6 +2467,21 @@
}
}
},
"etcdserverpbMemberPromoteRule": {
"type": "object",
"properties": {
"auto": {
"type": "boolean",
"format": "boolean"
},
"monitors": {
"type": "array",
"items": {
"$ref": "#/definitions/etcdserverpbMemberMonitor"
}
}
}
},
"etcdserverpbMemberRemoveRequest": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -2671,7 +2733,7 @@
"format": "uint64"
},
"revision": {
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number.",
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nreceived in this stream are guaranteed to have a higher revision number than the\nheader.revision number.",
"type": "string",
"format": "int64"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@
"revision": {
"type": "string",
"format": "int64",
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nreceived in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
},
"raft_term": {
"type": "string",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@
"revision": {
"type": "string",
"format": "int64",
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nrecieved in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
"description": "revision is the key-value store revision when the request was applied.\nFor watch progress responses, the header.revision indicates progress. All future events\nreceived in this stream are guaranteed to have a higher revision number than the\nheader.revision number."
},
"raft_term": {
"type": "string",
Expand Down
Loading

0 comments on commit 1e29cb3

Please sign in to comment.