Stx3.0补丁服务分析(二)

 

​ 在补丁操作过程中,补丁控制服务(sw-patch-controller-daemon)和补丁代理服务(sw-patch-agent)使用socket方式保持通信。通过组播方式,主要使用UDP,个别使用TCP方式通信。

消息类型

消息类型1 消息类型2
PatchMessageHello PatchMessageHelloAck
PatchMessageSyncReq PatchMessageSyncComplete
PatchMessageHelloAgent PatchMessageHelloAgentAck
PatchMessageQueryDetailed PatchMessageQueryDetailedResp
PatchMessageAgentInstallReq PatchMessageAgentInstallResp
PatchMessageDropHostReq  

消息结构

基类PatchMessage,上述11类消息都是继承基类实现的。

成员变量:

msgtype:消息类型编号

msgversion:消息版本号

message:消息体

成员方法:

decode(data):解码消息内容

encode():编码消息内容

handle(sock, addr):收到本消息之后的响应函数

send(sock):发送本消息的函数

PatchControllerPatchAgent分别对上述的11类消息进行实现,实现各自对该类消息的必要成员方法。例如,PatchMessageHelloAgent消息是PatchController发送给PatchAgent的消息,那么PatchController就只实现了该消息的send(sock)方法,在handle(sock, addr)方法中只打印错误信息Should not get herePatchAgent只实现了该消息的handle(sock, addr)方法,在send(sock)方法中也是只打印错误信息。

PatchMessageHello / PatchMessageHelloAck / PatchMessageSyncReq / PatchMessageSyncComplete 这4类消息是不同控制节点之间通信的消息,所有在PatchController中,对于该4类消息的handle(sock, addr)send(sock)均有实现。

消息详解

PatchMessageHelloPatchMessageHelloAck

PatchMessageHelloPatchMessageHelloAck是不同控制节点进行信息同步的消息,消息通过UDP方式发送。PatchMessageHello消息类型编号是1,消息内容包含发送消息节点的patch_op_counter值。PatchMessageHelloAck消息类型编号为2,消息体无特定内容。

sw-patch-controller-daemon服务在启动时会给所有控制节点发送一次PatchMessageHello消息,之后每隔30秒发送一次PatchMessageHello消息。

​ 控制节点在收到其他控制节点发送来的PatchMessageHello消息后,会解析消息中的patch_op_counter,如果收到的patch_op_counter比自己的大,就对资源文件夹进行同步。最后返回PatchMessageHelloAck消息。

​ 控制节点收到其他控制节点发送来的PatchMessageHelloAck消息后,会将该节点信息记录在controller_neighbours变量中,并更新其最后一次ack的时间。

PatchMessageSyncReqPatchMessageSyncComplete

PatchMessageSyncReqPatchMessageSyncComplete是不同控制节点之间通知进行资源文件夹同步的消息,消息通过UDP方式发送。PatchMessageSyncReq消息类型编号为3PatchMessageSyncComplete消息类型编号为4,这两类消息的消息体均无特定内容。

​ 在某个控制节点上对补丁执行upload/apply/remove/delete操作时,API在处理完补丁之后,会给其他控制节点发送PatchMessageSyncReq消息。

  • PatchMessageSyncReq
  • PatchMessageSyncComplete

  • PatchMessageHelloAgent
  • PatchMessageHelloAgentAck

  • PatchMessageQueryDetailed
  • PatchMessageQueryDetailedResp

  • PatchMessageAgentInstallReq
  • PatchMessageAgentInstallResp

  • PatchMessageDropHostReq

上传补丁

参考资料

社区源代码仓库:https://opendev.org/starlingx/update

smart代码仓库:https://github.com/smartpm/smart