ContainerStatus ContainerManagement::getContainerStatus(Container &container, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement, is going to connect to NM [%s:%s] to getContainerStatus container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif ContainerId cid = container.getId(); list<ContainerId> cids; cids.push_back(cid); GetContainerStatusesRequest request; request.setContainerIds(cids); GetContainerStatusesResponse response = nmClient->getContainerStatuses(request); //3. free delete nmClient; list<ContainerStatus> statusList = response.getContainerStatuses(); if (statusList.size() > 0){ list<ContainerStatus>::iterator statusHead = statusList.begin(); return (*statusHead); }else{ ContainerStatus status; return status; } }
StartContainerResponse ContainerManagement::startContainer(Container &container, StartContainerRequest &request, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement::startContainer, is going to connect to NM [%s:%s] to start container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif //2. startContainers StartContainersRequest scsRequest; list<StartContainerRequest> requests; requests.push_back(request); scsRequest.setStartContainerRequests(requests); StartContainersResponse scsResponse = nmClient->startContainers(scsRequest); StartContainerResponse scResponse; scResponse.setServicesMetaData(scsResponse.getServicesMetaData()); LOG(INFO, "ContainerManagement::startContainer, after start a container, id:%d on NM [%s:%s]", container.getId().getId(), host.c_str(), port.c_str()); //3. free delete nmClient; return scResponse; }
void ContainerManagement::stopContainer(Container &container, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement::startContainer, is going to connect to NM [%s:%s] to stop container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif //2. stopContainers ContainerId cid = container.getId(); list<ContainerId> cids; cids.push_back(cid); StopContainersRequest request; request.setContainerIds(cids); nmClient->stopContainers(request); //3. free delete nmClient; }