当前位置:网站首页>Source code analysis of etcd database -- peer RT of inter cluster network layer client
Source code analysis of etcd database -- peer RT of inter cluster network layer client
2022-07-05 13:48:00 【Tertium FATUM】
peerRt(RoundTripper type ) Mainly responsible for the realization of etcdserver Network request and other functions , Used to send version or lease The service request . We know it is in ETCD Database source code analysis ——etcdserver bootstrap The second step in initialization is to initialize . How to use it ?
Such as server/etcdserver/cluster_util.go Of promoteMemberHTTP Shown , Use peerRt establish http client , Then construct the request Url And specify the request method as POST, establish http Request Structure , call http Client's do Function to make a request to the server , And get its response .
func promoteMemberHTTP(ctx context.Context, url string, id uint64, peerRt http.RoundTripper) ([]*membership.Member, error) {
cc := &http.Client{
Transport: peerRt} // Use peerRt establish http client
// TODO: refactor member http handler code cannot import etcdhttp, so manually construct url
requestUrl := url + "/members/promote/" + fmt.Sprintf("%d", id)
req, err := http.NewRequest("POST", requestUrl, nil)
if err != nil {
return nil, err }
req = req.WithContext(ctx)
resp, err := cc.Do(req)
if err != nil {
return nil, err }
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err }
// Processing request timed out
if resp.StatusCode == http.StatusRequestTimeout {
return nil, errors.ErrTimeout }
if resp.StatusCode == http.StatusPreconditionFailed {
// both ErrMemberNotLearner and ErrLearnerNotReady have same http status code
if strings.Contains(string(b), errors.ErrLearnerNotReady.Error()) {
return nil, errors.ErrLearnerNotReady }
if strings.Contains(string(b), membership.ErrMemberNotLearner.Error()) {
return nil, membership.ErrMemberNotLearner }
return nil, fmt.Errorf("member promote: unknown error(%s)", string(b))
}
if resp.StatusCode == http.StatusNotFound {
return nil, membership.ErrIDNotFound }
// Other types of errors
if resp.StatusCode != http.StatusOK {
// all other types of errors
return nil, fmt.Errorf("member promote: unknown error(%s)", string(b))
}
var membs []*membership.Member
if err := json.Unmarshal(b, &membs); err != nil {
return nil, err } // Deserialize request response content
return membs, nil
}
as follows server/etcdserver/adapters.go Medium GetMembersVersions Is also used peerRt obtain MembersVersions.
func (s *serverVersionAdapter) GetMembersVersions() map[string]*version.Versions {
return getMembersVersions(s.lg, s.cluster, s.MemberId(), s.peerRt, s.Cfg.ReqTimeout())
}
边栏推荐
- Laravel framework operation error: no application encryption key has been specified
- kafaka 日志收集
- PHP basic syntax
- Flutter 3.0更新后如何应用到小程序开发中
- Data Lake (VII): Iceberg concept and review what is a data Lake
- With 4 years of working experience, you can't tell five ways of communication between multithreads. Dare you believe it?
- 什么叫做信息安全?包含哪些内容?与网络安全有什么区别?
- Hide Chinese name
- STM32 reverse entry
- Huawei push service content, read notes
猜你喜欢
Record in-depth learning - some bug handling
Laravel框架运行报错:No application encryption key has been specified
【公开课预告】:视频质量评价基础与实践
What is a network port
Laravel framework operation error: no application encryption key has been specified
Attack and defense world crypto WP
jasypt配置文件加密|快速入门|实战
zabbix 监控
MySQL - database query - sort query, paging query
Win10——轻量级小工具
随机推荐
如何把大的‘tar‘存档文件分割成特定大小的多个文件
Operational research 68 | the latest impact factors in 2022 were officially released. Changes in journals in the field of rapid care
What is a network port
Win10 - lightweight gadget
一网打尽异步神器CompletableFuture
PHP character capture notes 2020-09-14
Idea remote debugging agent
【Hot100】34. Find the first and last positions of elements in a sorted array
redis6事务和锁机制
Address book (linked list implementation)
Kafaka log collection
Attack and defense world web WP
Ueditor + PHP enables Alibaba cloud OSS upload
Internal JSON-RPC error. {"code":-32000, "message": "execution reverted"} solve the error
内网穿透工具 netapp
Summit review | baowanda - an integrated data security protection system driven by compliance and security
Catch all asynchronous artifact completable future
Laravel generate entity
Apicloud studio3 WiFi real machine synchronization and WiFi real machine preview instructions
Aikesheng sqle audit tool successfully completed the evaluation of "SQL quality management platform grading ability" of the Academy of communications and communications