找回密码
 立即注册
首页 业界区 业界 raft 写请求源码走读

raft 写请求源码走读

院儿饯 4 天前
0. 概述

在上一篇文章中介绍了 raft 读请求源码走读,本文继续结合 etcd-raft 源码介绍 raft 写请求流程。
需要说明的是,本文使用的是单节点集群环境,后续会补充多节点集群环境加以介绍。
1. 写请求流程

1.1 客户端写入请求

客户端通过 PUT 请求写入键值对请求:
  1. curl -L http://127.0.0.1:12380/my-key -XPUT -d hello
复制代码
该请求被 httpKVAPI 处理:
[code]func (h *httpKVAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {      key := r.RequestURI      defer r.Body.Close()      switch r.Method {      case http.MethodPut:                // 匹配 PUT 方法,处理写请求       v, err := io.ReadAll(r.Body)         if err != nil {            log.Printf("Failed to read on PUT (%v)\n", err)            http.Error(w, "Failed on PUT", http.StatusBadRequest)            return         }           h.store.Propose(key, string(v))  // 调用 h.store.Propose 提交该请求           w.WriteHeader(http.StatusNoContent)    }    ...}func (s *kvstore) Propose(k string, v string) {      var buf strings.Builder      if err := gob.NewEncoder(&buf).Encode(kv{k, v}); err != nil {         log.Fatal(err)      }      s.proposeC

相关推荐

您需要登录后才可以回帖 登录 | 立即注册