[SBI] Do not raise ASSERT when not enough CLIENT pool (#2701)

This commit is contained in:
Sukchan Lee 2023-10-25 21:40:37 +09:00
parent 7a98baf627
commit e3c2fd00d9
12 changed files with 148 additions and 23 deletions

View File

@ -103,17 +103,20 @@ ogs_sbi_client_t *ogs_sbi_client_add(
{
ogs_sbi_client_t *client = NULL;
CURLM *multi = NULL;
char buf[OGS_ADDRSTRLEN];
ogs_assert(scheme);
ogs_assert(addr);
ogs_pool_alloc(&client_pool, &client);
ogs_assert(client);
if (!client) {
ogs_error("No memory in client_pool");
return NULL;
}
memset(client, 0, sizeof(ogs_sbi_client_t));
client->scheme = scheme;
ogs_debug("ogs_sbi_client_add[%s]", OpenAPI_uri_scheme_ToString(scheme));
OGS_OBJECT_REF(client);
ogs_assert(OGS_OK == ogs_copyaddrinfo(&client->node.addr, addr));
@ -141,6 +144,9 @@ ogs_sbi_client_t *ogs_sbi_client_add(
ogs_list_add(&ogs_sbi_self()->client_list, client);
ogs_debug("[%d] CLEINT added with Ref [%s:%d]",
client->reference_count, OGS_ADDR(addr, buf), OGS_PORT(addr));
return client;
}
@ -153,8 +159,8 @@ void ogs_sbi_client_remove(ogs_sbi_client_t *client)
addr = client->node.addr;
ogs_assert(addr);
ogs_debug("ogs_sbi_client_remove() [%s:%d]",
OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_debug("[%d] CLEINT UnRef [%s:%d]",
client->reference_count, OGS_ADDR(addr, buf), OGS_PORT(addr));
/* ogs_sbi_client_t is always created with reference context */
if (OGS_OBJECT_IS_REF(client)) {
@ -162,6 +168,9 @@ void ogs_sbi_client_remove(ogs_sbi_client_t *client)
return;
}
ogs_debug("[%d] CLEINT removed [%s:%d]",
client->reference_count, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_list_remove(&ogs_sbi_self()->client_list, client);
connection_remove_all(client);

View File

@ -30,13 +30,13 @@ extern "C" {
#define OGS_SBI_SETUP_CLIENT(__cTX, __pClient) \
do { \
char buf[OGS_ADDRSTRLEN]; \
ogs_assert((__cTX)); \
ogs_assert((__pClient)); \
\
if ((__cTX)->client) { \
ogs_sbi_client_t *client = NULL; \
ogs_sockaddr_t *addr = NULL; \
char buf[OGS_ADDRSTRLEN]; \
\
client = ((__cTX)->client); \
ogs_assert(client); \
@ -49,6 +49,10 @@ extern "C" {
\
OGS_OBJECT_REF(__pClient); \
((__cTX)->client) = (__pClient); \
ogs_debug("[%d] CLIENT Ref [%s:%d]", \
(__pClient)->reference_count, \
OGS_ADDR((__pClient)->node.addr, buf), \
OGS_PORT((__pClient)->node.addr)); \
} while(0)
typedef int (*ogs_sbi_client_cb_f)(

View File

@ -580,6 +580,7 @@ int ogs_sbi_context_parse_config(
if (addr == NULL) continue;
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(
ogs_sbi_client_default_scheme(), addr);
ogs_assert(client);
@ -683,6 +684,7 @@ int ogs_sbi_context_parse_config(
if (addr == NULL) continue;
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(
ogs_sbi_client_default_scheme(), addr);
ogs_assert(client);
@ -805,8 +807,6 @@ ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(void)
ogs_assert(nf_instance);
memset(nf_instance, 0, sizeof(ogs_sbi_nf_instance_t));
ogs_debug("ogs_sbi_nf_instance_add()");
OGS_OBJECT_REF(nf_instance);
nf_instance->time.heartbeat_interval =
@ -818,6 +818,9 @@ ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(void)
ogs_list_add(&ogs_sbi_self()->nf_instance_list, nf_instance);
ogs_debug("[%s:%d] NFInstance added with Ref",
nf_instance->id, nf_instance->reference_count);
return nf_instance;
}
@ -913,13 +916,17 @@ void ogs_sbi_nf_instance_remove(ogs_sbi_nf_instance_t *nf_instance)
{
ogs_assert(nf_instance);
ogs_debug("ogs_sbi_nf_instance_remove()");
ogs_debug("[%s:%d] NFInstance UnRef",
nf_instance->id, nf_instance->reference_count);
if (OGS_OBJECT_IS_REF(nf_instance)) {
OGS_OBJECT_UNREF(nf_instance);
return;
}
ogs_debug("[%s:%d] NFInstance removed",
nf_instance->id, nf_instance->reference_count);
ogs_list_remove(&ogs_sbi_self()->nf_instance_list, nf_instance);
ogs_sbi_nf_info_remove_all(&nf_instance->nf_info_list);
@ -1519,8 +1526,15 @@ static ogs_sbi_client_t *find_client_by_fqdn(
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
return NULL;
}
}
ogs_freeaddrinfo(addr);
@ -1548,8 +1562,14 @@ static ogs_sbi_client_t *nf_instance_find_client(
if (addr) {
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
return NULL;
}
}
}
}
@ -1578,12 +1598,19 @@ static void nf_service_associate_client(ogs_sbi_nf_service_t *nf_service)
if (addr) {
client = ogs_sbi_client_find(nf_service->scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(nf_service->scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
}
}
}
}
ogs_debug("[%s] NFService associated [%s]",
nf_service->name, nf_service->id);
if (client)
OGS_SBI_SETUP_CLIENT(nf_service, client);
}

View File

@ -747,7 +747,7 @@ bool ogs_nnrf_nfm_handle_nf_status_notify(
ogs_sbi_nf_fsm_tran(
nf_instance, ogs_sbi_nf_state_de_registered);
} else {
ogs_info("[%s:%d] NF removed",
ogs_info("[%s:%d] (NRF-notify) NF_DEREGISTERED event",
nf_instance->id, nf_instance->reference_count);
ogs_sbi_nf_fsm_fini((nf_instance));
ogs_sbi_nf_instance_remove(nf_instance);

View File

@ -248,8 +248,15 @@ int amf_namf_comm_handle_n1_n2_message_transfer(
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
return OGS_ERROR;
}
}
OGS_SBI_SETUP_CLIENT(&sess->paging, client);
ogs_freeaddrinfo(addr);

View File

@ -126,13 +126,23 @@ int amf_nnssf_nsselection_handle_get(
ogs_sbi_discovery_option_free(discovery_option);
return OGS_ERROR;;
return OGS_ERROR;
}
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_sbi_discovery_option_free(discovery_option);
ogs_freeaddrinfo(addr);
return OGS_ERROR;
}
}
OGS_SBI_SETUP_CLIENT(&sess->nssf.nrf, client);

View File

@ -344,6 +344,7 @@ bool nrf_nnrf_handle_nf_status_subscribe(
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
}

View File

@ -158,6 +158,9 @@ void nrf_state_operational(ogs_fsm_t *s, nrf_event_t *e)
ogs_fsm_dispatch(&nf_instance->sm, e);
if (OGS_FSM_CHECK(&nf_instance->sm,
nrf_nf_state_de_registered)) {
ogs_info("[%s:%d] NF de-registered",
nf_instance->id,
nf_instance->reference_count);
nrf_nf_fsm_fini(nf_instance);
ogs_sbi_nf_instance_remove(nf_instance);
} else if (OGS_FSM_CHECK(&nf_instance->sm,

View File

@ -93,8 +93,15 @@ bool pcf_npcf_am_policy_contrtol_handle_create(pcf_ue_t *pcf_ue,
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
return false;
}
}
OGS_SBI_SETUP_CLIENT(&pcf_ue->namf, client);
ogs_freeaddrinfo(addr);
@ -276,8 +283,16 @@ bool pcf_npcf_smpolicycontrol_handle_create(pcf_sess_t *sess,
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
strerror = ogs_msprintf("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
status = OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR;
ogs_freeaddrinfo(addr);
goto cleanup;
}
}
OGS_SBI_SETUP_CLIENT(&sess->nsmf, client);
ogs_freeaddrinfo(addr);
@ -599,8 +614,16 @@ bool pcf_npcf_policyauthorization_handle_create(pcf_sess_t *sess,
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
strerror = ogs_msprintf("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
status = OGS_SBI_HTTP_STATUS_INTERNAL_SERVER_ERROR;
ogs_freeaddrinfo(addr);
goto cleanup;
}
}
OGS_SBI_SETUP_CLIENT(&app_session->naf, client);
ogs_freeaddrinfo(addr);

View File

@ -309,8 +309,19 @@ static int request_handler(ogs_sbi_request_t *request, void *data)
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("ogs_sbi_client_add() failed [%s]:%d",
OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
ogs_sbi_discovery_option_free(discovery_option);
scp_assoc_remove(assoc);
return OGS_ERROR;
}
}
OGS_SBI_SETUP_CLIENT(assoc, client);
ogs_freeaddrinfo(addr);
@ -443,8 +454,19 @@ static int request_handler(ogs_sbi_request_t *request, void *data)
nrf_client = ogs_sbi_client_find(scheme, addr);
if (!nrf_client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
nrf_client = ogs_sbi_client_add(scheme, addr);
ogs_assert(nrf_client);
if (!nrf_client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("ogs_sbi_client_add() failed [%s]:%d",
OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
ogs_sbi_discovery_option_free(discovery_option);
scp_assoc_remove(assoc);
return OGS_ERROR;
}
}
OGS_SBI_SETUP_CLIENT(assoc, nrf_client);
ogs_freeaddrinfo(addr);

View File

@ -250,8 +250,15 @@ bool smf_nsmf_handle_create_sm_context(
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
return false;
}
}
OGS_SBI_SETUP_CLIENT(&sess->namf, client);
ogs_freeaddrinfo(addr);

View File

@ -289,8 +289,15 @@ static ogs_sbi_client_t *find_client_by_fqdn(
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
ogs_freeaddrinfo(addr);
return NULL;
}
}
ogs_freeaddrinfo(addr);
@ -323,8 +330,13 @@ void af_sess_associate_pcf_client(af_sess_t *sess)
if (addr) {
client = ogs_sbi_client_find(scheme, addr);
if (!client) {
ogs_debug("%s: ogs_sbi_client_add()", OGS_FUNC);
client = ogs_sbi_client_add(scheme, addr);
ogs_assert(client);
if (!client) {
char buf[OGS_ADDRSTRLEN];
ogs_error("%s: ogs_sbi_client_add() failed [%s]:%d",
OGS_FUNC, OGS_ADDR(addr, buf), OGS_PORT(addr));
}
}
}
}