Improve notifications to fix commit notification and support release notification#34803
Improve notifications to fix commit notification and support release notification#34803lunny wants to merge 27 commits intogo-gitea:mainfrom
Conversation
models/migrations/v1_25/v321.go
Outdated
|
|
||
| updatedByIndex := schemas.NewIndex("idx_notification_updated_by", schemas.IndexType) | ||
| updatedByIndex.AddColumn("updated_by") | ||
| indices = append(indices, updatedByIndex) |
There was a problem hiding this comment.
Are these indices well-designed and correct?
You can't just add index to every column and expect that "oh it should work".
Does database work really work that way?
There was a problem hiding this comment.
This highlights a significant design flaw in the current table structure.
In this PR, we introduced a new column, release_id, to support release-type notifications.
| releaseIDIndex := schemas.NewIndex("idx_notification_release_id", schemas.IndexType) | ||
| releaseIDIndex.AddColumn("release_id") | ||
| indices = append(indices, releaseIDIndex) | ||
|
|
There was a problem hiding this comment.
The database design looks strange.
If I understand correctly, what you need is "a unique key to avoid duplication and help to mark the notification as read". I think it could be resolved by a more flexible approach like:
unique_key = 'commit-{CommitID}'
unique_key = 'release-{ReleaseID}'
unique_key = 'comment-{IssueID}-{CommentID}'
Then we only need one unique index (user_id, unique_key)
And, some legacy indices like status, source seem not able to help to improve querying performance because if user_id is used, then these indices won't be used.
And, the user_id index is redundancy because there is already (user_id, status, updated_unix). If you would take more care about performance, these problems should be handled.
There was a problem hiding this comment.
The source should also be part of the unique key. Currently, issue and release notifications require a unique key, while commit and repository notifications do not.
There was a problem hiding this comment.
Maybe we should use a one column to store this id, otherwise the unique key seems too complicated.
This PR improved notifications.