对Riak Core的探索 (9) cheatsheet

56 篇文章 1 订阅
6 篇文章 0 订阅
haogongju、人人IT网、59n南龙、360doc不要抄我的烂博客了,私人备忘用。

[size=x-large]常用API之与ring、节点有关的API[/size]
[list]
[*]riak_core:vnode_modules() 查询安装的vnode模块
[*]riak_core_ring_manager:get_raw_ring() 获取整个ring环,包括partition及其节点
[*]riak_core_apl:get_apl(HashKey, N, Service) 得到HashKey对应的Preference List
[*]riak_core_ring:preflist(HashKey, Ring) 得到HashKey在环Ring上的Preference List
[*]
[/list]

[size=x-large]常用application管理API[/size]

erlang本身提供的application模块有许多API函数可用:
[list]
[*]aplication:loaded_applications/0 察看当前有哪些应用已经装载
[*]aplication:which_applications/0 察看当前有哪些应用已经启动
[*]
[/list]erlang以application组织系统,application由模块组成,多个共同组成一个系统。

已装载的application并不意味着它已经启动,这一般是在rel( 也即script)文件中指定

application又依赖其它applications,后者又依赖其它application。。。
例如
A依赖B、C:这意味着A要正常启动,B、C要先启动,
B又依赖X、Y:A要正常启动,Y、Z要先启动,
C又依赖Y、Z:C要正常启动,Y、Z要先启动,

以此类推。。。

一般在每个应用对应的.app文件中,有个applications的配置,其值是个列表(list),这个list就是该应用依赖的其它应用。在系统发布时(release),发布工具会自动将这个列表里的所以依赖应用都启动。

[b]如果不是作为发布(release)[/b],在开发过程中经常要手动启动(application:start/1),但是这种启动是不会自动将列表中的依赖应用也启动的,会报如下错误:
1> application:which_applications().
[{stdlib,"ERTS CXC 138 10","1.18.1"},
{kernel,"ERTS CXC 138 10","2.15.1"}]
2> application:start(xxx).
[color=red]{error,{not_started,lager}}[/color]

因此启动xxx应用之前要确保xxx的依赖应用lager先被启动(application:start/1),而lager应用又依赖compiler和syntax_tools应用,因此都得按照依赖关系一一启动:
3> application:start(lager).
{error,{not_started,compiler}}

在应用的[url=http://www.erlang.org/doc/man/app.html]app文件中会有一个applications属性[/url],列出所有的依赖应用。

4> application:start(compiler).
ok
5> application:start(lager).
{error,{not_started,syntax_tools}}
6> application:start(syntax_tools).
ok
7> application:start(lager).
18:40:11.591 [info] Application lager started on node nonode@nohost
ok
8> application:start(xxx).
18:40:13.739 [info] Application xxx started on node nonode@nohost
ok

在实际开发过程中,这种依赖的一一启动是很枯燥的,Riak Core的riak_core_util模块提供了这种依赖应用的管理:
riak_core_util:start_app_deps/1
这个函数检查应用依赖的其它应用,并确保所有依赖应用被启动。判断依赖应用:app文件中的applications属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值