CHANGE: Added code documentation with explanation of script functions.
This commit is contained in:
60
partitioning/CODE_DOCUMENTATION.md
Normal file
60
partitioning/CODE_DOCUMENTATION.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Code Documentation: ZabbixPartitioner
|
||||
|
||||
## Class: ZabbixPartitioner
|
||||
|
||||
### Core Methods
|
||||
|
||||
#### `__init__(self, config: Dict[str, Any], dry_run: bool = False)`
|
||||
Initializes the partitioner with configuration and runtime mode.
|
||||
- **config**: Dictionary containing database connection and partitioning rules.
|
||||
- **dry_run**: If True, SQL queries are logged but not executed.
|
||||
|
||||
#### `connect_db(self)`
|
||||
Context manager for database connections.
|
||||
- Handles connection lifecycle (open/close).
|
||||
- Sets strict session variables:
|
||||
- `wait_timeout = 86400` (24h) to prevent timeouts during long operations.
|
||||
- `sql_log_bin = 0` (if configured) to prevent replication of partitioning commands.
|
||||
|
||||
#### `run(self, mode: str)`
|
||||
Main entry point for execution.
|
||||
- **mode**:
|
||||
- `'init'`: Initial setup. Calls `initialize_partitioning`.
|
||||
- `'maintenance'` (default): Routine operation. Calls `create_future_partitions` and `drop_old_partitions`.
|
||||
|
||||
### Logic Methods
|
||||
|
||||
#### `initialize_partitioning(table: str, period: str, premake: int, retention_str: str)`
|
||||
Converts a standard table to a partitioned table.
|
||||
- **Strategies** (via `initial_partitioning_start` config):
|
||||
- `retention`: Starts from (Now - Retention). Creates `p_archive` for older data. FAST.
|
||||
- `db_min`: Queries `SELECT MIN(clock)`. PRECISE but SLOW.
|
||||
|
||||
#### `create_future_partitions(table: str, period: str, premake: int)`
|
||||
Ensures sufficient future partitions exist.
|
||||
- Calculates required partitions based on current time + `premake` count.
|
||||
- Checks `information_schema` for existing partitions.
|
||||
- Adds missing partitions using `ALTER TABLE ... ADD PARTITION`.
|
||||
|
||||
#### `drop_old_partitions(table: str, period: str, retention_str: str)`
|
||||
Removes partitions older than the retention period.
|
||||
- Parses partition names (e.g., `p2023_01_01`) to extract their date.
|
||||
- Compares against the calculated retention cutoff date.
|
||||
- Drops qualifiers using `ALTER TABLE ... DROP PARTITION`.
|
||||
|
||||
### Helper Methods
|
||||
|
||||
#### `get_table_min_clock(table: str) -> Optional[datetime]`
|
||||
- Queries the table for the oldest timestamp. Used in `db_min` initialization strategy.
|
||||
|
||||
#### `has_incompatible_primary_key(table: str) -> bool`
|
||||
- **Safety Critical**: Verifies that the table's Primary Key includes the `clock` column.
|
||||
- Returns `True` if incompatible (prevents partitioning to avoid MySQL errors).
|
||||
|
||||
#### `get_partition_name(dt: datetime, period: str) -> str`
|
||||
- Generates standard partition names:
|
||||
- Daily: `pYYYY_MM_DD`
|
||||
- Monthly: `pYYYY_MM`
|
||||
|
||||
#### `get_partition_description(dt: datetime, period: str) -> str`
|
||||
- Generates the `VALUES LESS THAN` expression for the partition (Start of NEXT period).
|
||||
Reference in New Issue
Block a user