[#212] Discover SQL error on returning multiple rows

This commit is contained in:
Oliver Gorwits
2015-05-05 18:48:13 +01:00
parent 05dc8ff32f
commit ee4a27a6bf
2 changed files with 21 additions and 11 deletions

View File

@@ -8,6 +8,7 @@
[BUG FIXES]
* [#211] Additional check for undefined SNMP::Info instance
* [#212] Discover SQL error on returning multiple rows
* Re-set hostname on device after renumber
2.032002 - 2015-04-03

View File

@@ -848,21 +848,30 @@ sub store_neighbors {
manual_topo => \"false",
});
if (defined $portrow->slave_of and
my $master = schema('netdisco')->resultset('DevicePort')
->single({ip => $device->ip, port => $portrow->slave_of})) {
# update master of our aggregate to be a neighbor of
# the master on our peer device (a lot of iffs to get there...).
# & cannot use ->neighbor prefetch because this is the port insert!
if (defined $portrow->slave_of) {
if (not ($portrow->is_master or defined $master->slave_of)) {
# TODO needs refactoring - this is quite expensive
my $peer = schema('netdisco')->resultset('DevicePort')->find({
ip => $portrow->neighbor->ip,
port => $portrow->remote_port,
}) if $portrow->neighbor;
my $peer_device = get_device($remote_ip);
my $master = schema('netdisco')->resultset('DevicePort')->single({
ip => $device->ip,
port => $portrow->slave_of
});
if ($peer_device and $peer_device->in_storage and $master
and not ($portrow->is_master or defined $master->slave_of)) {
my $peer_port = schema('netdisco')->resultset('DevicePort')->single({
ip => $peer_device->ip,
port => $portrow->remote_port,
});
$master->update({
remote_ip => ($peer ? $peer->ip : $remote_ip),
remote_port => ($peer ? $peer->slave_of : undef ),
remote_ip => ($peer_device->ip || $remote_ip),
remote_port => ($peer_port ? $peer_port->slave_of : undef ),
is_uplink => \"true",
is_master => \"true",
manual_topo => \"false",
});
}