endpoint.cpp 3.4 KB
Newer Older
W
sdk-cpp  
wangguibao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
/***************************************************************************
 * 
 * Copyright (c) 2018 Baidu.com, Inc. All Rights Reserved
 * 
 **************************************************************************/
 
 
 
/**
 * @file endpoint.cpp
 * @author wanlijin01(wanlijin01@baidu.com)
 * @date 2018/07/09 14:10:44
 * @brief 
 *  
 **/

#include "endpoint.h"
#include "factory.h"

namespace baidu {
namespace paddle_serving {
namespace sdk_cpp {

int Endpoint::initialize(const EndpointInfo& ep_info) {
    _variant_list.clear();
    _endpoint_name = ep_info.endpoint_name;
    uint32_t var_size = ep_info.vars.size();
    for (uint32_t vi = 0; vi < var_size; ++vi) {
        const VariantInfo& var_info = ep_info.vars[vi];
        Variant* var = new (std::nothrow) Variant;
        if (!var || var->initialize(ep_info, var_info) != 0) {
            LOG(FATAL) << "Failed initialize variant, tag:" 
                << var_info.parameters.route_tag.value 
                << ", endpoint: " << ep_info.endpoint_name 
                << ", var index: " << vi;
            return -1;
        }
        _variant_list.push_back(var);
        LOG(INFO) << "Succ create variant: " << vi << ", endpoint:"
            << _endpoint_name;
    }

    return 0;
}

int Endpoint::thrd_initialize() {
    uint32_t var_size = _variant_list.size();
    for (uint32_t vi = 0; vi < var_size; ++vi) {
        Variant* var = _variant_list[vi];
        if (!var || var->thrd_initialize()) {
            LOG(FATAL) << "Failed thrd initialize var: " << vi;
            return -1;
        }
    }
    LOG(WARNING) << "Succ thrd initialize all vars: " << var_size;
    return 0;
}

int Endpoint::thrd_clear() {
    uint32_t var_size = _variant_list.size();
    for (uint32_t vi = 0; vi < var_size; ++vi) {
        Variant* var = _variant_list[vi];
        if (!var || var->thrd_clear()) {
            LOG(FATAL) << "Failed thrd clear var: " << vi;
            return -1;
        }
    }
    LOG(INFO) << "Succ thrd clear all vars: " << var_size;
    return 0;
}

int Endpoint::thrd_finalize() {
    uint32_t var_size = _variant_list.size();
    for (uint32_t vi = 0; vi < var_size; ++vi) {
        Variant* var = _variant_list[vi];
        if (!var || var->thrd_finalize()) {
            LOG(FATAL) << "Failed thrd finalize var: " << vi;
            return -1;
        }
    }
    LOG(INFO) << "Succ thrd finalize all vars: " << var_size;
    return 0;
}

// 带全流量分层实验路由信息
Predictor* Endpoint::get_predictor(
        const void* params) {
    Variant* var = NULL;
    if (_variant_list.size() == 1) {
        var = _variant_list[0];
    }

    if (!var) {
        LOG(FATAL) << "get null var from endpoint.";
        return NULL;
    }

    return var->get_predictor(params);
}

Predictor* Endpoint::get_predictor() {
    if (_variant_list.size() == 1) {
        if (_variant_list[0] == NULL) {
            LOG(FATAL) << "Not valid variant info"; 
            return NULL;
        }
        return _variant_list[0]->get_predictor();
    }
    
    return NULL;
}

int Endpoint::ret_predictor(Predictor* predictor) {
    const Stub* stub = predictor->stub();
    if (!stub || stub->return_predictor(
                predictor) != 0) {
        LOG(FATAL) << "Failed return predictor to pool";
        return -1;
    }

    return 0;
}

} // sdk_cpp
} // paddle_serving
} // baidu

/* vim: set expandtab ts=4 sw=4 sts=4 tw=100: */