ovsdb <4> OVSDB协议通信

4.3OVSDB协议通信
OVSDB的协议与外界通信的方式,rpcmethod,在JSON-RPC 1.0中实现。协议中每一个request字符串包含了method的name、传递给这个method的参数(可以为null)、request id;每一个response字符串包含了result object(调用成功时为非null)、error object(出错时应该为非null)、匹配请求的id。该database的wire protocol的实现是基于TCP实现的,tcp的端口号为6640。OVSDB协议一般实现了如下的method:List Databases、Get Schema、Transact、Cancel、Monitor、Update Notification、Monitor Cancellation、Lock Operations、Locked Notification、Stolen Notification、Echo。
4.3.1 List Databases
该操作主要是检索那些元素是数据库名字的数组。
Request包含了如下成员:
o “method”: “list_dbs”
o “params”: []
o “id”:
response包含了如下成员:
o “result”: [,…]
o “error”: null
o “id”: same “id” as request
4.3.2 Get Schema
该操作主要是检索描述的。
Request包含了如下成员:
o “method”: “get_schema”
o “params”: []
o “id”:
response包含了如下成员:
o “result”:
o “error”: null
o “id”: same “id” as request
如果我们的request中的database name在database中不存在,那么server就会发送如下的error response:
o “result”: null
o “error”: “unknown database”
o “id”: same “id” as request
4.3.3 Transact
该操作主要是促使database服务器去对指定的数据库执行一系列的操作。
Request包含了如下成员:
o “method”: “transact”
o “params”: [, ](后续跟的operation,每一个operation代表了一次单一的数据库操作,如果一个操作失败了,那么后续的operation也不会被执行,只有所有的operation都执行成功,transaction才会被提交。这里的operation将会在后续的章节4.4中做详细说明)
o “id”:
response包含了如下成员:
o “result”: [
]
o “error”: null
o “id”: same “id” as request
4.3.4 Cancel
该操作是一个通知操作,且没有对应的response。它指示server端去做完成或者取消transact的request操作。
Notification包含了如下成员:
o “method”: “cancel”
o “params”: [the “id” for an outstanding request]
o “id”: null
在执行上述notification的情况下,如果transact操作能够迅速完成,那么就会回应自己的response操作,如果未完成,那么server就会回应一个error response,该error response如下:
o “result”: null
o “error”: “canceled”
o “id”: the “id” member of the canceled request.
4.3.5 Monitor
该monitor request包含了如下成员:
o “method”: “monitor”
o “params”: [, , ]
o “id”:
该monitor response包含了如下成员:
o “result”:
o “error”: null
o “id”: same “id” as request
4.3.6 Update Notification
该更新通知操作是由server发往client来通知表项的变化的,该response是对上述的monitor request的应答。
该notification包含了如下成员:
o “method”: “update”
o “params”: [, ]
o “id”: null
该与上述monitor request中传递的相同,则为从表项名字到的映射,而则为从行的UUID到的映射,一个一般有如下成员:
“old”: present for “delete” and “modify” updates
“new”: present for “initial”, “insert”, and “modify” updates
由于它们之间的映射关系,各种改变也会在相应的对象中体现出来。
4.3.7 Monitor Cancellation
该操作的request是为了取消先前的monitor request。
该request包含了如下成员:
o “method”: “monitor_cancel”
o “params”: []
o “id”:
该与上述monitor request中传递的匹配,且是需要取消的monitor request。
该response包含了如下成员:
o “result”: {}
o “error”: null
o “id”: the request “id” member
如果该monitor cancellation的request对应的一个无效的monitor request,那么就会返回一个错误的response如下:
o “result”: null
o “error”: “unknown monitor”
o “id”: the request “id” member
4.3.8 Lock Operations
在OVSDB中提供了三个methods来支持clients对database的locking操作:“lock”、“steal"和"unlock”,这些由database提供的locks是由client定义的ID值来标识,且在任意时刻每个lock最多只能有一个拥有者,那么在众多clients中,它们只能允许一个拥有该lock的所有者读该database进行操作。
该request包含了如下成员:
o “method”: “lock”, “steal”, or “unlock”
o “params”: []
o “id”:
对应每个request,相应的response如下:
o “result”: {“locked”: boolean} for “lock”
o “result”: {“locked”: true} for “steal”
o “result”: {} for “unlock”
o “error”: null
o “id”: same “id” as request
对于相应的操作,解释如下:
Lock:当该lock可用的时候,database就会分配给请求的client该lock,如果有多个client请求同一个lock,它们采用先来先服务的顺序;
Steal:database迅速分配给该client有steal请求的所有权,如果已经存在了所有者,那么之前的所有者丢掉该lock的所有权;
Unlock:如果该client拥有该lock,那么这个操作会释放其拥有权;
注意:当关闭或者断开一个database client的连接的时候,会unlock其所有的lock;
4.3.9 Locked Notification
由于上面的request和response都是立即完成的,如果成功获得lock,其locked成员就是TRUE,否则就返回FALSE并放入队列中等待,该notification主要是用来通知client其之前请求的lock获得了允许,该notification有如下成员:
o “method”: “locked”
o “params”: []
o “id”: null
注意:database server会在回应了相应的lock request之后(该response中的locked成员必须为false)和回应client的一系列的unlock request之前;
4.3.10 Stolen Notification
该notification主要是用来通知一个client,其之前所拥有的lock,已经被其他client stolen,丢失了所有权。该notification有如下成员:
o “method”: “stolen”
o “params”: []
o “id”: null
注意:被通知的client不再拥有该lock,且该client要再后续执行lock或者steal则必须发布unlock的request;如果一个client以前就通过lock request拥有该lock,如果stole该lock的client释放了该lock,那么原client就自动重新获得该lock;而通过steal request获取lock的client则不会再重新获得可用的lock,但是要重新获的该lock必须unlock之后再lock;
4.3.11 Echo
该echo用于server和client证实其数据库连接是否保活,request成员如下:
o “method”: “echo”
o “params”: JSON array with any contents
o “id”:
response成员如下:
o “result”: same as “params”
o “error”: null
o “id”: the request “id” member

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值