ovsdb <4> OVSDB协议通信

mac2026-08-08  6

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

最新回复(0)