Work on failed outbound requests and move type migrators
- DB type migrators are now in separate file, in preparation for full custom sql migration statements - Start work on handling failed outbound requests stored in the db
This commit is contained in:
parent
81a01fbf8b
commit
7ac4c628b8
13 changed files with 372 additions and 145 deletions
|
@ -7,6 +7,7 @@ package dbgen
|
|||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"strings"
|
||||
|
||||
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
||||
"gorm.io/gorm"
|
||||
|
@ -607,6 +608,34 @@ type IFailedOutboundRequestDo interface {
|
|||
Returning(value interface{}, columns ...string) IFailedOutboundRequestDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
|
||||
KillServers(maxAttempts uint32) (err error)
|
||||
}
|
||||
|
||||
// KillServers marks all servers where a request has more than X failed attempts as dead
|
||||
//
|
||||
// WITH servers_to_kill AS (
|
||||
//
|
||||
// SELECT target_server_id
|
||||
// FROM failed_outbound_requests
|
||||
// WHERE nr_of_attempts > @maxAttempts
|
||||
//
|
||||
// )
|
||||
// UPDATE remote_servers
|
||||
// SET is_dead = true
|
||||
// WHERE id IN (SELECT target_server_id FROM servers_to_kill)
|
||||
func (f failedOutboundRequestDo) KillServers(maxAttempts uint32) (err error) {
|
||||
var params []interface{}
|
||||
|
||||
var generateSQL strings.Builder
|
||||
params = append(params, maxAttempts)
|
||||
generateSQL.WriteString("WITH servers_to_kill AS ( SELECT target_server_id FROM failed_outbound_requests WHERE nr_of_attempts > ? ) UPDATE remote_servers SET is_dead = true WHERE id IN (SELECT target_server_id FROM servers_to_kill) ")
|
||||
|
||||
var executeSQL *gorm.DB
|
||||
executeSQL = f.UnderlyingDB().Exec(generateSQL.String(), params...) // ignore_security_alert
|
||||
err = executeSQL.Error
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (f failedOutboundRequestDo) Debug() IFailedOutboundRequestDo {
|
||||
|
|
|
@ -55,6 +55,8 @@ func newRole(db *gorm.DB, opts ...gen.DOOption) role {
|
|||
_role.CanMentionOthers = field.NewBool(tableName, "can_mention_others")
|
||||
_role.HasMentionCountLimit = field.NewBool(tableName, "has_mention_count_limit")
|
||||
_role.MentionLimit = field.NewUint32(tableName, "mention_limit")
|
||||
_role.MaxIndividualFileSize = field.NewUint64(tableName, "max_individual_file_size")
|
||||
_role.MaxTotalFileSize = field.NewUint64(tableName, "max_total_file_size")
|
||||
_role.AutoNsfwMedia = field.NewBool(tableName, "auto_nsfw_media")
|
||||
_role.AutoCwPosts = field.NewBool(tableName, "auto_cw_posts")
|
||||
_role.AutoCwPostsText = field.NewString(tableName, "auto_cw_posts_text")
|
||||
|
@ -118,6 +120,8 @@ type role struct {
|
|||
CanMentionOthers field.Bool
|
||||
HasMentionCountLimit field.Bool
|
||||
MentionLimit field.Uint32
|
||||
MaxIndividualFileSize field.Uint64
|
||||
MaxTotalFileSize field.Uint64
|
||||
AutoNsfwMedia field.Bool
|
||||
AutoCwPosts field.Bool
|
||||
AutoCwPostsText field.String
|
||||
|
@ -187,6 +191,8 @@ func (r *role) updateTableName(table string) *role {
|
|||
r.CanMentionOthers = field.NewBool(table, "can_mention_others")
|
||||
r.HasMentionCountLimit = field.NewBool(table, "has_mention_count_limit")
|
||||
r.MentionLimit = field.NewUint32(table, "mention_limit")
|
||||
r.MaxIndividualFileSize = field.NewUint64(table, "max_individual_file_size")
|
||||
r.MaxTotalFileSize = field.NewUint64(table, "max_total_file_size")
|
||||
r.AutoNsfwMedia = field.NewBool(table, "auto_nsfw_media")
|
||||
r.AutoCwPosts = field.NewBool(table, "auto_cw_posts")
|
||||
r.AutoCwPostsText = field.NewString(table, "auto_cw_posts_text")
|
||||
|
@ -228,7 +234,7 @@ func (r *role) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
|||
}
|
||||
|
||||
func (r *role) fillFieldMap() {
|
||||
r.fieldMap = make(map[string]field.Expr, 53)
|
||||
r.fieldMap = make(map[string]field.Expr, 55)
|
||||
r.fieldMap["id"] = r.ID
|
||||
r.fieldMap["created_at"] = r.CreatedAt
|
||||
r.fieldMap["updated_at"] = r.UpdatedAt
|
||||
|
@ -257,6 +263,8 @@ func (r *role) fillFieldMap() {
|
|||
r.fieldMap["can_mention_others"] = r.CanMentionOthers
|
||||
r.fieldMap["has_mention_count_limit"] = r.HasMentionCountLimit
|
||||
r.fieldMap["mention_limit"] = r.MentionLimit
|
||||
r.fieldMap["max_individual_file_size"] = r.MaxIndividualFileSize
|
||||
r.fieldMap["max_total_file_size"] = r.MaxTotalFileSize
|
||||
r.fieldMap["auto_nsfw_media"] = r.AutoNsfwMedia
|
||||
r.fieldMap["auto_cw_posts"] = r.AutoCwPosts
|
||||
r.fieldMap["auto_cw_posts_text"] = r.AutoCwPostsText
|
||||
|
|
|
@ -39,6 +39,7 @@ func newServerMetadata(db *gorm.DB, opts ...gen.DOOption) serverMetadata {
|
|||
_serverMetadata.LECSR = field.NewBytes(tableName, "lecsr")
|
||||
_serverMetadata.LELastUpdate = field.NewField(tableName, "le_last_update")
|
||||
_serverMetadata.LEUserPrivKey = field.NewBytes(tableName, "le_user_priv_key")
|
||||
_serverMetadata.LastMigrationVersion = field.NewUint64(tableName, "last_migration_version")
|
||||
|
||||
_serverMetadata.fillFieldMap()
|
||||
|
||||
|
@ -48,19 +49,20 @@ func newServerMetadata(db *gorm.DB, opts ...gen.DOOption) serverMetadata {
|
|||
type serverMetadata struct {
|
||||
serverMetadataDo
|
||||
|
||||
ALL field.Asterisk
|
||||
Id field.Uint64
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
LEDomain field.String
|
||||
LECertUrl field.String
|
||||
LECertStableUrl field.String
|
||||
LEPrivateKey field.Bytes
|
||||
LECertificate field.Bytes
|
||||
LEIssuerCertificate field.Bytes
|
||||
LECSR field.Bytes
|
||||
LELastUpdate field.Field
|
||||
LEUserPrivKey field.Bytes
|
||||
ALL field.Asterisk
|
||||
Id field.Uint64
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
LEDomain field.String
|
||||
LECertUrl field.String
|
||||
LECertStableUrl field.String
|
||||
LEPrivateKey field.Bytes
|
||||
LECertificate field.Bytes
|
||||
LEIssuerCertificate field.Bytes
|
||||
LECSR field.Bytes
|
||||
LELastUpdate field.Field
|
||||
LEUserPrivKey field.Bytes
|
||||
LastMigrationVersion field.Uint64
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
@ -89,6 +91,7 @@ func (s *serverMetadata) updateTableName(table string) *serverMetadata {
|
|||
s.LECSR = field.NewBytes(table, "lecsr")
|
||||
s.LELastUpdate = field.NewField(table, "le_last_update")
|
||||
s.LEUserPrivKey = field.NewBytes(table, "le_user_priv_key")
|
||||
s.LastMigrationVersion = field.NewUint64(table, "last_migration_version")
|
||||
|
||||
s.fillFieldMap()
|
||||
|
||||
|
@ -105,7 +108,7 @@ func (s *serverMetadata) GetFieldByName(fieldName string) (field.OrderExpr, bool
|
|||
}
|
||||
|
||||
func (s *serverMetadata) fillFieldMap() {
|
||||
s.fieldMap = make(map[string]field.Expr, 12)
|
||||
s.fieldMap = make(map[string]field.Expr, 13)
|
||||
s.fieldMap["id"] = s.Id
|
||||
s.fieldMap["created_at"] = s.CreatedAt
|
||||
s.fieldMap["updated_at"] = s.UpdatedAt
|
||||
|
@ -118,6 +121,7 @@ func (s *serverMetadata) fillFieldMap() {
|
|||
s.fieldMap["lecsr"] = s.LECSR
|
||||
s.fieldMap["le_last_update"] = s.LELastUpdate
|
||||
s.fieldMap["le_user_priv_key"] = s.LEUserPrivKey
|
||||
s.fieldMap["last_migration_version"] = s.LastMigrationVersion
|
||||
}
|
||||
|
||||
func (s serverMetadata) clone(db *gorm.DB) serverMetadata {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue