ovsdb <11> 给命令行和各个应用程序提供的接口

4.5给命令行和各个应用程序提供的接口
该部分主要对ovsdb中为命令行提供相应的数据接口做相应的说明。根据目前的设计思路:如果没有执行提交,那么其他应用程序查询不到该配置的数据,如果执行commit,则数据写入数据库应用程序得到数据更新的通知,如果commit失败或者执行cancel,那么之前的配置就会被destroy掉。
根据前面的描述,我们的ovsdb可以提供的机制为transaction和monitor操作,transaction为我们的执行commit提供了可能,monitor为我们通知应用程序提供了可能。这里我们仍需要考虑的是执行commit与否的问题:如果cmd执行配置,那么我们就将这些需要被commit的数据以json的格式存储起来(应用程序需要做的就是对数据库执行何种操作的问题),对于每个operation的操作均存储在json的object中,最终需要将这些object再以array的元素的形式放入transaction中。最后如果执行了commit那么就将该transaction作为request以jsonrpc的方式发送到ovsdb-server,让ovsdb-server执行先前的所有operation,最后将这些operation的结果写入ovsdb并通知到各个应用程序。
以下是经过简单的封装的通用接口,主要的作用就是解决命令行执行各个配置命令到最终执行commit或者cancel之间的一些通用接口:
4.5.1 do_create_json_op_insert
4.5.1.1函数原型
struct json * do_create_json_op_insert(struct json *row, const char *table_name)
该函数的作用是将row以insert的动作放到table为table_name中,并以json格式为返回值,这里并不是真正的实现数据库的操作,而是构造transaction的operation为insert的内容。
4.5.1.2输入参数
row:需要insert的内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
table_name:table的name,根据各个应用程序来决定是哪个table;
4.5.1.3返回值
Op:返回构造好的operation指针;

4.5.2 do_create_json_op_delete
4.5.2.1函数原型
struct json * do_create_json_op_delete(struct json *where, const char *table_name)
该函数的作用是以where为condition在table_name的table中删除对应的row,并以json格式为返回值,这里并不是真正的实现数据库的操作,而是构造transaction的operation为delete的内容。
4.5.2.2输入参数
where:匹配对应的条件内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
table_name:table的name,根据各个应用程序来决定是哪个table;
4.5.2.3返回值
Op:返回构造好的operation指针;

4.5.3 do_create_json_op_select
4.5.3.1函数原型
struct json * do_create_json_op_select(struct json *where, const char *table_name)
该函数的作用是以where为condition在table_name的table中查找对应的row,并以json格式为返回值,这里并不是真正的实现数据库的操作,而是构造transaction的operation为select的内容。
4.5.3.2输入参数
where:匹配对应的条件内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
table_name:table的name,根据各个应用程序来决定是哪个table;
4.5.3.3返回值
Op:返回构造好的operation指针;

4.5.4 do_create_json_op_update
4.5.4.1函数原型
struct json * do_create_json_op_update(struct json *where, struct json *row, const char *table_name)
该函数的作用是以where为condition在table_name的table中将对应的row的部分内容做修改,并以json格式为返回值,这里并不是真正的实现数据库的操作,而是构造transaction的operation为update的内容。
4.5.4.2输入参数
where:匹配对应的条件内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
row:需要insert的内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
table_name:table的name,根据各个应用程序来决定是哪个table;
4.5.4.3返回值
Op:返回构造好的operation指针;

4.5.5 do_create_json_op_param
4.5.5.1函数原型
Int do_create_json_op_param(struct json *param, struct json *where, struct json *row, const char *table_name, int type)
该函数的作用是为上述4.5.1、4.5.2、4.5.3、4.5.4提供参数,并根据实际的参数值来将之前的构造好的operation放入到param中,构造最终的transaction内容,如果有多个operation,该函数会被反复调用。
4.5.5.2输入参数
param:array的json结构,如果没有operation那么其中只有一个element值,为database的name;
where:匹配对应的条件内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
row:操作database的内容,根据具体的命令行参数来构造该json值,由应用程序来构造;
table_name:table的name,根据各个应用程序来决定是哪个table;
type:operation的操作类型,由应用程序觉得是何种操作;
4.5.5.3返回值
0:成功将operation加入到param中;
-1:type类型错误;

4.5.6 do_commit
4.5.6.1函数原型
void do_commit(struct jsonrpc *rpc, struct json *transaction)
该函数的作用将所有的operation经过jsonrpc到ovsdb-server,并得到reply值。
4.5.6.2输入参数
rpc:执行jsonrpc需要的参数;
transation:array的json结构,最终提交时的内容,包含了之前所有的命令行配置的operation;
4.5.6.3返回值

4.5.7 ovsdb_transact_cancel
4.5.7.1函数原型
void void ovsdb_transact_cancel(struct json *transaction)
该函数的作用是当命令行执行cancel时操作需要调用的接口,将transaction内容释放。
4.5.7.2输入参数
transation:array的json结构,最终的内容,包含了之前所有的命令行配置的operation;
4.5.7.3返回值

4.5.8 ovsdb_transact_commit
4.5.8.1函数原型
void ovsdb_transact_commit(struct json *transaction)
该函数的作用是当命令行执行commit时操作需要调用的接口。
4.5.8.2输入参数
transation:array的json结构,最终的内容,包含了之前所有的命令行配置的operation;
4.5.8.3返回值

4.5.9 应用程序构造各个json格式需要用到的json接口
struct json *json_array_create_empty(void);
void json_array_add(struct json *array_, struct json *element);
struct json *json_object_create(void);
voidjson_object_put(struct json *json, const char *name, struct json *value);
struct json *json_integer_create(long long int integer);
struct json *json_real_create(double real);
struct json *json_string_create(const char *s);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值