Skip to content

Commit

Permalink
Fail migrating schedule config when named timezones aren't loaded
Browse files Browse the repository at this point in the history
  • Loading branch information
yhabteab committed Nov 14, 2023
1 parent 53ef685 commit 63e21cf
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
7 changes: 7 additions & 0 deletions doc/80-Upgrading.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ Usually the only manual steps involved are schema updates for the database.
## Upgrading to Version 1.0.0

Icinga Reporting version 1.0.0 requires a schema update for the database.

> **Note**
>
> In order for the migration script to be successful, you must [populate](https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html#time-zone-installation)
> all the system named time zone information into your MSQL/MariaDB server. Otherwise, the migration will not succeed
> and will produce an SQL error.
If you're already using Icinga Web version `>= 2.12`, then you don't need to perform any of these steps manually.
Icinga Web provides you the ability to perform such migrations in a simple way. You may be familiar with such an
automation if you're an Icinga Director user. For those who are not using the latest version of Icinga Web, please
Expand Down
13 changes: 13 additions & 0 deletions schema/mysql-upgrades/1.0.0.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ DROP PROCEDURE IF EXISTS migrate_schedule_config;
DELIMITER //
CREATE PROCEDURE migrate_schedule_config()
BEGIN
DECLARE session_time_zone text;
DECLARE session_time_zone_exists text;
DECLARE utc_time_zone text;

DECLARE schedule_id int;
DECLARE schedule_start bigint;
DECLARE schedule_frequency enum('minutely', 'hourly', 'daily', 'weekly', 'monthly');
Expand All @@ -13,6 +17,15 @@ BEGIN
DECLARE schedule CURSOR FOR SELECT id, start, frequency, config FROM schedule;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- Determine the current session time zone name
SELECT IF(@@session.TIME_ZONE = 'SYSTEM', @@system_time_zone, @@session.TIME_ZONE) INTO session_time_zone;

SELECT Name INTO session_time_zone_exists FROM mysql.time_zone_name WHERE Name = session_time_zone LIMIT 1;
SELECT Name INTO utc_time_zone FROM mysql.time_zone_name WHERE Name = 'UTC' LIMIT 1;
IF utc_time_zone IS NULL OR session_time_zone_exists IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'required named time zone information are not populated into mysql/mariadb';
END IF;

OPEN schedule;
read_loop: LOOP
FETCH schedule INTO schedule_id, schedule_start, schedule_frequency, schedule_config;
Expand Down

0 comments on commit 63e21cf

Please sign in to comment.