Skip to content

Commit

Permalink
Unify check attempt data type to uint32 already used somewhere
Browse files Browse the repository at this point in the history
A float isn't necessary as in Icinga 2 Checkable#max_check_attempts and
check_attempt are ints. But uint8 isn't enough for e.g. 1 check/s to get
HARD after 5m (300s > 255).
  • Loading branch information
Al2Klimov committed Mar 11, 2024
1 parent 85bde9e commit 8272f26
Show file tree
Hide file tree
Showing 11 changed files with 50 additions and 17 deletions.
8 changes: 4 additions & 4 deletions cmd/icingadb-migrate/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -739,8 +739,8 @@ type stateRow = struct {
StateTimeUsec uint32
State uint8
StateType uint8
CurrentCheckAttempt uint16
MaxCheckAttempts uint16
CurrentCheckAttempt uint32
MaxCheckAttempts uint32
LastState uint8
LastHardState uint8
Output sql.NullString
Expand Down Expand Up @@ -813,10 +813,10 @@ func convertStateRows(
HardState: row.LastHardState,
PreviousSoftState: row.LastState,
PreviousHardState: previousHardState,
CheckAttempt: uint8(row.CurrentCheckAttempt),
CheckAttempt: row.CurrentCheckAttempt,
Output: icingadbTypes.String{NullString: row.Output},
LongOutput: icingadbTypes.String{NullString: row.LongOutput},
MaxCheckAttempts: uint32(row.MaxCheckAttempts),
MaxCheckAttempts: row.MaxCheckAttempts,
CheckSource: icingadbTypes.String{NullString: row.CheckSource},
})

Expand Down
4 changes: 2 additions & 2 deletions pkg/icingadb/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ func NewDb(db *sqlx.DB, logger *logging.Logger, options *Options) *DB {
}

const (
expectedMysqlSchemaVersion = 4
expectedPostgresSchemaVersion = 2
expectedMysqlSchemaVersion = 5
expectedPostgresSchemaVersion = 3
)

// CheckSchema asserts the database schema of the expected version being present.
Expand Down
2 changes: 1 addition & 1 deletion pkg/icingadb/v1/checkable.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ type Checkable struct {
IconImageAlt string `json:"icon_image_alt"`
IconImageId types.Binary `json:"icon_image_id"`
IsVolatile types.Bool `json:"is_volatile"`
MaxCheckAttempts float64 `json:"max_check_attempts"`
MaxCheckAttempts uint32 `json:"max_check_attempts"`
Notes string `json:"notes"`
NotesUrlId types.Binary `json:"notes_url_id"`
NotificationsEnabled types.Bool `json:"notifications_enabled"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/icingadb/v1/history/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type StateHistory struct {
HardState uint8 `json:"hard_state"`
PreviousSoftState uint8 `json:"previous_soft_state"`
PreviousHardState uint8 `json:"previous_hard_state"`
CheckAttempt uint8 `json:"check_attempt"`
CheckAttempt uint32 `json:"check_attempt"`
Output types.String `json:"output"`
LongOutput types.String `json:"long_output"`
MaxCheckAttempts uint32 `json:"max_check_attempts"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/icingadb/v1/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ type State struct {
EnvironmentMeta `json:",inline"`
AcknowledgementCommentId types.Binary `json:"acknowledgement_comment_id"`
LastCommentId types.Binary `json:"last_comment_id"`
CheckAttempt uint8 `json:"check_attempt"`
CheckAttempt uint32 `json:"check_attempt"`
CheckCommandline types.String `json:"check_commandline"`
CheckSource types.String `json:"check_source"`
SchedulingSource types.String `json:"scheduling_source"`
Expand Down
8 changes: 4 additions & 4 deletions schema/mysql/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ CREATE TABLE host_state (
hard_state tinyint unsigned NOT NULL,
previous_soft_state tinyint unsigned NOT NULL,
previous_hard_state tinyint unsigned NOT NULL,
check_attempt tinyint unsigned NOT NULL,
check_attempt int unsigned NOT NULL,
severity smallint unsigned NOT NULL,

output longtext DEFAULT NULL,
Expand Down Expand Up @@ -460,7 +460,7 @@ CREATE TABLE service_state (
hard_state tinyint unsigned NOT NULL,
previous_soft_state tinyint unsigned NOT NULL,
previous_hard_state tinyint unsigned NOT NULL,
check_attempt tinyint unsigned NOT NULL,
check_attempt int unsigned NOT NULL,
severity smallint unsigned NOT NULL,

output longtext DEFAULT NULL,
Expand Down Expand Up @@ -1147,7 +1147,7 @@ CREATE TABLE state_history (
hard_state tinyint unsigned NOT NULL,
previous_soft_state tinyint unsigned NOT NULL,
previous_hard_state tinyint unsigned NOT NULL,
check_attempt tinyint unsigned NOT NULL,
check_attempt int unsigned NOT NULL, -- May be a tinyint unsigned, see ./upgrades/1.1.2-history.sql.
output longtext DEFAULT NULL,
long_output longtext DEFAULT NULL,
max_check_attempts int unsigned NOT NULL,
Expand Down Expand Up @@ -1343,4 +1343,4 @@ CREATE TABLE icingadb_schema (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;

INSERT INTO icingadb_schema (version, timestamp)
VALUES (4, CURRENT_TIMESTAMP() * 1000);
VALUES (5, CURRENT_TIMESTAMP() * 1000);
6 changes: 6 additions & 0 deletions schema/mysql/upgrades/1.1.2-history.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- OPTIONAL addition to ./1.1.2.sql.
-- Will take a LONG time depending on amount of already present history.
-- You HAVE TO apply it if you have some max_check_attempts > 255.
-- You SHOULD apply it if the already present history isn't large, yet.

ALTER TABLE state_history MODIFY COLUMN check_attempt int unsigned NOT NULL;
10 changes: 10 additions & 0 deletions schema/mysql/upgrades/1.1.2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-- See also ./1.1.2-history.sql!

ALTER TABLE host_state MODIFY COLUMN check_attempt int unsigned NOT NULL;

ALTER TABLE service_state MODIFY COLUMN check_attempt int unsigned NOT NULL;

ALTER TABLE state_history MODIFY COLUMN check_attempt tinyint unsigned NOT NULL COMMENT 'optional schema/mysql/upgrades/1.1.2-history.sql not applied, yet';

INSERT INTO icingadb_schema (version, timestamp)
VALUES (5, CURRENT_TIMESTAMP() * 1000);
8 changes: 4 additions & 4 deletions schema/pgsql/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ CREATE TABLE host_state (
hard_state tinyuint NOT NULL,
previous_soft_state tinyuint NOT NULL,
previous_hard_state tinyuint NOT NULL,
check_attempt tinyuint NOT NULL,
check_attempt uint NOT NULL,
severity smalluint NOT NULL,

output text DEFAULT NULL,
Expand Down Expand Up @@ -675,7 +675,7 @@ CREATE TABLE service_state (
hard_state tinyuint NOT NULL,
previous_soft_state tinyuint NOT NULL,
previous_hard_state tinyuint NOT NULL,
check_attempt tinyuint NOT NULL,
check_attempt uint NOT NULL,
severity smalluint NOT NULL,

output text DEFAULT NULL,
Expand Down Expand Up @@ -1846,7 +1846,7 @@ CREATE TABLE state_history (
hard_state tinyuint NOT NULL,
previous_soft_state tinyuint NOT NULL,
previous_hard_state tinyuint NOT NULL,
check_attempt tinyuint NOT NULL,
check_attempt uint NOT NULL, -- May be a tinyuint, see ./upgrades/1.1.2-history.sql.
output text DEFAULT NULL,
long_output text DEFAULT NULL,
max_check_attempts uint NOT NULL,
Expand Down Expand Up @@ -2181,4 +2181,4 @@ CREATE TABLE icingadb_schema (
ALTER SEQUENCE icingadb_schema_id_seq OWNED BY icingadb_schema.id;

INSERT INTO icingadb_schema (version, timestamp)
VALUES (2, extract(epoch from now()) * 1000);
VALUES (3, extract(epoch from now()) * 1000);
7 changes: 7 additions & 0 deletions schema/pgsql/upgrades/1.1.2-history.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- OPTIONAL addition to ./1.1.2.sql.
-- Will take a LONG time depending on amount of already present history.
-- You HAVE TO apply it if you have some max_check_attempts > 255.
-- You SHOULD apply it if the already present history isn't large, yet.

ALTER TABLE state_history ALTER COLUMN check_attempt TYPE uint;
COMMENT ON COLUMN state_history.check_attempt IS NULL;
10 changes: 10 additions & 0 deletions schema/pgsql/upgrades/1.1.2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-- See also ./1.1.2-history.sql!

ALTER TABLE host_state ALTER COLUMN check_attempt TYPE uint;

ALTER TABLE service_state ALTER COLUMN check_attempt TYPE uint;

COMMENT ON COLUMN state_history.check_attempt IS 'optional schema/pgsql/upgrades/1.1.2-history.sql not applied, yet';

INSERT INTO icingadb_schema (version, timestamp)
VALUES (3, extract(epoch from now()) * 1000);

0 comments on commit 8272f26

Please sign in to comment.