feat: optimize log indexes
This commit is contained in:
@@ -5,8 +5,12 @@
|
||||
package bots
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"code.gitea.io/gitea/core"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
@@ -29,10 +33,10 @@ type Task struct {
|
||||
Started timeutil.TimeStamp
|
||||
Stopped timeutil.TimeStamp
|
||||
|
||||
LogURL string // dbfs:///a/b.log or s3://endpoint.com/a/b.log and etc.
|
||||
LogLength int64 // lines count
|
||||
LogSize int64 // blob size
|
||||
LogIndexes []int64 `xorm:"JSON TEXT"` // line number to offset
|
||||
LogURL string // dbfs:///a/b.log or s3://endpoint.com/a/b.log and etc.
|
||||
LogLength int64 // lines count
|
||||
LogSize int64 // blob size
|
||||
LogIndexes *LogIndexes `xorm:"BLOB"` // line number to offset
|
||||
LogExpired bool
|
||||
|
||||
Created timeutil.TimeStamp `xorm:"created"`
|
||||
@@ -109,6 +113,30 @@ func (task *Task) FullSteps() []*TaskStep {
|
||||
return steps
|
||||
}
|
||||
|
||||
type LogIndexes []int64
|
||||
|
||||
func (i *LogIndexes) FromDB(b []byte) error {
|
||||
reader := bytes.NewReader(b)
|
||||
for {
|
||||
v, err := binary.ReadVarint(reader)
|
||||
if err != nil {
|
||||
if errors.Is(err, io.EOF) {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("binary ReadVarint: %w", err)
|
||||
}
|
||||
*i = append(*i, v)
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LogIndexes) ToDB() ([]byte, error) {
|
||||
var buf []byte
|
||||
for _, v := range *i {
|
||||
buf = binary.AppendVarint(buf, v)
|
||||
}
|
||||
return buf, nil
|
||||
}
|
||||
|
||||
// ErrTaskNotExist represents an error for bot task not exist
|
||||
type ErrTaskNotExist struct {
|
||||
ID int64
|
||||
|
||||
@@ -94,17 +94,20 @@ func addBotTables(x *xorm.Engine) error {
|
||||
type BotsRunIndex db.ResourceIndex
|
||||
|
||||
type BotsTask struct {
|
||||
ID int64
|
||||
JobID int64
|
||||
Attempt int64
|
||||
RunnerID int64 `xorm:"index"`
|
||||
LogToFile bool // read log from database or from storage
|
||||
LogURL string // url of the log file in storage
|
||||
Result int32
|
||||
Started timeutil.TimeStamp
|
||||
Stopped timeutil.TimeStamp
|
||||
Created timeutil.TimeStamp `xorm:"created"`
|
||||
Updated timeutil.TimeStamp `xorm:"updated"`
|
||||
ID int64
|
||||
JobID int64
|
||||
Attempt int64
|
||||
RunnerID int64 `xorm:"index"`
|
||||
Result int32
|
||||
Started timeutil.TimeStamp
|
||||
Stopped timeutil.TimeStamp
|
||||
LogURL string // dbfs:///a/b.log or s3://endpoint.com/a/b.log and etc.
|
||||
LogLength int64 // lines count
|
||||
LogSize int64 // blob size
|
||||
LogIndexes *[]int64 `xorm:"BLOB"` // line number to offset
|
||||
LogExpired bool
|
||||
Created timeutil.TimeStamp `xorm:"created"`
|
||||
Updated timeutil.TimeStamp `xorm:"updated"`
|
||||
}
|
||||
|
||||
type BotsTaskStep struct {
|
||||
|
||||
@@ -142,9 +142,9 @@ type Repository struct {
|
||||
NumProjects int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumClosedProjects int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumOpenProjects int `xorm:"-"`
|
||||
NumBuilds int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumClosedBuilds int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumOpenBuilds int `xorm:"-"`
|
||||
NumRuns int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumClosedRuns int `xorm:"NOT NULL DEFAULT 0"`
|
||||
NumOpenRuns int `xorm:"-"`
|
||||
|
||||
IsPrivate bool `xorm:"INDEX"`
|
||||
IsEmpty bool `xorm:"INDEX"`
|
||||
@@ -237,7 +237,7 @@ func (repo *Repository) AfterLoad() {
|
||||
repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls
|
||||
repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
|
||||
repo.NumOpenProjects = repo.NumProjects - repo.NumClosedProjects
|
||||
repo.NumOpenBuilds = repo.NumBuilds - repo.NumClosedBuilds
|
||||
repo.NumOpenRuns = repo.NumRuns - repo.NumClosedRuns
|
||||
}
|
||||
|
||||
// LoadAttributes loads attributes of the repository.
|
||||
|
||||
Reference in New Issue
Block a user