parent
ddb58ea560
commit
5c4543d9f5
20 changed files with 393 additions and 38 deletions
@ -0,0 +1,49 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/client_config/lb_policy_factory.h" |
||||
|
||||
void grpc_lb_policy_factory_ref(grpc_lb_policy_factory *factory) { |
||||
factory->vtable->ref(factory); |
||||
} |
||||
void grpc_lb_policy_factory_unref(grpc_lb_policy_factory *factory) { |
||||
factory->vtable->unref(factory); |
||||
} |
||||
|
||||
grpc_lb_policy *grpc_lb_policy_factory_create_lb_policy( |
||||
grpc_lb_policy_factory *factory, grpc_subchannel **subchannels, |
||||
size_t num_subchannels) { |
||||
if (factory == NULL) return NULL; |
||||
return factory->vtable->create_lb_policy(factory, subchannels, |
||||
num_subchannels); |
||||
} |
@ -0,0 +1,70 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICY_FACTORY_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICY_FACTORY_H |
||||
|
||||
#include "src/core/client_config/lb_policy.h" |
||||
#include "src/core/client_config/subchannel.h" |
||||
|
||||
typedef struct grpc_lb_policy_factory grpc_lb_policy_factory; |
||||
typedef struct grpc_lb_policy_factory_vtable grpc_lb_policy_factory_vtable; |
||||
|
||||
/** grpc_lb_policy provides grpc_client_config objects to grpc_channel
|
||||
objects */ |
||||
struct grpc_lb_policy_factory { |
||||
const grpc_lb_policy_factory_vtable *vtable; |
||||
}; |
||||
|
||||
struct grpc_lb_policy_factory_vtable { |
||||
void (*ref)(grpc_lb_policy_factory *factory); |
||||
void (*unref)(grpc_lb_policy_factory *factory); |
||||
|
||||
/** Implementation of grpc_lb_policy_factory_create_lb_policy */ |
||||
grpc_lb_policy *(*create_lb_policy)(grpc_lb_policy_factory *factory, |
||||
grpc_subchannel **subchannels, |
||||
size_t num_subchannels); |
||||
|
||||
/** Name for the LB policy this factory implements */ |
||||
const char *name; |
||||
}; |
||||
|
||||
void grpc_lb_policy_factory_ref(grpc_lb_policy_factory *factory); |
||||
void grpc_lb_policy_factory_unref(grpc_lb_policy_factory *factory); |
||||
|
||||
/** Create a lb_policy instance. */ |
||||
grpc_lb_policy *grpc_lb_policy_factory_create_lb_policy( |
||||
grpc_lb_policy_factory *factory, grpc_subchannel **subchannels, |
||||
size_t num_subchannels); |
||||
|
||||
#endif /* GRPC_INTERNAL_CORE_CONFIG_LB_POLICY_FACTORY_H */ |
@ -0,0 +1,89 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/client_config/lb_policy_registry.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#define MAX_POLICIES 10 |
||||
|
||||
static grpc_lb_policy_factory *g_all_of_the_lb_policies[MAX_POLICIES]; |
||||
static int g_number_of_lb_policies = 0; |
||||
|
||||
static grpc_lb_policy_factory *g_default_lb_policy_factory; |
||||
|
||||
void grpc_lb_policy_registry_init(grpc_lb_policy_factory *default_factory) { |
||||
g_number_of_lb_policies = 0; |
||||
g_default_lb_policy_factory = default_factory; |
||||
} |
||||
|
||||
void grpc_lb_policy_registry_shutdown(void) { |
||||
int i; |
||||
for (i = 0; i < g_number_of_lb_policies; i++) { |
||||
grpc_lb_policy_factory_unref(g_all_of_the_lb_policies[i]); |
||||
} |
||||
} |
||||
|
||||
void grpc_register_lb_policy(grpc_lb_policy_factory *factory) { |
||||
int i; |
||||
for (i = 0; i < g_number_of_lb_policies; i++) { |
||||
GPR_ASSERT(0 != strcmp(factory->vtable->name, |
||||
g_all_of_the_lb_policies[i]->vtable->name)); |
||||
} |
||||
GPR_ASSERT(g_number_of_lb_policies != MAX_POLICIES); |
||||
grpc_lb_policy_factory_ref(factory); |
||||
g_all_of_the_lb_policies[g_number_of_lb_policies++] = factory; |
||||
} |
||||
|
||||
static grpc_lb_policy_factory *lookup_factory(const char* name) { |
||||
int i; |
||||
|
||||
if (name == NULL) return NULL; |
||||
|
||||
for (i = 0; i < g_number_of_lb_policies; i++) { |
||||
if (0 == strcmp(name, g_all_of_the_lb_policies[i]->vtable->name)) { |
||||
return g_all_of_the_lb_policies[i]; |
||||
} |
||||
} |
||||
|
||||
return NULL; |
||||
} |
||||
|
||||
grpc_lb_policy *grpc_lb_policy_create(const char *name, |
||||
grpc_subchannel **subchannels, |
||||
size_t num_subchannels) { |
||||
grpc_lb_policy_factory *factory = lookup_factory(name); |
||||
grpc_lb_policy *lb_policy = grpc_lb_policy_factory_create_lb_policy( |
||||
factory, subchannels, num_subchannels); |
||||
return lb_policy; |
||||
} |
@ -0,0 +1,55 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICY_REGISTRY_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICY_REGISTRY_H |
||||
|
||||
#include "src/core/client_config/lb_policy_factory.h" |
||||
|
||||
/** Initialize the registry and set \a default_factory as the factory to be
|
||||
* returned when no name is provided in a lookup */ |
||||
void grpc_lb_policy_registry_init(grpc_lb_policy_factory *default_factory); |
||||
void grpc_lb_policy_registry_shutdown(void); |
||||
|
||||
/** Register a LB policy factory. */ |
||||
void grpc_register_lb_policy(grpc_lb_policy_factory *factory); |
||||
|
||||
/** Create a \a grpc_lb_policy instance.
|
||||
* |
||||
* If \a name is NULL, the default factory from \a grpc_lb_policy_registry_init |
||||
* will be returned. */ |
||||
grpc_lb_policy *grpc_lb_policy_create(const char *name, |
||||
grpc_subchannel **subchannels, |
||||
size_t num_subchannels); |
||||
|
||||
#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICY_REGISTRY_H */ |
Loading…
Reference in new issue