Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: support raft learner in etcd #10645

Closed
wants to merge 35 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
087f98c
*: Change etcdserver API to support raft learner
jingyih Mar 14, 2019
229391c
*: fix compilation after API change
jingyih Mar 15, 2019
d29f066
etcdserver: support MemberAdd for learner
jingyih Mar 17, 2019
699a7d8
clientv3: support MemberAdd for learner
jingyih Mar 20, 2019
e9c923a
etcdctl: support MemberAdd for learner
jingyih Mar 20, 2019
a4af2f9
tests/e2e: Add test for learner member add
jingyih Mar 20, 2019
3108914
etcdctl: add learner field in member list output
jingyih Mar 21, 2019
c500153
*: add learner field in endpoint status
jingyih Mar 24, 2019
2c19071
etcdserver: filter rpc request to learner
jingyih Mar 26, 2019
c8fbc4d
functional: fix MemberAdd call in tests.
jingyih Apr 2, 2019
01a7b3e
integration: add TestKVForLearner
jingyih Apr 3, 2019
a1c0ea8
etcdserver: support MemberPromote for learner
WIZARD-CXY Mar 21, 2019
cc8508d
clientv3: add member promote
WIZARD-CXY Mar 22, 2019
3d2d371
etcdserver: exclude learner from leader transfer
jingyih Apr 12, 2019
2db0ca9
integration: add TestMoveLeaderToLearnerError
jingyih Apr 13, 2019
f1d6e70
integration: add TestTransferLeadershipWithLearner
jingyih Apr 15, 2019
b0be806
clientv3, etcdctl: MemberPromote for learner
WIZARD-CXY Apr 2, 2019
ab03045
words: whitelist words to fix goword test.
jingyih Apr 17, 2019
4f9eb2f
etcdserver: remove unnecessary bool comparison
jingyih Apr 17, 2019
5d1f6c7
integration: remove unnecessary type conversion
jingyih Apr 17, 2019
11e4168
clientv3/integration: update MemberAdd call
jingyih Apr 17, 2019
1a08038
clientv3/integration: fix cluster tests
jingyih Apr 18, 2019
f058b7f
clientv3/integration: deflake TestKVForLearner
jingyih Apr 18, 2019
d93fecc
etcdserver: adjust StrictReconfigCheck
jingyih Apr 18, 2019
6d8abba
etcdserver: learner return Unavailable for unsupported RPC
jingyih Apr 23, 2019
678d86e
etcdserver: check IsMemberExist before IsLearner
jingyih Apr 25, 2019
2e87a9a
etcdserver: allow 1 learner in cluster
jingyih Apr 27, 2019
90956f7
clientv3/integration: better way to deflake test
jingyih May 6, 2019
c629884
Doc: add learner in runtime-configuration.md
jingyih May 7, 2019
dc79587
etcdserver: add mayPromote check
WIZARD-CXY Apr 16, 2019
a8f87b8
etcdserver: forward member promote to leader
jingyih Apr 30, 2019
ec1928e
etcdserver: use etcdserver ErrLearnerNotReady
jingyih May 7, 2019
3f937cc
etcdserver: check http StatusCode before unmarshal
jingyih May 7, 2019
ae08d06
etcdserver: update raftStatus
WIZARD-CXY May 9, 2019
b433162
integration: update TestMemberPromote test
jingyih May 6, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .words
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,5 @@ PermitWithoutStream
__lostleader
ErrConnClosing
unfreed
grpcAddr
clientURLs
21 changes: 21 additions & 0 deletions Documentation/dev-guide/api_reference_v3.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ This is a generated documentation. Please read the proto files for more.
| MemberRemove | MemberRemoveRequest | MemberRemoveResponse | MemberRemove removes an existing member from the cluster. |
| MemberUpdate | MemberUpdateRequest | MemberUpdateResponse | MemberUpdate updates the member configuration. |
| MemberList | MemberListRequest | MemberListResponse | MemberList lists all the members in the cluster. |
| MemberPromote | MemberPromoteRequest | MemberPromoteResponse | MemberPromote promotes a member from raft learner (non-voting) to raft voting member. |



Expand Down Expand Up @@ -609,6 +610,7 @@ Empty field.
| name | name is the human-readable name of the member. If the member is not started, the name will be an empty string. | string |
| peerURLs | peerURLs is the list of URLs the member exposes to the cluster for communication. | (slice of) string |
| clientURLs | clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. | (slice of) string |
| isLearner | isLearner indicates if the member is raft learner. | bool |



Expand All @@ -617,6 +619,7 @@ Empty field.
| Field | Description | Type |
| ----- | ----------- | ---- |
| peerURLs | peerURLs is the list of URLs the added member will use to communicate with the cluster. | (slice of) string |
| isLearner | isLearner indicates if the added member is raft learner. | bool |



Expand Down Expand Up @@ -645,6 +648,23 @@ Empty field.



##### message `MemberPromoteRequest` (etcdserver/etcdserverpb/rpc.proto)

| Field | Description | Type |
| ----- | ----------- | ---- |
| ID | ID is the member ID of the member to promote. | uint64 |



##### message `MemberPromoteResponse` (etcdserver/etcdserverpb/rpc.proto)

| Field | Description | Type |
| ----- | ----------- | ---- |
| header | | ResponseHeader |
| members | members is a list of all members after promoting the member. | (slice of) Member |



##### message `MemberRemoveRequest` (etcdserver/etcdserverpb/rpc.proto)

| Field | Description | Type |
Expand Down Expand Up @@ -819,6 +839,7 @@ Empty field.
| raftAppliedIndex | raftAppliedIndex is the current raft applied index of the responding member. | uint64 |
| errors | errors contains alarm/health information and status. | (slice of) string |
| dbSizeInUse | dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member. | int64 |
| isLearner | isLearner indicates if the member is raft learner. | bool |



Expand Down
150 changes: 146 additions & 4 deletions Documentation/dev-guide/apispec/swagger/rpc.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,33 @@
}
}
},
"/v3/cluster/member/promote": {
"post": {
"tags": [
"Cluster"
],
"summary": "MemberPromote promotes a member from raft learner (non-voting) to raft voting member.",
"operationId": "MemberPromote",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/etcdserverpbMemberPromoteRequest"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/etcdserverpbMemberPromoteResponse"
}
}
}
}
},
"/v3/cluster/member/remove": {
"post": {
"tags": [
Expand Down Expand Up @@ -820,7 +847,7 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/definitions/etcdserverpbLeaseKeepAliveResponse"
"$ref": "#/x-stream-definitions/etcdserverpbLeaseKeepAliveResponse"
}
}
}
Expand Down Expand Up @@ -1009,7 +1036,7 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/definitions/etcdserverpbSnapshotResponse"
"$ref": "#/x-stream-definitions/etcdserverpbSnapshotResponse"
}
}
}
Expand Down Expand Up @@ -1091,7 +1118,7 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/definitions/etcdserverpbWatchResponse"
"$ref": "#/x-stream-definitions/etcdserverpbWatchResponse"
}
}
}
Expand Down Expand Up @@ -1882,6 +1909,11 @@
"type": "string"
}
},
"isLearner": {
"description": "isLearner indicates if the member is raft learner.",
"type": "boolean",
"format": "boolean"
},
"name": {
"description": "name is the human-readable name of the member. If the member is not started, the name will be an empty string.",
"type": "string"
Expand All @@ -1898,6 +1930,11 @@
"etcdserverpbMemberAddRequest": {
"type": "object",
"properties": {
"isLearner": {
"description": "isLearner indicates if the added member is raft learner.",
"type": "boolean",
"format": "boolean"
},
"peerURLs": {
"description": "peerURLs is the list of URLs the added member will use to communicate with the cluster.",
"type": "array",
Expand Down Expand Up @@ -1944,6 +1981,31 @@
}
}
},
"etcdserverpbMemberPromoteRequest": {
"type": "object",
"properties": {
"ID": {
"description": "ID is the member ID of the member to promote.",
"type": "string",
"format": "uint64"
}
}
},
"etcdserverpbMemberPromoteResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/definitions/etcdserverpbResponseHeader"
},
"members": {
"description": "members is a list of all members after promoting the member.",
"type": "array",
"items": {
"$ref": "#/definitions/etcdserverpbMember"
}
}
}
},
"etcdserverpbMemberRemoveRequest": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -2266,6 +2328,11 @@
"header": {
"$ref": "#/definitions/etcdserverpbResponseHeader"
},
"isLearner": {
"description": "isLearner indicates if the member is raft learner.",
"type": "boolean",
"format": "boolean"
},
"leader": {
"description": "leader is the member ID which the responding member believes is the current leader.",
"type": "string",
Expand Down Expand Up @@ -2508,6 +2575,43 @@
"format": "int64"
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeStreamError": {
"type": "object",
"properties": {
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
},
"grpc_code": {
"type": "integer",
"format": "int32"
},
"http_code": {
"type": "integer",
"format": "int32"
},
"http_status": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
},
"securityDefinitions": {
Expand All @@ -2521,5 +2625,43 @@
{
"ApiKey": []
}
]
],
"x-stream-definitions": {
"etcdserverpbLeaseKeepAliveResponse": {
"properties": {
"error": {
"$ref": "#/definitions/runtimeStreamError"
},
"result": {
"$ref": "#/definitions/etcdserverpbLeaseKeepAliveResponse"
}
},
"title": "Stream result of etcdserverpbLeaseKeepAliveResponse",
"type": "object"
},
"etcdserverpbSnapshotResponse": {
"properties": {
"error": {
"$ref": "#/definitions/runtimeStreamError"
},
"result": {
"$ref": "#/definitions/etcdserverpbSnapshotResponse"
}
},
"title": "Stream result of etcdserverpbSnapshotResponse",
"type": "object"
},
"etcdserverpbWatchResponse": {
"properties": {
"error": {
"$ref": "#/definitions/runtimeStreamError"
},
"result": {
"$ref": "#/definitions/etcdserverpbWatchResponse"
}
},
"title": "Stream result of etcdserverpbWatchResponse",
"type": "object"
}
}
}
53 changes: 52 additions & 1 deletion Documentation/dev-guide/apispec/swagger/v3election.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/definitions/v3electionpbLeaderResponse"
"$ref": "#/x-stream-definitions/v3electionpbLeaderResponse"
}
}
},
Expand Down Expand Up @@ -212,6 +212,43 @@
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeStreamError": {
"type": "object",
"properties": {
"grpc_code": {
"type": "integer",
"format": "int32"
},
"http_code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"http_status": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"v3electionpbCampaignRequest": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -330,5 +367,19 @@
}
}
}
},
"x-stream-definitions": {
"v3electionpbLeaderResponse": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/v3electionpbLeaderResponse"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of v3electionpbLeaderResponse"
}
}
}
Loading