this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix some retry logic

dholms 10995378 133fb58f

+7 -5
+2 -2
nexus/models/models.go
··· 25 25 26 26 type Repo struct { 27 27 Did string `gorm:"primaryKey"` 28 - State RepoState `gorm:"not null;default:'pending';index"` 28 + State RepoState `gorm:"not null;default:'pending';index:idx_repos_state_retry"` 29 29 Status AccountStatus `gorm:"not null;default:'active'"` 30 30 Handle string `gorm:"type:text"` 31 31 Rev string `gorm:"type:text"` 32 32 PrevData string `gorm:"type:text"` 33 33 ErrorMsg string `gorm:"type:text"` 34 34 RetryCount int `gorm:"not null;default:0"` 35 - RetryAfter int64 `gorm:"not null;default:0"` // Unix timestamp 35 + RetryAfter int64 `gorm:"not null;default:0;index:idx_repos_state_retry"` // Unix timestamp (seconds) 36 36 } 37 37 38 38 type OutboxBuffer struct {
+5 -3
nexus/resync.go
··· 46 46 defer n.claimJobMu.Unlock() 47 47 48 48 var did string 49 + now := time.Now().Unix() 49 50 result := n.db.Raw(` 50 51 UPDATE repos 51 52 SET state = ? 52 53 WHERE did = ( 53 54 SELECT did FROM repos 54 55 WHERE state IN (?, ?) 55 - ORDER BY RANDOM() 56 + AND retry_after <= ? 57 + ORDER BY retry_after ASC 56 58 LIMIT 1 57 59 ) 58 60 RETURNING did 59 - `, models.RepoStateResyncing, models.RepoStatePending, models.RepoStateDesynced).Scan(&did) 61 + `, models.RepoStateResyncing, models.RepoStatePending, models.RepoStateDesynced, now).Scan(&did) 60 62 if result.Error != nil { 61 63 return "", false, result.Error 62 64 } ··· 296 298 "state": state, 297 299 "error_msg": errMsg, 298 300 "retry_count": repo.RetryCount + 1, 299 - "retry_after": retryAfter, 301 + "retry_after": retryAfter.Unix(), 300 302 }).Error 301 303 if dbErr != nil { 302 304 return dbErr