00:00
好,接下来呢,我们就来看一下这个代码,它到底是怎么写的,对吧?那我们先来看一下啊,呃,来到这个代码当中,还记得我们上节课讲的时候,他在looking状态下是不是选leader啊,走的是哪一个了?还记得吗?是不是这块走的leader,那么一旦这块选举完毕之后,是不是就产生了对应的leader follow,每个节点都知道自己什么状态,那如果你是一个follow的话。那follow的话呢,它就会调用follow.follow力啊这方法啊,一起来看掉。那如果你是一个leader的话,它就会调用点。OK吧,好,那我们来看一下,那如果是leader的话。那我就执行他呗,那看一下他要执行下面这些方法。那一个个来啊,那就进到这里面去走,立的对吧,哎,立着点立的,那往下走,那这里面干了什么事呢?往下看。走。走走到这这里面会创建一个learner啊cns对吧?哎,对每一个节点创建一个。
01:07
那这里面它进行了一个start,那看这里面干了什么事啊,进来进来之后,那它start的话,它其实是一个线程,那是不是就调用的是这个run方法呀,对吧?来调用它那run方法里面,你看这里面有一个SSH set说到这了。哎,主色在这,你这是这个循环吗。哎,主持人这等待接收别人传过来的数据,等待谁呀,是不是等待这个follow对他进行一个注册呀,是这样吗?哎,对啊,现在呢,代码就主持在这,那接下来我们来看谁呢再回来。接下来我们来看这个follow,那follow里面是follow.follow力的这意思吧,哎,走到这。那看一下进来。哎,这两类啊,这个来回看,别看晕了,那这个follow他要干什么事呢。他是要干这些事儿,首先要找到说集训当中谁是老大。
02:00
是吧,嗯,然后跟这个老大呢,进行建立连接。好,那我看一下机器当是谁老大走到这儿往下走。走,走到这是find leader,哎,通过这个方法我去找集群当中谁说的。哎,具体怎么找的我们不看了啊,只要他找到老大之后,他要干什么事呢?是不是叫连接上对应的这个老大呀,哎,通过这个connect to lead。I进行连接,这里面你看底层上做socket I就是socket这种通讯啊,啊连接上啊回来。那一旦跟这个leader连接上之后,那下一步他要干嘛呢。下一步他就要进行一个注册。什么叫注册呀,所谓的注册是不是就是我告诉这个老大说,哎,我当前的一些信息状态,哎就发给他是这个意思啊,哎向他注册,那好,那你看注册代码里面写的什么事注册。往下走注册,这是new了一个qua packet,往下走看这块。
03:04
哎,所谓的注册就是往外写呀。哎,写给对方对吧,Red packet。那现在他是写发给谁呀?哎,他发给的是这个向leader进行发送。它发送完之后,你看它下面紧接着调用的就是瑞。什么意思啊,你看这块。他是发给对方哎,向他注册完之后,立即就等待对方的一个回信,因为对方会给他回一个什么,回一个新的一个。是这样吗?哎,要搜一个新的,那他在这一直等着,哎,等着读哈,一会我们来看这啊先别着急,那行,那那个等这个leader。看他leader收到没收到对吧,那这块是不是就接收啊,哎接收,那接收的话往下走。往下走看一下,这块有一个你只要收到相关数据之后,它就会在这里面创建这个Le handle,因为它会针对每一个节点创建对应的一个Le handle,然后并启动知道吗?啊,那看这个lender handle里面干了什么事?
04:13
那还在这往下找啊找。往下找一下啊,看一下干嘛了。那哈德里面是不是有这个start,是不是run方法呀,对吧。方法。对吧,哎,Run方法,因为它1START就会执行对应的run方法,那run方法里面就会来读数据,对吧?哎,读你发过来的packet,你看这边发的是不是packet。啊,这边吧。找一下这个副。你看啊啊没写啊啊,这面写的这个right是packet,那我这边收到的呢,就是对应的,哎,接收对方传过来的相关消息。接收到这个消息之后,他干什么事呢?那你往下看,往下看。
05:05
这条。你会发现他会根据你接收过来的消息创建了一个新的ID。再通过它创建一个新的通ID。不是这块吗。创建新的快递,创建完之后他是不是还得立即回应给对方啊,因为对方等着接收呢。那对方你这个往回发,那怎么发的呢?往下看。接下来哎这块呢,是创建了这个ID对吧,然后呢,他通过下面这个代码,哎,这个new一个啊宽容pack,然后通过这个write record将这个新的发送给对方,相当于是这块。对吧,哎,回馈给follow,那follow他就得进行接收啊,那你看一下这块啊,来到这个follow里面,Follow刚才这里面这个啊注册对吧,这面是发过去之后,他是不是在这等着呢,等着你发过来的应答。
06:03
是这样吗?哎,这叫read。那派就能得到对应的数据,得到对应的数据之后,他要干什么事情呢?爱往下看,往哪看呢?往这看。得到对应的数据之后,他就要对这个新的这个进行一个应答,哎,一个应答你说这块啊,如果收到了是leader的这个相关信息之后,那我立即再给他对方回信说,哎,我已经收到了,也就相当于是这块操作。给对方再回消息。对吧,啊回消息,那回消息之后,那leader是不是这边还得进行接收啊,对吧,来进行接收,那往下看。你刚才呢,是这个,诶right对吧,写给对方,写给对方之后你往下看,往哪看呢?看这块。说leader wait for po AK,哎,他呢,又开始等待这个follower,哎,你这边收到这个相关消息之后。
07:00
他又开始等待,哎,你这边呢,是否给我真正的应答啊应答,一旦收到这个应答之后,那接下来要干什么事情呢?就说收到这个封装应答之后,要进行这块。进行真正的数据的同步了。你的判断是不是要把我leader所有的数据同步给follow,还是说哎,它俩相等,那我就不同步了,那另一种方式呢,就是你follow太快了,那你要自己进行一个回滚。啊,这几种模式,那到底是哪种模式呢?就取决于对应的这个方法。对吧。进来,进来之后你往下看哪呢?看这块,Here are kids that we want to handle啊,什么意思呢?啊,强制发送这个快照啊,这是测试的一个情况,然后peer呢,And leader is already啊,已经同步过了,那就send mpp就是这个地。对吧,哎,之前我们说有个diff,还有这个track,还有一个是snap啊,Snap这三种方式啊,跟我们这个笔记当中啊,呃,讲的这块。
08:02
这块是一样的,哎,如果他俩一样什么也不做,如果呢,这个串呢,就相当于是follow的j sidd比这个leader s,那这个follow叫回滚,否则的话就是commit这个leader对吧,哎,直接提交啊。这是这块的含义,我给大家看了,那往下走,那这里面有一个什么呢。有一个看他看这方法啊,叫这个队列呢,Commit提案是不是提交提案呢,还记得两阶段提交吗?两阶段提交是不是先提交提案。那好,那进来。那这块呢,它就是要提交对应的提案,往下走,往哪走呢,走到最后。他那块儿。哎,前面处理完毕之后,那就是这个啊队列,然后leader commit提交了一个。Leader commit。发给对方。说你同不同意我对应的提案?这意思吧,哎,同不同意他电提,如果你同意的话,那下一步呢,我就给你发送数据,如果你不同意,那我就不发了啊好啊,这边发送了一个。
09:03
Leader。Commit,那我对应的这个follow阶段是不是就得收对应的这个节点,收对应这个leader commit啊对,往下看啊。退回来。呃,来到这里啊。嗯,来到这个这里面啊,看一下,然后再往前走follow啊进到里面吧,Follow里面这是注册完毕之后,注册完毕之后相当于已经建立连接,然后往下看看这块。说这个这是一个循环,说一直钻井是不是就读取对方的这个pack的,然后对这个packet进行处理的,对吧?哎,接收对方发的消息,然后进行处理,那我们这里就看的就是它相当于是这个地方。那是。
10:01
那这个提案我们来看一下啊,提案的话我们对它进行。相关处理。对吧,哎,处理处理完毕之后,那我是不是得给对方进行一个commit提交啊,提交进行一个相关的回复啊。那你这边回复完之后,那我这边我这个leader这块。是不是就可以进行下一步操作了啊,什么下一步操作呢,你看我现在在哪里啊,我这个leader这里面是在。对应的这个同步方法里面对吧,回退回退回退。这种啊。来到这儿啊,别晕啊,不知道大家晕不晕啊,这个代码量呢,确实要大一些啊,呃,先往上看啊,看一下这块。找一下吧。
11:05
啊热方法。方法里面,然后进到这里面啊,走到这。一直往下走啊,找到那个同步对吧?哎,找到这儿啊,回到这个同步这块,刚才呢,是这个在同步方法里面是提交了一个提案commit,那他如果对方应答了一个啊,说我已经同意你的提案之后,那接下来他要做什么事情,哎,那就说这块了啊,比如说我根据你返回来的这个同步策略,接下来我是要开始进行同步了。那你看这块,哎,就是write这个对应的。对吧,哎,把这个同步策略啊写出去,你按照我对应的这个方式进行相关数据的同步。啊,其实这块呢,就是整个数据的一个同步啊,其实不太好看啊,因为这里面是leader呢和follow啊,来回进行一个情况交互,那大家呢,可以慢一点啊,细致一点去看啊。
我来说两句