#901 node_ip time_last can be before time_first

This commit is contained in:
Oliver Gorwits
2023-03-03 15:34:16 +00:00
parent 1d00ebc91e
commit 4bb9b25ae9
3 changed files with 35 additions and 18 deletions

View File

@@ -158,7 +158,8 @@ sub store_nbt {
my ( $hash_ref, $now ) = @_;
$now ||= 'LOCALTIMESTAMP';
schema(vars->{'tenant'})->resultset('NodeNbt')->update_or_create(
schema(vars->{'tenant'})->txn_do(sub {
my $row = schema(vars->{'tenant'})->resultset('NodeNbt')->update_or_new(
{ mac => $hash_ref->{'mac'},
ip => $hash_ref->{'ip'},
nbname => $hash_ref->{'nbname'},
@@ -173,6 +174,12 @@ sub store_nbt {
}
);
if (! $row->in_storage) {
$row->set_column(time_first => \$now);
$row->insert;
}
});
return;
}

View File

@@ -176,13 +176,13 @@ sub store_arp {
debug sprintf 'store_arp - mac %s ip %s', $mac->as_ieee, $ip;
schema(vars->{'tenant'})->txn_do(sub {
my $current = schema(vars->{'tenant'})->resultset('NodeIp')
schema(vars->{'tenant'})->resultset('NodeIp')
->search(
{ ip => $ip, -bool => 'active'},
{ columns => [qw/mac ip/] })->update({active => \'false'});
schema(vars->{'tenant'})->resultset('NodeIp')
->update_or_create(
my $row = schema(vars->{'tenant'})->resultset('NodeIp')
->update_or_new(
{
mac => $mac->as_ieee,
ip => $ip,
@@ -194,6 +194,11 @@ sub store_arp {
key => 'primary',
for => 'update',
});
if (! $row->in_storage) {
$row->set_column(time_first => \$now);
$row->insert;
}
});
}

View File

@@ -249,7 +249,7 @@ sub store_node {
})->update( { active => \'false' } );
# new data
$nodes->update_or_create(
my $row = $nodes->update_or_new(
{
switch => $ip,
port => $port,
@@ -265,6 +265,11 @@ sub store_node {
for => 'update',
}
);
if (! $row->in_storage) {
$row->set_column(time_first => \$now);
$row->insert;
}
});
}