CLC通过CC调用NC

原创 2011年01月18日 15:48:00

CLC通过CC调用NC

说明:这里主要通过RebootInstances为例,展示重启虚拟机流程,在看这个之前必须了解axis2c的客户端与服务端通信过程

CLC通过CC客户端与CC通信

eucalyptus-2.0.1/cluster/目录下 cc-client-marshal.h/cCC服务器的客户端文件,CLC通过调用这个文件中函数与CC通信,具体过程与CCNC通信相似,在后面说明。

客户端连接到服务器

在这里我们将一个事件成为一个对象,如运行实例可以看着一个对象,重启实例可以看着一个对象。一个对象有多个值,在客户端与服务端通信时,要求每一个值都不为空,因为在客户端自己会检验是否为空,为空就会放弃这次通信,从而得不到任何响应。CC的客户端文件为cc-client-marshalNC的客户端文件为client-marshal

CC服务端响应CC客户端请求

axis2_skel_EucalyptusCC.c文件

CC的处理事件逻辑在eucalyptus-2.0.1/cluster/generated下的axis2_skel_EucalyptusCC.c文件,当CC服务端收到客户端的事件请求,如果收到RebootInstances,就开始响应请求,axis2_skel_EucalyptusCC.c中代码如下:

 

adb_RebootInstancesResponse_t* axis2_skel_EucalyptusCC_RebootInstances (const axutil_env_t *env  , adb_RebootInstances_t* rebootInstances )

 { return (RebootInstancesMarshal(rebootInstances, env)); }

 

转到CCserver-marshal.h文件

RebootInstancesMarshal(rebootInstances, env))则定义在CC文件夹中的server-marshal.h文件中,代码如下

adb_RebootInstancesResponse_t* RebootInstancesMarshal (adb_RebootInstances_t* rebootInstances, const axutil_env_t *env) {

      ……

  if (!DONOTHING) {

    rc = doRebootInstances(&ccMeta, instIds, instIdsLen);

  }

     ……

 

  return(ret);

}

本段代码的主要部分为红色字体部分rc = doRebootInstances(&ccMeta, instIds, instIdsLen);

转到CChandlers.h文件

通过这个调用相应目录下的handlers.h文件,doRebootInstances函数代码如下

int doRebootInstances(ncMetadata *meta, char **instIds, int instIdsLen) {

 ……

      rc = ncClientCall(meta, timeout, NCCALL, resourceCacheLocal.resources[j].ncURL, "ncRebootInstance", instId);

     …….

 

  return(0);

}

通过上面的rc = ncClientCall(meta, timeout, NCCALL, resourceCacheLocal.resources[j].ncURL, "ncRebootInstance", instId);调用同一文件夹下的ncClientCall函数

 

#include "client-marshal.h"

 

int ncClientCall(ncMetadata *meta, int timeout, int ncLock, char *ncURL, char *ncOp, ...) {

      ……

 

  logprintfl(EUCADEBUG, "ncClientCall(%s): called ncURL=%s timeout=%d/n", ncOp, ncURL, timeout);

 

  rc = pipe(filedes);

  if (rc) {

    logprintfl(EUCAERROR, "ncClientCall(%s): cannot create pipe/n", ncOp);

    return(1);

  }

 

  va_start(al, ncOp);

 

  // grab the lock

  sem_mywait(ncLock);

 

  pid = fork();

  if (!pid) {

    ncStub *ncs;

 

    close(filedes[0]);

    ncs = ncStubCreate(ncURL, NULL, NULL);

    if (config->use_wssec) {

      rc = InitWSSEC(ncs->env, ncs->stub, config->policyFile);

    }

             

    logprintfl(EUCADEBUG, "/tncClientCall(%s): ppid=%d client calling '%s'/n", ncOp, getppid(), ncOp);

    if (!strcmp(ncOp, "ncGetConsoleOutput")) {

      ……

    } else if (!strcmp(ncOp, "ncAttachVolume")) {

     ……  

    } else if (!strcmp(ncOp, "ncDetachVolume")) {

     ……

    } else if (!strcmp(ncOp, "ncPowerDown")) {

      ……

    } else if (!strcmp(ncOp, "ncRebootInstance")) {

      char *instId = va_arg(al, char *);

      rc = ncRebootInstanceStub(ncs, meta, instId);

    }

……

 

  return(ret);

}

上面的ncStubCreate(ncURL, NULL, NULL); ncRebootInstanceStub(ncs, meta, instId);定义在头文件client-marshal.h中,这个是NC客户端文件

创建NC客户端

在上面ncStubCreate()函数是用来创建NC客户端的,每个客户端都有一个地址,这个地址是从CLC传过来的,在调用ncStubCreate()前的一系列操作都是得到要执行该操作的NC地址,即URL,然后通过调用axis2c的库函数

stub = axis2_stub_create_EucalyptusNC(env, client_home, (axis2_char_t *)uri);

创建该URLNC客户端。

NC执行命令

创建到客户端后,调用该客户端的函数接口就可以让该NC执行我们想要的操作了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

cc2420ReceiveP.nc 阅读

1) async event void  InterruptFIFOP.fired(); -> 调用了 beginReceive(); 2)beginReceive(); -> 调用了recei...

nc65用友uap开发节点通过按钮调用打开另外一个节点并传数据跳编辑态(推单)

nc65用友uap开发打开另外一个节点并传数据(推单) 1.按钮代码: package nc.ui.fdc_pr.h303113510.actions; import java.awt.event....

用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据

用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据 前面一篇博客讲了利用查询模版并显示在弹窗面板上的拉单方法。此次是直接通过调用查询模版查询上游所有单据。如图所示: ...

中国CLC3型高架高机动雷达

  • 2015-07-01 13:32
  • 1.95MB
  • 下载

CLC(ClearCarry Flag)

★、清进位指令CLC(ClearCarry Flag):CF←0 ★、置进位指令STC(Set CarryFlag):CF←1 ★、进位取反指令CMC(ComplementCarry Flag):...

IEC/PD-CLC-TR-50427-2004

  • 2012-01-13 11:48
  • 21.54MB
  • 下载

CC3.2+Lua ——Lua调用自定义C++类

【转载】 http://shahdza.blog.51cto.com/2410787/1568051 【唠叨】     本节要讲的是如果将自己写的C++类注册...

Cocos2d-x Lua 回调函数cc.CallFunc类,内部调用其他类函数报空

版本:cocos2d-x 3.11 语言:Lua   今天逛了一遍论坛,看到一些独立游戏制作者制作的游戏,感觉好羡慕。自己也有种想要制作一个的冲动,不过不是那种益智类的小游戏,而是世界观庞大的高自...

CC3.2+Lua(8) ——Lua调用自定义C++类

转自http://my.oschina.net/guyson/blog/338375 【唠叨】     本节要讲的是如果将自己写的C++类注册进Lua环境,让Lua去调用自定义的C++类。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)