TT#68217 - Delete htable peer_probe when deleting/disabling peer

* Deleting or diasbling a peering server was leaving
	   the peer_probe value in kamailio htable which was
	   falsely  identifying peering server as up when it
	   was actually down
	 * Sending htable.delete peer_probe whenever deleting,
	   disabling or disabling 'probe' for a peering server
	   fixes the issue

Change-Id: Ie54fd4bd00391a0cc02544d8d7b55108240c74e8
changes/23/38823/4
Flaviu Mates 5 years ago
parent f729ec056d
commit a975f79bd1

@ -111,6 +111,14 @@ sub DELETE :Allow {
last unless $self->resource_exists($c, peeringgroup => $item);
foreach my $p ($item->voip_peer_hosts->all) {
if($p->probe) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $p->ip,
port => $p->port,
transport => $p->transport,
);
}
$p->voip_peer_preferences->delete_all;
$p->delete;
}

@ -83,6 +83,14 @@ sub PATCH :Allow {
try {
NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c);
if (($item->probe && $old_resource->{enabled} && !$item->enabled) || ($old_resource->{probe} && !$item->probe)) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
}
NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c);
} catch($e) {
$c->log->error("failed to reload kamailio cache: $e"); # TODO: user, message, trace, ...
@ -131,6 +139,14 @@ sub PUT :Allow {
$guard->commit;
try {
NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c);
if (($item->probe && $old_resource->{enabled} && !$item->enabled) || ($old_resource->{probe} && !$item->probe)) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
}
NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c);
} catch($e) {
$c->log->error("failed to reload kamailio cache: $e"); # TODO: user, message, trace, ...
@ -168,6 +184,12 @@ sub DELETE :Allow {
try {
NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c);
if($probe) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $item->ip,
port => $item->port,
transport => $item->transport,
);
NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c);
}
} catch($e) {

@ -166,6 +166,14 @@ sub delete_peering :Chained('base') :PathPart('delete') {
try {
# manually delete hosts in group to let triggers hit in
foreach my $p ($c->stash->{group_result}->voip_peer_hosts->all) {
if($p->probe) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $p->ip,
port => $p->port,
transport => $p->transport,
);
}
$p->voip_peer_preferences->delete_all;
$p->delete;
}
@ -358,8 +366,18 @@ sub servers_edit :Chained('servers_base') :PathPart('edit') :Args(0) {
);
if($posted && $form->validated) {
try {
my $enabled_before = $c->stash->{server_result}->enabled;
my $probing_before = $c->stash->{server_result}->probe;
$c->stash->{server_result}->update($form->values);
NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c);
if (($c->stash->{server_result}->probe && $enabled_before && !$c->stash->{server_result}->enabled) || ($probing_before && !$c->stash->{server_result}->probe)) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $c->stash->{server_result}->ip,
port => $c->stash->{server_result}->port,
transport => $c->stash->{server_result}->transport,
);
}
NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c);
NGCP::Panel::Utils::Message::info(
c => $c,
@ -390,6 +408,12 @@ sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) {
$c->stash->{server_result}->delete;
NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c);
if($probe) {
NGCP::Panel::Utils::Peering::_sip_delete_probe(
c => $c,
ip => $c->stash->{server_result}->ip,
port => $c->stash->{server_result}->port,
transport => $c->stash->{server_result}->transport,
);
NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c);
}
NGCP::Panel::Utils::Message::info(

@ -31,6 +31,24 @@ EOF
return ref $res ? @{ $res } : ();
}
sub _sip_delete_probe {
my (%params) = @_;
my ($c, $ip, $port, $transport) = @params{qw/c ip port transport/};
my $string_transport = {'1' => 'UDP', '2' => 'TCP', '3' => 'TLS'};
NGCP::Panel::Utils::XMLDispatcher::dispatch($c, "proxy-ng", 1, 1, <<EOF );
<?xml version="1.0" ?>
<methodCall>
<methodName>htable.delete</methodName>
<params>
<param><value><string>peer_probe</string></value></param>
<param><value><string>$ip:$port;transport=$string_transport->{$transport}</string></value></param>
</params>
</methodCall>
EOF
return 1;
}
sub apply_rewrite {
my (%params) = @_;

Loading…
Cancel
Save