From a7ab2831b345cbf28b76850a0768a9efc6bbc017 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 4 Mar 2026 17:42:41 -0600 Subject: [PATCH] fix: increase TimescaleDB tuple decompression limit to unlimited Fixes ERROR 53400 (configuration_limit_exceeded) during large interface sync operations in device discovery. The sync_interfaces operation was decompressing 146,603 tuples but the default limit was 100,000. Setting to 0 (unlimited) removes this constraint. Error occurred in: Towerops.Snmp.Discovery.sync_interfaces/2 --- ...crease_timescaledb_decompression_limit.exs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 priv/repo/migrations/20260304234205_increase_timescaledb_decompression_limit.exs diff --git a/priv/repo/migrations/20260304234205_increase_timescaledb_decompression_limit.exs b/priv/repo/migrations/20260304234205_increase_timescaledb_decompression_limit.exs new file mode 100644 index 00000000..306262f3 --- /dev/null +++ b/priv/repo/migrations/20260304234205_increase_timescaledb_decompression_limit.exs @@ -0,0 +1,20 @@ +defmodule Towerops.Repo.Migrations.IncreaseTimescaledbDecompressionLimit do + use Ecto.Migration + + def up do + # Increase TimescaleDB tuple decompression limit to unlimited (0) + # This is needed for large interface sync operations during device discovery + # that can touch 100k+ compressed tuples in a single transaction + execute "ALTER DATABASE #{db_name()} SET timescaledb.max_tuples_decompressed_per_dml_transaction = 0" + end + + def down do + # Restore default limit of 100,000 + execute "ALTER DATABASE #{db_name()} SET timescaledb.max_tuples_decompressed_per_dml_transaction = 100000" + end + + defp db_name do + config = Application.get_env(:towerops, Towerops.Repo) + config[:database] || "towerops_dev" + end +end