《Zookeeper》源碼分析(十四)之 投票是如何發送與接收的

目錄

  • Messenger
    • WorkerSender
    • WorkerReceiver
      • 第5步:檢驗選票的epoch和version
      • 第6步:處理投票

Messenger

Messenger管理接收到的消息以及待發送的消息,其源碼如下:
在這里插入圖片描述

它的源碼比較簡單,接下來著重介紹它維護的兩個線程:WorkerSenderWorkerReceiver

WorkerSender

WorkerSender的工作是不斷從FastLeaderElection.sendqueue中獲取待發送的選票,并將其傳遞給QuorumCnxManager去等待發送。
在這里插入圖片描述

WorkerReceiver

WorkerReceiver的工作相對來說復雜一些,它會不斷從QuorumCnxManager獲取來自其他服務器發來的信息,并將其轉化成一個選票,然后保存到FastLeaderElection.recvqueue中等待FastLeaderElection的選舉核心算法處理。
在這里插入圖片描述

接下來著重分析第5步和第6步

第5步:檢驗選票的epoch和version

在這里插入圖片描述

第6步:處理投票

在處理外部發送來的選票時,

  1. 如果選票來自不具有投票權的服務器,則忽略該選票,并向對方發送自己的選票
  2. 如果外部選票的選舉輪次epoch低于當前服務器,此時外部服務器和當前服務器都處于LOOKING,則向外部服務器發送自己的選票
  3. 如果當前服務器已經選舉出leader,而外部服務器仍在選舉中,則將自己的選票發送到外部服務器
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 網絡之 ipvlan 和 macvlan

Docker ipvlan 和 macvlan 引言 本文講解了Docker 網絡模式中的 ipvlan 和 macvlan 的區別,目前自己在生產環境中使用的 ipvlan 模式非常問題.也解決了實際業務問題. IPvlan L2 mode example ipvlan 無需網卡混雜模式 , 運行如下命令后可以生成一個 vlan 子接口 , 會和主網卡…

ElasticSearch的客戶端操作

ElasticSearch的客戶端操作 1、客戶端介紹 官方文檔地址: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 實際開發中,有多種方式操作Elasticsearch: 客戶端工具:發送http請求(RESTful風格)操作…

CF1195E OpenStreetMap 題解

很好的單調隊列題。 題目傳送門 題目意思: 給定一個 n m n\times m nm 的矩陣,求出所有大小為 a b a\times b ab 的子矩形中的最小值的和。 思路: 通過題目給的要求建立二維數組 h h h。通過單調隊列一行一行地掃,將掃出來…

Azure Blob存儲使用

創建存儲賬戶,性能選擇標準即可,冗余選擇本地冗余存儲即可 容器選擇類別選擇專用即可 可以上傳文件到blob中 打開文件可以看到文件的訪問路徑 4.編輯中可以修改文件 復制鏈接,嘗試訪問,可以看到沒有辦法訪問,因為創建容器的時候選…

spring(15) SpringBoot啟動過程

目錄 一、過程簡介二、過程流程圖三、源碼分析1、運行 SpringApplication.run() 方法2、確定應用程序類型3、加載所有的初始化器4、加載所有的監聽器5、設置程序運行的主類6、開啟計時器7、將 java.awt.headless 設置為 true8、獲取并啟用監聽器9、設置應用程序參數10、準備環境…

LeetCode450. 刪除二叉搜索樹中的節點

450. 刪除二叉搜索樹中的節點 文章目錄 [450. 刪除二叉搜索樹中的節點](https://leetcode.cn/problems/delete-node-in-a-bst/)一、題目二、題解方法一:遞歸(一種麻煩的方法)方法二:優化后的遞歸 一、題目 給定一個二叉搜索樹的根…

SpringBoot校驗,DTO文件中常用的注解應用案例.

在觀看本篇文章之前,可以先參考我之前寫的一篇文章 “ Spring5,Service層對DTO文件進行數據格式校驗. ” ,這篇文章是介紹在 Service層 對DTO文件的校驗。 以下方的 CompanyDTO 文件為例,講解不同的注解使用場景,以及…

論文閱讀——Imperceptible Adversarial Attack via Invertible Neural Networks

Imperceptible Adversarial Attack via Invertible Neural Networks 作者:Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解決的問題:雖然視覺不可感知性是對抗性示例的理想特性,但傳統的對抗性攻擊仍然會產…

每天一道leetcode:1129. 顏色交替的最短路徑(圖論中等廣度優先遍歷)

今日份題目: 給定一個整數 n,即有向圖中的節點數,其中節點標記為 0 到 n - 1。圖中的每條邊為紅色或者藍色,并且可能存在自環或平行邊。 給定兩個數組 redEdges 和 blueEdges,其中: redEdges[i] [ai, bi…

Dubbo Spring Boot Starter 開發微服務應用

環境要求 系統:Windows、Linux、MacOS JDK 8 及以上(推薦使用 JDK17) Git IntelliJ IDEA(可選) Docker (可選) 項目介紹 在本任務中,將分為 3 個子模塊進行獨立開發&#xff…

LINUX學習筆記_GIT操作命令

LINUX學習筆記 GIT操作命令 基本命令 git init:初始化倉庫git status:查看文件狀態git add:添加文件到暫存區(index)git commit -m “注釋”:提交文件到倉庫(repository)git log&a…

計算機組成與設計 Patterson Hennessy 筆記(一)MIPS 指令集

計算機的語言:匯編指令集 也就是指令集。本書主要介紹 MIPS 指令集。 匯編指令 算數運算: add a,b,c # abc sub a,b,c # ab-cMIPS 匯編的注釋是 # 號。 由于MIPS中寄存器大小32位,是基本訪問單位,因此也被稱為一個字 word。M…

Java Web常見面試題

1、JSP和Servlet有什么區別 jsp經過編譯后變成類Servlet(JSP的本質就是Servelt,JVM只能識別java的類,不能識別jsp的代碼,于是web容器將jsp的代碼編譯成JVM能夠識別的java類,也就是servelt)jsp更擅長表現于…

【2023年11月第四版教材】《第5章-信息系統工程之系統集成(第四部分)》

《第5章-信息系統工程之系統集成(第四部分)》 3 系統集成3.1網絡集成3.2 數據集成3.3 軟件集成3.4 應用集成3.5 安全工程 3 系統集成 3.1網絡集成 安全對策要點傳輸子系統1.常用的無線傳輸介質主要包括無線電波、微波、紅外線等2.常用的有線傳輸介質主…

webpack中常見的Loader

目錄 1.webpack中的loader是什么?配置方式 2. loader特性3.常見的loader 1.webpack中的loader是什么? loader 用于對模塊的"源代碼"進行轉換,在 import 或"加載"模塊時預處理文件 webpack做的事情,僅僅是分…

爬蟲逆向實戰(三)--天某云登錄

一、數據接口分析 主頁地址:天某云 1、抓包 通過抓包可以發現登錄接口是account/login 2、判斷是否有加密參數 請求參數是否加密? 通過“載荷”模塊可以發現password、comParam_signature、comParam_seqCode是加密的 請求頭是否加密? 無…

ElasticSearch 8.9.0 開發模式安裝

ElasticSearch 8.9.0 開發模式安裝 MacOS(Apple芯片):https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.0-darwin-aarch64.tar.gz Linux:https://artifacts.elastic.co/downloads/elasticsearch/elasti…

git倉庫新建上傳記錄

新建git倉會出現版本分支問題,解決過程: 其他的前期綁定之類的傳送:https://blog.csdn.net/qq_37194189/article/details/130767397 大概思路:新建一個分支,上傳,合并,刪除分支 git branch …

4.2 C++ Boost 內存池管理庫

Boost 庫是一個由C/C語言的開發者創建并更新維護的開源類庫,其提供了許多功能強大的程序庫和工具,用于開發高質量、可移植、高效的C應用程序。Boost庫可以作為標準C庫的后備,通常被稱為準標準庫,是C標準化進程的重要開發引擎之一。…

cmake擴展(5)——file命令排除部分文件

在cmake中可以使用file命令獲取需要的文件&#xff0c;并且支持正則/通配符&#xff0c;使用起來還是很方便的。 #語法file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])#example file(GLOB_RECURSE SOURCES "src/*.h" "src/*.cp…