From 67ec019653a87d0afedf206d7a73d830d5296a79 Mon Sep 17 00:00:00 2001 From: "J.C. Jones" Date: Thu, 14 Mar 2024 12:40:50 -0700 Subject: [PATCH] Add NoValidRatesOfChangeException and don't emit ALTER errors for it (#87) * Add NoValidRatesOfChangeException and don't emit ALTER errors for it Fixes #86 * Add exception name to warning log --- partitionmanager/cli.py | 7 +++++-- partitionmanager/table_append_partition.py | 2 +- partitionmanager/table_append_partition_test.py | 7 +++++++ partitionmanager/types.py | 4 ++++ pyproject.toml | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/partitionmanager/cli.py b/partitionmanager/cli.py index 43c48ee..9d470c8 100644 --- a/partitionmanager/cli.py +++ b/partitionmanager/cli.py @@ -360,8 +360,11 @@ def do_partition(conf): except partitionmanager.types.DatabaseCommandException as e: log.warning("Failed to automatically handle %s: %s", table, e) metrics.add("alter_errors", table.name, 1) - except partitionmanager.types.TableEmptyException: - log.warning("Table %s appears to be empty. Skipping.", table) + except ( + partitionmanager.types.TableEmptyException, + partitionmanager.types.NoValidRatesOfChangeException, + ) as e: + log.warning("Table %s appears to be empty (%s). Skipping.", table, e) except (ValueError, Exception) as e: log.warning("Failed to handle %s: %s", table, e) metrics.add("alter_errors", table.name, 1) diff --git a/partitionmanager/table_append_partition.py b/partitionmanager/table_append_partition.py index 9a87e52..20e6a37 100644 --- a/partitionmanager/table_append_partition.py +++ b/partitionmanager/table_append_partition.py @@ -287,7 +287,7 @@ def _get_weighted_position_increase_per_day_for_partitions(partitions): log.error( "No rates of change were valid for the partition list: %s", partitions ) - raise ValueError("No valid rates of change") + raise partitionmanager.types.NoValidRatesOfChangeException # Initialize a list with a zero for each position weighted_sums = [0] * partitions[0].num_columns diff --git a/partitionmanager/table_append_partition_test.py b/partitionmanager/table_append_partition_test.py index b456da5..c807dff 100644 --- a/partitionmanager/table_append_partition_test.py +++ b/partitionmanager/table_append_partition_test.py @@ -9,6 +9,7 @@ DuplicatePartitionException, NewPlannedPartition, NoEmptyPartitionsAvailableException, + NoValidRatesOfChangeException, InstantPartition, SqlInput, SqlQuery, @@ -444,6 +445,12 @@ def test_get_weighted_position_increase_per_day_for_partitions(self): ), [548.3636363636364], ) + with self.assertRaises(NoValidRatesOfChangeException): + _get_weighted_position_increase_per_day_for_partitions( + [ + mkPPart("p_736563646E64", 1200000), + ] + ) def test_predict_forward_position(self): with self.assertRaises(ValueError): diff --git a/partitionmanager/types.py b/partitionmanager/types.py index 7f31c74..be45a9c 100644 --- a/partitionmanager/types.py +++ b/partitionmanager/types.py @@ -625,3 +625,7 @@ class DatabaseCommandException(Exception): class NoExactTimeException(Exception): """Raised if there's no exact time available for this partition.""" + + +class NoValidRatesOfChangeException(Exception): + """Raised if the table's rate of change cannot be calculated.""" diff --git a/pyproject.toml b/pyproject.toml index c206f6e..043dffa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "mariadb-sequential-partition-manager" maintainers = [ {name = "J.C. Jones", email = "jc@letsencrypt.org"}, ] -version = "0.4.0" +version = "0.4.1" description = "Manage DB partitions based on sequential IDs" license = {file = "LICENSE.txt"} classifiers = [