MT#63893 Call 'sip_dispatcher_reload' while changing peerings via API

For scenarios when:
* a peering server is enabled or disabled
* a peering probe is enabled or disabled
* a peering group with active peering servers or peering probes
  is removed
a "sip_dispatcher_reload" XMLRPC request is sent to kamalilio-proxy,
otherwise the dispatcher cache is not reflected and therefore, not
available with the actual state until next kamailio-proxy restart.

Change-Id: If3a98115224eb132126d5a53df7320cb6a33deba
mr14.0
Marco Capetta 1 month ago committed by Kirill Solomko
parent ef8b9ffc18
commit 3b17ab6c54

@ -116,6 +116,8 @@ sub DELETE :Allow {
my $item = $self->item_by_id($c, $id);
last unless $self->resource_exists($c, peeringgroup => $item);
my $probe_updated = 0;
foreach my $p ($item->voip_peer_hosts->all) {
if($p->probe) {
NGCP::Panel::Utils::Peering::sip_delete_probe(
@ -124,6 +126,7 @@ sub DELETE :Allow {
port => $p->port,
transport => $p->transport,
);
$probe_updated = 1;
}
if ($p->enabled) {
NGCP::Panel::Utils::Peering::sip_delete_peer_registration(
@ -137,6 +140,10 @@ sub DELETE :Allow {
$item->delete;
$guard->commit;
if ($probe_updated) {
NGCP::Panel::Utils::Peering::sip_dispatcher_reload(c => $c);
}
NGCP::Panel::Utils::Peering::sip_lcr_reload(c => $c);
$c->response->status(HTTP_NO_CONTENT);

@ -77,10 +77,14 @@ sub PATCH :Allow {
my $resource = $self->apply_patch($c, $old_resource, $json);
last unless $resource;
my $probe_deleted = 0;
my $peer_disabled = $old_resource->{enabled} && !$resource->{enabled};
my $peer_enabled = !$old_resource->{enabled} && $resource->{enabled};
my $probe_disabled = $old_resource->{probe} && !$resource->{probe};
my $probe_enabled = !$old_resource->{probe} && $resource->{probe};
my $probe_updated = $peer_disabled || $peer_enabled || $probe_disabled || $probe_enabled;
try {
if ($old_resource->{enabled} && !$resource->{enabled}) {
if ($peer_disabled) {
NGCP::Panel::Utils::Peering::sip_delete_peer_registration(
c => $c,
prov_peer => $item
@ -93,15 +97,13 @@ sub PATCH :Allow {
}
try {
if (($resource->{probe} && $old_resource->{enabled} && !$resource->{enabled}) ||
($old_resource->{probe} && !$resource->{probe})) {
NGCP::Panel::Utils::Peering::sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
$probe_deleted = 1;
if ($peer_disabled || $probe_disabled) {
NGCP::Panel::Utils::Peering::sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
}
} catch($e) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update peering server.",
@ -114,7 +116,7 @@ sub PATCH :Allow {
last unless $item;
try {
if (!$old_resource->{enabled} && $resource->{enabled}) {
if ($peer_enabled) {
NGCP::Panel::Utils::Peering::sip_create_peer_registration(
c => $c,
prov_peer => $item
@ -128,7 +130,7 @@ sub PATCH :Allow {
$guard->commit;
if ($probe_deleted) {
if ($probe_updated) {
NGCP::Panel::Utils::Peering::sip_dispatcher_reload(c => $c);
}
@ -168,10 +170,14 @@ sub PUT :Allow {
last unless $resource;
my $old_resource = { $item->get_inflated_columns };
my $probe_deleted = 0;
my $peer_disabled = $old_resource->{enabled} && !$resource->{enabled};
my $peer_enabled = !$old_resource->{enabled} && $resource->{enabled};
my $probe_disabled = $old_resource->{probe} && !$resource->{probe};
my $probe_enabled = !$old_resource->{probe} && $resource->{probe};
my $probe_updated = $peer_disabled || $peer_enabled || $probe_disabled || $probe_enabled;
try {
if ($old_resource->{enabled} && !$resource->{enabled}) {
if ($peer_disabled) {
NGCP::Panel::Utils::Peering::sip_delete_peer_registration(
c => $c,
prov_peer => $item
@ -184,15 +190,13 @@ sub PUT :Allow {
}
try {
if (($resource->{probe} && $old_resource->{enabled} && !$resource->{enabled}) ||
($old_resource->{probe} && !$resource->{probe})) {
NGCP::Panel::Utils::Peering::sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
$probe_deleted = 1;
if (($peer_disabled || $probe_disabled) {
NGCP::Panel::Utils::Peering::sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
}
} catch($e) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update peering server.",
@ -205,7 +209,7 @@ sub PUT :Allow {
last unless $item;
try {
if (!$old_resource->{enabled} && $resource->{enabled}) {
if ($peer_enabled) {
NGCP::Panel::Utils::Peering::sip_create_peer_registration(
c => $c,
prov_peer => $item
@ -219,7 +223,7 @@ sub PUT :Allow {
$guard->commit;
if ($probe_deleted) {
if ($probe_updated) {
NGCP::Panel::Utils::Peering::sip_dispatcher_reload(c => $c);
}
@ -250,6 +254,8 @@ sub DELETE :Allow {
my $item = $self->item_by_id($c, $id);
last unless $self->resource_exists($c, peeringserver => $item);
my $probe_updated = 0;
try {
if ($item->enabled) {
NGCP::Panel::Utils::Peering::sip_delete_peer_registration(
@ -270,7 +276,7 @@ sub DELETE :Allow {
port => $item->port,
transport => $item->transport,
);
NGCP::Panel::Utils::Peering::sip_dispatcher_reload(c => $c);
$probe_updated = 1;
}
} catch($e) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to delete peering server.",
@ -281,8 +287,11 @@ sub DELETE :Allow {
$item->delete;
$guard->commit;
NGCP::Panel::Utils::Peering::sip_lcr_reload(c => $c);
if ($probe_updated) {
NGCP::Panel::Utils::Peering::sip_dispatcher_reload(c => $c);
}
NGCP::Panel::Utils::Peering::sip_lcr_reload(c => $c);
$c->response->status(HTTP_NO_CONTENT);
$c->response->body(q());

Loading…
Cancel
Save