Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions internal/database/mariadb/migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ func (s *SqlDatabase) openMigration() (*migrate.Migrate, error) {

m, err := migrate.NewWithInstance(
"iofs", d,
"mysql", driver)
"mysql", driver,
)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -403,7 +404,7 @@ func (s *SqlDatabase) proceduresExist(procedures []string) (bool, error) {

func (s *SqlDatabase) runPostMigrationProcessInBackground(procs []string) {
s.runPostMigrationProceduresInBackground(procs)
s.runPostMigrationCleanupRoutineInBackground(procs)
s.runPostMigrationCleanupRoutineInBackground()
}

func (s *SqlDatabase) runPostMigrationProceduresInBackground(procs []string) {
Expand All @@ -416,7 +417,7 @@ func (s *SqlDatabase) runPostMigrationProceduresInBackground(procs []string) {
}
}

func (s *SqlDatabase) runPostMigrationCleanupRoutineInBackground(procs []string) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this change most probably will corrupt some functionality. We need to keep this goroutine in background otherwise app will not start up until post migration is not done.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, checked on the production dump and it takes lots of time, will return this goroutine

func (s *SqlDatabase) runPostMigrationCleanupRoutineInBackground() {
go func() {
if err := s.WaitPostMigrations(); err != nil {
logrus.WithError(err).Error(err)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
-- SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and Greenhouse contributors
-- SPDX-License-Identifier: Apache-2.0

DROP PROCEDURE IF EXISTS refresh_mvCountIssueRatingsServiceId_proc;

CREATE PROCEDURE refresh_mvCountIssueRatingsServiceId_proc()
BEGIN
UPDATE mvCountIssueRatingsServiceId
SET is_active = 0
WHERE is_active = 1;

INSERT INTO mvCountIssueRatingsServiceId (
service_id,
service_ccrn,
critical_count,
high_count,
medium_count,
low_count,
none_count,
is_active
)
SELECT
CI.componentinstance_service_id,
S.service_ccrn,
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Critical'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'High'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Medium'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Low'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'None'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
1
FROM Issue I
LEFT JOIN IssueVariant IV ON IV.issuevariant_issue_id = I.issue_id
LEFT JOIN IssueMatch IM ON I.issue_id = IM.issuematch_issue_id
LEFT JOIN ComponentInstance CI
ON CI.componentinstance_id = IM.issuematch_component_instance_id
AND CI.componentinstance_deleted_at IS NULL
LEFT JOIN Service S ON S.service_id = CI.componentinstance_service_id
LEFT JOIN Remediation R
ON CI.componentinstance_service_id = R.remediation_service_id
AND I.issue_id = R.remediation_issue_id
AND R.remediation_deleted_at IS NULL
WHERE I.issue_deleted_at IS NULL
AND IM.issuematch_id IS NOT NULL
AND (R.remediation_id IS NULL OR R.remediation_expiration_date < CURDATE())
GROUP BY CI.componentinstance_service_id
ON DUPLICATE KEY UPDATE
service_ccrn = VALUES(service_ccrn),
critical_count = VALUES(critical_count),
high_count = VALUES(high_count),
medium_count = VALUES(medium_count),
low_count = VALUES(low_count),
none_count = VALUES(none_count),
is_active = 1;

DELETE FROM mvCountIssueRatingsServiceId
WHERE is_active = 0;
END;
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
-- SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and Greenhouse contributors
-- SPDX-License-Identifier: Apache-2.0

DROP PROCEDURE IF EXISTS refresh_mvCountIssueRatingsServiceId_proc;

CREATE PROCEDURE refresh_mvCountIssueRatingsServiceId_proc()
BEGIN
UPDATE mvCountIssueRatingsServiceId
SET is_active = 0
WHERE is_active = 1;

INSERT INTO mvCountIssueRatingsServiceId (
service_id,
service_ccrn,
critical_count,
high_count,
medium_count,
low_count,
none_count,
is_active
)
SELECT
CI.componentinstance_service_id,
S.service_ccrn,
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Critical'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'High'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Medium'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'Low'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
COUNT(DISTINCT CASE WHEN IV.issuevariant_rating = 'None'
THEN CONCAT(CI.componentinstance_component_version_id, ',', I.issue_id) END),
1
FROM Issue I
LEFT JOIN IssueVariant IV ON IV.issuevariant_issue_id = I.issue_id
LEFT JOIN IssueMatch IM ON I.issue_id = IM.issuematch_issue_id
LEFT JOIN ComponentInstance CI
ON CI.componentinstance_id = IM.issuematch_component_instance_id
AND CI.componentinstance_deleted_at IS NULL
JOIN Service S ON S.service_id = CI.componentinstance_service_id
LEFT JOIN Remediation R
ON CI.componentinstance_service_id = R.remediation_service_id
AND I.issue_id = R.remediation_issue_id
AND R.remediation_deleted_at IS NULL
WHERE I.issue_deleted_at IS NULL
AND IM.issuematch_id IS NOT NULL
AND (R.remediation_id IS NULL OR R.remediation_expiration_date < CURDATE())
GROUP BY CI.componentinstance_service_id
ON DUPLICATE KEY UPDATE
service_ccrn = VALUES(service_ccrn),
critical_count = VALUES(critical_count),
high_count = VALUES(high_count),
medium_count = VALUES(medium_count),
low_count = VALUES(low_count),
none_count = VALUES(none_count),
is_active = 1;

DELETE FROM mvCountIssueRatingsServiceId
WHERE is_active = 0;
END;