feat: optimize log indexes

This commit is contained in:
Jason Song
2022-10-18 17:17:58 +08:00
parent bb4963fd4a
commit dd5b2c5dfd
7 changed files with 59 additions and 25 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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.