fix: handle device deletion during discovery
Previously, if a device was deleted while a discovery job was in progress, the wait_loop would crash with Ecto.NoResultsError when trying to check if discovery had completed.
Now uses get_device_with_details which returns nil for missing devices, and gracefully returns {:error, :device_deleted} instead of crashing.
This commit is contained in:
parent
6a29ee1671
commit
5f04d716ba
1 changed files with 22 additions and 13 deletions
|
|
@ -395,21 +395,30 @@ defmodule Towerops.Workers.DiscoveryWorker do
|
|||
|
||||
# Check if discovery completed (last_discovery_at changed)
|
||||
true ->
|
||||
device = Devices.get_device!(device_id)
|
||||
case Devices.get_device_with_details(device_id) do
|
||||
nil ->
|
||||
Logger.warning(
|
||||
"Device not found for discovery request",
|
||||
device_id: device_id
|
||||
)
|
||||
|
||||
if device.last_discovery_at == initial_discovery_at do
|
||||
# Wait 500ms before checking again
|
||||
Process.sleep(500)
|
||||
wait_loop(device_id, agent_token_id, initial_discovery_at, start_time, timeout_ms)
|
||||
else
|
||||
Logger.info(
|
||||
"Agent discovery completed successfully",
|
||||
device_id: device_id,
|
||||
agent_token_id: agent_token_id,
|
||||
elapsed_ms: elapsed
|
||||
)
|
||||
{:error, :device_deleted}
|
||||
|
||||
:ok
|
||||
device ->
|
||||
if device.last_discovery_at == initial_discovery_at do
|
||||
# Wait 500ms before checking again
|
||||
Process.sleep(500)
|
||||
wait_loop(device_id, agent_token_id, initial_discovery_at, start_time, timeout_ms)
|
||||
else
|
||||
Logger.info(
|
||||
"Agent discovery completed successfully",
|
||||
device_id: device_id,
|
||||
agent_token_id: agent_token_id,
|
||||
elapsed_ms: elapsed
|
||||
)
|
||||
|
||||
:ok
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue