Remove stale code
This commit was SVN r26253.
Этот коммит содержится в:
родитель
19630ca28d
Коммит
71f9e69c62
@ -1,13 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2009-2010 High Performance Computing Center Stuttgart,
|
|
||||||
# University of Stuttgart. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
# Specific to this module
|
|
||||||
mca_link_libraries=libopen-rte
|
|
||||||
required_check=find_ccp
|
|
@ -1,55 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
# University Research and Technology
|
|
||||||
# Corporation. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
# of Tennessee Research Foundation. All rights
|
|
||||||
# reserved.
|
|
||||||
# Copyright (c) 2004-2009 High Performance Computing Center Stuttgart,
|
|
||||||
# University of Stuttgart. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
# All rights reserved.
|
|
||||||
# Copyright (c) 2008-2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
EXTRA_DIST = .windows
|
|
||||||
|
|
||||||
AM_CPPFLAGS = $(ras_ccp_CPPFLAGS)
|
|
||||||
|
|
||||||
sources = \
|
|
||||||
ras_ccp.h \
|
|
||||||
ras_ccp_component.c \
|
|
||||||
ras_ccp_module.c
|
|
||||||
|
|
||||||
|
|
||||||
# Make the output library in this directory, and name it either
|
|
||||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
|
||||||
# (for static builds).
|
|
||||||
|
|
||||||
if MCA_BUILD_orte_ras_ccp_DSO
|
|
||||||
lib =
|
|
||||||
lib_sources =
|
|
||||||
component = mca_ras_ccp.la
|
|
||||||
component_sources = $(sources)
|
|
||||||
else
|
|
||||||
lib = libmca_ras_ccp.la
|
|
||||||
lib_sources = $(sources)
|
|
||||||
component =
|
|
||||||
component_sources =
|
|
||||||
endif
|
|
||||||
|
|
||||||
mcacomponentdir = $(pkglibdir)
|
|
||||||
mcacomponent_LTLIBRARIES = $(component)
|
|
||||||
mca_ras_ccp_la_SOURCES = $(component_sources)
|
|
||||||
mca_ras_ccp_la_LDFLAGS = -module -avoid-version $(ras_ccp_LDFLAGS)
|
|
||||||
mca_ras_ccp_la_LIBADD = $(ras_ccp_LIBS)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = $(lib)
|
|
||||||
libmca_ras_ccp_la_SOURCES = $(lib_sources)
|
|
||||||
libmca_ras_ccp_la_LDFLAGS = -module -avoid-version $(ras_ccp_LDFLAGS)
|
|
||||||
libmca_ras_ccp_la_LIBADD = $(ras_ccp_LIBS)
|
|
@ -1,29 +0,0 @@
|
|||||||
# -*- shell-script -*-
|
|
||||||
#
|
|
||||||
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
# University Research and Technology
|
|
||||||
# Corporation. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
# of Tennessee Research Foundation. All rights
|
|
||||||
# reserved.
|
|
||||||
# Copyright (c) 2004-2007 High Performance Computing Center Stuttgart,
|
|
||||||
# University of Stuttgart. All rights reserved.
|
|
||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
# All rights reserved.
|
|
||||||
dnl Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
# MCA_ras_ccp_CONFIG([action-if-found], [action-if-not-found])
|
|
||||||
# -----------------------------------------------------------
|
|
||||||
AC_DEFUN([MCA_orte_ras_ccp_CONFIG],[
|
|
||||||
AC_CONFIG_FILES([orte/mca/ras/ccp/Makefile])
|
|
||||||
|
|
||||||
ras_ccp_good=0
|
|
||||||
# CCP does never exist under Unix
|
|
||||||
[$2]
|
|
||||||
])dnl
|
|
@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2008 The Trustees of Indiana University.
|
|
||||||
* All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
*
|
|
||||||
* Resource Allocation (CCP)
|
|
||||||
*/
|
|
||||||
#ifndef ORTE_RAS_ccp_H
|
|
||||||
#define ORTE_RAS_ccp_H
|
|
||||||
|
|
||||||
#include "orte_config.h"
|
|
||||||
#include "orte/mca/ras/ras.h"
|
|
||||||
#include "orte/mca/ras/base/base.h"
|
|
||||||
|
|
||||||
BEGIN_C_DECLS
|
|
||||||
|
|
||||||
struct orte_ras_ccp_component_t {
|
|
||||||
/** Base RAS component */
|
|
||||||
orte_ras_base_component_t super;
|
|
||||||
/** What's the priority of this component */
|
|
||||||
int priority;
|
|
||||||
};
|
|
||||||
typedef struct orte_ras_ccp_component_t orte_ras_ccp_component_t;
|
|
||||||
|
|
||||||
ORTE_DECLSPEC extern orte_ras_ccp_component_t mca_ras_ccp_component;
|
|
||||||
ORTE_DECLSPEC extern orte_ras_base_module_t orte_ras_ccp_module;
|
|
||||||
|
|
||||||
END_C_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,116 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2009 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* Copyright (c) 2004-2008 The Trustees of Indiana University.
|
|
||||||
* All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "orte_config.h"
|
|
||||||
|
|
||||||
#include "opal/mca/base/base.h"
|
|
||||||
#include "opal/mca/base/mca_base_param.h"
|
|
||||||
#include "orte/constants.h"
|
|
||||||
#include "orte/util/proc_info.h"
|
|
||||||
#include "ras_ccp.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* Import the Windows CCP API. */
|
|
||||||
#import "ccpapi.tlb" named_guids no_namespace raw_interfaces_only \
|
|
||||||
rename("SetEnvironmentVariable","SetEnvVar") \
|
|
||||||
rename("GetJob", "GetSingleJob") \
|
|
||||||
rename("AddJob", "AddSingleJob")
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local variables
|
|
||||||
*/
|
|
||||||
static int param_priority;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local functions
|
|
||||||
*/
|
|
||||||
static int ras_ccp_open(void);
|
|
||||||
static int orte_ras_ccp_component_query(mca_base_module_t **module, int *priority);
|
|
||||||
|
|
||||||
|
|
||||||
orte_ras_ccp_component_t mca_ras_ccp_component = {
|
|
||||||
{
|
|
||||||
/* First, the mca_base_component_t struct containing meta
|
|
||||||
information about the component itself */
|
|
||||||
|
|
||||||
{
|
|
||||||
ORTE_RAS_BASE_VERSION_2_0_0,
|
|
||||||
|
|
||||||
/* Component name and version */
|
|
||||||
"ccp",
|
|
||||||
ORTE_MAJOR_VERSION,
|
|
||||||
ORTE_MINOR_VERSION,
|
|
||||||
ORTE_RELEASE_VERSION,
|
|
||||||
|
|
||||||
/* Component open and close functions */
|
|
||||||
ras_ccp_open,
|
|
||||||
NULL,
|
|
||||||
orte_ras_ccp_component_query
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* The component is checkpoint ready */
|
|
||||||
MCA_BASE_METADATA_PARAM_CHECKPOINT
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static int ras_ccp_open(void)
|
|
||||||
{
|
|
||||||
mca_base_param_reg_int(&mca_ras_ccp_component.super.base_version,
|
|
||||||
"priority",
|
|
||||||
"Priority of the ccp ras component",
|
|
||||||
false, false, 13,
|
|
||||||
&mca_ras_ccp_component.priority);
|
|
||||||
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int orte_ras_ccp_component_query(mca_base_module_t **module, int *priority)
|
|
||||||
{
|
|
||||||
ICluster* pCluster = NULL;
|
|
||||||
HRESULT hr = S_OK;
|
|
||||||
|
|
||||||
/* CCP is not thread safe. Use the apartment model. */
|
|
||||||
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
|
||||||
|
|
||||||
/* Try to create the Cluster object. */
|
|
||||||
hr = CoCreateInstance( __uuidof(Cluster),
|
|
||||||
NULL,
|
|
||||||
CLSCTX_INPROC_SERVER,
|
|
||||||
__uuidof(ICluster),
|
|
||||||
reinterpret_cast<void **> (&pCluster) );
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
/* We are not Windows clusters, don't select us.*/
|
|
||||||
*module = NULL;
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if we are NOT an HNP, then don't select us */
|
|
||||||
if (!ORTE_PROC_IS_HNP) {
|
|
||||||
pCluster->Release();
|
|
||||||
*module = NULL;
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We are Windows clusters and this is HNP. */
|
|
||||||
pCluster->Release();
|
|
||||||
*priority = mca_ras_ccp_component.priority;
|
|
||||||
*module = (mca_base_module_t *) &orte_ras_ccp_module;
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
@ -1,342 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004-2007 The University of Tennessee and The University
|
|
||||||
* of Tennessee Research Foundation. All rights
|
|
||||||
* reserved.
|
|
||||||
* Copyright (c) 2004-2009 High Performance Computing Center Stuttgart,
|
|
||||||
* University of Stuttgart. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
#include "orte_config.h"
|
|
||||||
#include "orte/constants.h"
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <comutil.h>
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "opal/util/output.h"
|
|
||||||
#include "orte/util/show_help.h"
|
|
||||||
|
|
||||||
#include "orte/runtime/orte_globals.h"
|
|
||||||
|
|
||||||
#include "orte/mca/ras/base/ras_private.h"
|
|
||||||
#include "ras_ccp.h"
|
|
||||||
|
|
||||||
/* Import the Windows CCP API. */
|
|
||||||
#import "ccpapi.tlb" named_guids no_namespace raw_interfaces_only \
|
|
||||||
rename("SetEnvironmentVariable","SetEnvVar") \
|
|
||||||
rename("GetJob", "GetSingleJob") \
|
|
||||||
rename("AddJob", "AddSingleJob")
|
|
||||||
|
|
||||||
/* Include the library for ::ConvertBSTRToString */
|
|
||||||
#pragma comment(lib, "comsuppw.lib")
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local functions
|
|
||||||
*/
|
|
||||||
static int orte_ras_ccp_allocate(opal_list_t *nodes);
|
|
||||||
static int orte_ras_ccp_finalize(void);
|
|
||||||
static int discover(opal_list_t* nodelist, ICluster* pCluster);
|
|
||||||
void ras_get_cluster_message(ICluster* pCluster);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Local variables
|
|
||||||
*/
|
|
||||||
orte_ras_base_module_t orte_ras_ccp_module = {
|
|
||||||
orte_ras_ccp_allocate,
|
|
||||||
orte_ras_ccp_finalize
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Discover available (pre-allocated) nodes. Allocate the
|
|
||||||
* requested number of nodes/process slots to the job.
|
|
||||||
*/
|
|
||||||
static int orte_ras_ccp_allocate(opal_list_t *nodes)
|
|
||||||
{
|
|
||||||
int ret, i;
|
|
||||||
size_t len;
|
|
||||||
char *cluster_head = NULL;
|
|
||||||
HRESULT hr = S_OK;
|
|
||||||
ICluster* pCluster = NULL;
|
|
||||||
|
|
||||||
/* CCP is not thread safe. Use the apartment model. */
|
|
||||||
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
|
||||||
|
|
||||||
/* Create the Cluster object. */
|
|
||||||
hr = CoCreateInstance( __uuidof(Cluster),
|
|
||||||
NULL,
|
|
||||||
CLSCTX_INPROC_SERVER,
|
|
||||||
__uuidof(ICluster),
|
|
||||||
reinterpret_cast<void **> (&pCluster) );
|
|
||||||
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate: failed to create cluster object!"));
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(NULL == orte_ccp_headnode) {
|
|
||||||
/* Get the cluster head nodes name */
|
|
||||||
_dupenv_s(&cluster_head, &len, "LOGONSERVER");
|
|
||||||
|
|
||||||
if(cluster_head == NULL) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate: connot find cluster head node!"));
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get rid of the beginning '//'. */
|
|
||||||
for( i = 0; i < len - 2; i++){
|
|
||||||
cluster_head[i] = cluster_head[i+2];
|
|
||||||
cluster_head[i+2] = '\0';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cluster_head = orte_ccp_headnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Connect to the cluster's head node */
|
|
||||||
hr = pCluster->Connect(_bstr_t(cluster_head));
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
ras_get_cluster_message(pCluster);
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate: connection failed!"));
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ORTE_SUCCESS != (ret = discover(nodes, pCluster))) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate: discover failed!"));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* in the CCP world, if we didn't find anything, then this
|
|
||||||
* is an unrecoverable error - report it
|
|
||||||
*/
|
|
||||||
if (opal_list_is_empty(nodes)) {
|
|
||||||
orte_show_help("help-ras-ccp.txt", "no-nodes-found", true);
|
|
||||||
return ORTE_ERR_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* All finished, release cluster object*/
|
|
||||||
pCluster->Release();
|
|
||||||
CoUninitialize();
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There's really nothing to do here
|
|
||||||
*/
|
|
||||||
static int orte_ras_ccp_finalize(void)
|
|
||||||
{
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:finalize: success (nothing to do)"));
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Discover the available resources. Obtain directly from head node
|
|
||||||
*
|
|
||||||
* - validate any Windows Cluster nodes
|
|
||||||
* - check for additional nodes that have already been allocated
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int discover(opal_list_t* nodelist, ICluster* pCluster)
|
|
||||||
{
|
|
||||||
int ret = ORTE_ERROR;
|
|
||||||
int32_t nodeid;
|
|
||||||
orte_node_t *node;
|
|
||||||
opal_list_item_t* item;
|
|
||||||
opal_list_t new_nodes;
|
|
||||||
struct timeval start, stop;
|
|
||||||
|
|
||||||
HRESULT hr = S_OK;
|
|
||||||
long idle_processors = 0;
|
|
||||||
IClusterEnumerable* pNodesCollection = NULL;
|
|
||||||
IEnumVARIANT* pNodes = NULL;
|
|
||||||
INode* pNode = NULL;
|
|
||||||
BSTR node_name = NULL, node_arch = NULL;
|
|
||||||
VARIANT var;
|
|
||||||
NodeStatus Status;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
/* check for timing request - get start time if so */
|
|
||||||
if (orte_timing) {
|
|
||||||
gettimeofday(&start, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the collection of nodes. */
|
|
||||||
hr = pCluster->get_ComputeNodes(&pNodesCollection);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
ras_get_cluster_message(pCluster);
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pCluster->get_ComputeNodes failed."));
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the enumerator used to iterate through the collection. */
|
|
||||||
hr = pNodesCollection->GetEnumerator(&pNodes);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
ras_get_cluster_message(pCluster);
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pNodesCollection->GetEnumerator failed."));
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
VariantInit(&var);
|
|
||||||
|
|
||||||
/* Construct new node list. */
|
|
||||||
OBJ_CONSTRUCT(&new_nodes, opal_list_t);
|
|
||||||
nodeid=0;
|
|
||||||
|
|
||||||
/* Loop through the collection. */
|
|
||||||
while (hr = pNodes->Next(1, &var, NULL) == S_OK) {
|
|
||||||
var.pdispVal->QueryInterface(IID_INode, reinterpret_cast<void **> (&pNode));
|
|
||||||
|
|
||||||
/* Check wether the node is ready.
|
|
||||||
* There are four states:
|
|
||||||
* NodeStatus_Ready = 0,
|
|
||||||
* NodeStatus_Paused = 1,
|
|
||||||
* NodeStatus_Unreachable = 2, probably not a windows cluster node.
|
|
||||||
* NodeStatus_PendingApproval = 3
|
|
||||||
*/
|
|
||||||
hr = pNode->get_Status(&Status);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pNode->get_Status failed."));
|
|
||||||
ret = ORTE_ERROR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get available number of processors on each node. */
|
|
||||||
hr = pNode->get_NumberOfIdleProcessors(&idle_processors);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pNode->get_NumberOfIdleProcessors failed."));
|
|
||||||
ret = ORTE_ERROR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do we have enough processors on the available nodes?
|
|
||||||
* Question: How do we get the required number of processors?
|
|
||||||
*/
|
|
||||||
if ( (Status == NodeStatus_Ready) && (idle_processors > 0) ) {
|
|
||||||
|
|
||||||
/* Get node name. */
|
|
||||||
hr = pNode->get_Name(&node_name);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pNode->get_Name failed."));
|
|
||||||
ret = ORTE_ERROR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get node processor architecture. */
|
|
||||||
hr = pNode->get_ProcessorArchitecture(&node_arch);
|
|
||||||
if (FAILED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:pNode->get_ProcessorArchitecture failed."));
|
|
||||||
ret = ORTE_ERROR;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prevent duplicated nodes in the list*/
|
|
||||||
for (item = opal_list_get_first(&new_nodes);
|
|
||||||
opal_list_get_end(&new_nodes) != item;
|
|
||||||
item = opal_list_get_next(item)) {
|
|
||||||
|
|
||||||
node = (orte_node_t*) item;
|
|
||||||
if (0 == strcmp(node->name, (char *)node_name)) {
|
|
||||||
++node->slots;
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate:discover: found -- bumped slots to %d",
|
|
||||||
node->slots));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Did we find it? */
|
|
||||||
|
|
||||||
if (opal_list_get_end(&new_nodes) == item) {
|
|
||||||
|
|
||||||
/* Nope -- didn't find it, so add a new item to the list */
|
|
||||||
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate:discover: not found -- added to list"));
|
|
||||||
|
|
||||||
node = OBJ_NEW(orte_node_t);
|
|
||||||
|
|
||||||
/* The function _dupenv_s is much safer than getenv on Windows. */
|
|
||||||
_dupenv_s(&node->username, &len, "username");
|
|
||||||
|
|
||||||
node->name = _com_util::ConvertBSTRToString(node_name);
|
|
||||||
node->launch_id = nodeid;
|
|
||||||
node->slots_inuse = 0;
|
|
||||||
node->slots_max = 0;
|
|
||||||
node->slots = 1;
|
|
||||||
opal_list_append(nodelist, &node->super);
|
|
||||||
}
|
|
||||||
/* up the nodeid */
|
|
||||||
nodeid++;
|
|
||||||
}
|
|
||||||
|
|
||||||
pNode->Release();
|
|
||||||
VariantClear(&var);
|
|
||||||
}
|
|
||||||
|
|
||||||
pNodes->Release();
|
|
||||||
|
|
||||||
if (nodeid > 0) ret = ORTE_SUCCESS;
|
|
||||||
|
|
||||||
/* All done */
|
|
||||||
cleanup:
|
|
||||||
|
|
||||||
if (ORTE_SUCCESS == ret) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate:discover: success"));
|
|
||||||
} else {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"ras:ccp:allocate:discover: failed (rc=%d)", ret));
|
|
||||||
}
|
|
||||||
|
|
||||||
OBJ_DESTRUCT(&new_nodes);
|
|
||||||
SysFreeString(node_name);
|
|
||||||
SysFreeString(node_arch);
|
|
||||||
|
|
||||||
/* check for timing request - get stop time and report elapsed time if so */
|
|
||||||
if (orte_timing) {
|
|
||||||
gettimeofday(&stop, NULL);
|
|
||||||
opal_output(0, "ras_ccp: time to allocate is %ld usec",
|
|
||||||
(long int)((stop.tv_sec - start.tv_sec)*1000000 +
|
|
||||||
(stop.tv_usec - start.tv_usec)));
|
|
||||||
gettimeofday(&start, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ras_get_cluster_message(ICluster* pCluster)
|
|
||||||
{
|
|
||||||
HRESULT hr = S_OK;
|
|
||||||
BSTR message = NULL;
|
|
||||||
|
|
||||||
hr = pCluster->get_ErrorMessage(&message);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
_com_util::ConvertBSTRToString(message)));
|
|
||||||
SysFreeString(message);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base.ras_output,
|
|
||||||
"pCluster->get_ErrorMessage failed.\n"));
|
|
||||||
}
|
|
||||||
}
|
|
Загрузка…
x
Ссылка в новой задаче
Block a user