在补丁操作过程中,补丁控制服务(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)
:发送本消息的函数
PatchController
和PatchAgent
分别对上述的11类消息进行实现,实现各自对该类消息的必要成员方法。例如,PatchMessageHelloAgent
消息是PatchController
发送给PatchAgent
的消息,那么PatchController
就只实现了该消息的send(sock)
方法,在handle(sock, addr)
方法中只打印错误信息Should not get here
,PatchAgent
只实现了该消息的handle(sock, addr)
方法,在send(sock)
方法中也是只打印错误信息。
PatchMessageHello
/ PatchMessageHelloAck
/ PatchMessageSyncReq
/ PatchMessageSyncComplete
这4类消息是不同控制节点之间通信的消息,所有在PatchController中,对于该4类消息的handle(sock, addr)
和send(sock)
均有实现。
消息详解
PatchMessageHello
和PatchMessageHelloAck
PatchMessageHello
和PatchMessageHelloAck
是不同控制节点进行信息同步的消息,消息通过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的时间。
PatchMessageSyncReq
和PatchMessageSyncComplete
PatchMessageSyncReq
和PatchMessageSyncComplete
是不同控制节点之间通知进行资源文件夹同步的消息,消息通过UDP方式发送。PatchMessageSyncReq
消息类型编号为3
,PatchMessageSyncComplete
消息类型编号为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