mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-29 15:13:53 +03:00
Detect migrating batch size (#7353)
* Make migrating batch size as configurable * detect different table batch insert size and remove config item * remove unrelated changes
This commit is contained in:
parent
ef57fe4ae3
commit
337d6915ff
4 changed files with 73 additions and 17 deletions
|
@ -368,3 +368,9 @@ func DumpDatabase(filePath string, dbType string) error {
|
||||||
}
|
}
|
||||||
return x.DumpTablesToFile(tbs, filePath)
|
return x.DumpTablesToFile(tbs, filePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MaxBatchInsertSize returns the table's max batch insert size
|
||||||
|
func MaxBatchInsertSize(bean interface{}) int {
|
||||||
|
t := x.TableInfo(bean)
|
||||||
|
return 999 / len(t.ColumnsSeq())
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ package base
|
||||||
|
|
||||||
// Uploader uploads all the informations of one repository
|
// Uploader uploads all the informations of one repository
|
||||||
type Uploader interface {
|
type Uploader interface {
|
||||||
|
MaxBatchInsertSize(tp string) int
|
||||||
CreateRepo(repo *Repository, opts MigrateOptions) error
|
CreateRepo(repo *Repository, opts MigrateOptions) error
|
||||||
CreateMilestones(milestones ...*Milestone) error
|
CreateMilestones(milestones ...*Milestone) error
|
||||||
CreateReleases(releases ...*Release) error
|
CreateReleases(releases ...*Release) error
|
||||||
|
|
|
@ -53,6 +53,25 @@ func NewGiteaLocalUploader(doer *models.User, repoOwner, repoName string) *Gitea
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MaxBatchInsertSize returns the table's max batch insert size
|
||||||
|
func (g *GiteaLocalUploader) MaxBatchInsertSize(tp string) int {
|
||||||
|
switch tp {
|
||||||
|
case "issue":
|
||||||
|
return models.MaxBatchInsertSize(new(models.Issue))
|
||||||
|
case "comment":
|
||||||
|
return models.MaxBatchInsertSize(new(models.Comment))
|
||||||
|
case "milestone":
|
||||||
|
return models.MaxBatchInsertSize(new(models.Milestone))
|
||||||
|
case "label":
|
||||||
|
return models.MaxBatchInsertSize(new(models.Label))
|
||||||
|
case "release":
|
||||||
|
return models.MaxBatchInsertSize(new(models.Release))
|
||||||
|
case "pullrequest":
|
||||||
|
return models.MaxBatchInsertSize(new(models.PullRequest))
|
||||||
|
}
|
||||||
|
return 10
|
||||||
|
}
|
||||||
|
|
||||||
// CreateRepo creates a repository
|
// CreateRepo creates a repository
|
||||||
func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.MigrateOptions) error {
|
func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.MigrateOptions) error {
|
||||||
owner, err := models.GetUserByName(g.repoOwner)
|
owner, err := models.GetUserByName(g.repoOwner)
|
||||||
|
|
|
@ -91,8 +91,16 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := uploader.CreateMilestones(milestones...); err != nil {
|
msBatchSize := uploader.MaxBatchInsertSize("milestone")
|
||||||
return err
|
for len(milestones) > 0 {
|
||||||
|
if len(milestones) < msBatchSize {
|
||||||
|
msBatchSize = len(milestones)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := uploader.CreateMilestones(milestones...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
milestones = milestones[msBatchSize:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,8 +111,16 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := uploader.CreateLabels(labels...); err != nil {
|
lbBatchSize := uploader.MaxBatchInsertSize("label")
|
||||||
return err
|
for len(labels) > 0 {
|
||||||
|
if len(labels) < lbBatchSize {
|
||||||
|
lbBatchSize = len(labels)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := uploader.CreateLabels(labels...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
labels = labels[lbBatchSize:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,15 +131,27 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := uploader.CreateReleases(releases...); err != nil {
|
relBatchSize := uploader.MaxBatchInsertSize("release")
|
||||||
return err
|
for len(releases) > 0 {
|
||||||
|
if len(releases) < relBatchSize {
|
||||||
|
relBatchSize = len(releases)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := uploader.CreateReleases(releases[:relBatchSize]...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
releases = releases[relBatchSize:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var commentBatchSize = uploader.MaxBatchInsertSize("comment")
|
||||||
|
|
||||||
if opts.Issues {
|
if opts.Issues {
|
||||||
log.Trace("migrating issues and comments")
|
log.Trace("migrating issues and comments")
|
||||||
|
var issueBatchSize = uploader.MaxBatchInsertSize("issue")
|
||||||
|
|
||||||
for i := 1; ; i++ {
|
for i := 1; ; i++ {
|
||||||
issues, isEnd, err := downloader.GetIssues(i, 100)
|
issues, isEnd, err := downloader.GetIssues(i, issueBatchSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -141,7 +169,7 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var allComments = make([]*base.Comment, 0, 100)
|
var allComments = make([]*base.Comment, 0, commentBatchSize)
|
||||||
for _, issue := range issues {
|
for _, issue := range issues {
|
||||||
comments, err := downloader.GetComments(issue.Number)
|
comments, err := downloader.GetComments(issue.Number)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -154,11 +182,12 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
}
|
}
|
||||||
allComments = append(allComments, comments...)
|
allComments = append(allComments, comments...)
|
||||||
|
|
||||||
if len(allComments) >= 100 {
|
if len(allComments) >= commentBatchSize {
|
||||||
if err := uploader.CreateComments(allComments...); err != nil {
|
if err := uploader.CreateComments(allComments[:commentBatchSize]...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
allComments = make([]*base.Comment, 0, 100)
|
|
||||||
|
allComments = allComments[commentBatchSize:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,8 +205,9 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
|
|
||||||
if opts.PullRequests {
|
if opts.PullRequests {
|
||||||
log.Trace("migrating pull requests and comments")
|
log.Trace("migrating pull requests and comments")
|
||||||
|
var prBatchSize = models.MaxBatchInsertSize("pullrequest")
|
||||||
for i := 1; ; i++ {
|
for i := 1; ; i++ {
|
||||||
prs, err := downloader.GetPullRequests(i, 100)
|
prs, err := downloader.GetPullRequests(i, prBatchSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -195,7 +225,7 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var allComments = make([]*base.Comment, 0, 100)
|
var allComments = make([]*base.Comment, 0, commentBatchSize)
|
||||||
for _, pr := range prs {
|
for _, pr := range prs {
|
||||||
comments, err := downloader.GetComments(pr.Number)
|
comments, err := downloader.GetComments(pr.Number)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -209,11 +239,11 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
|
|
||||||
allComments = append(allComments, comments...)
|
allComments = append(allComments, comments...)
|
||||||
|
|
||||||
if len(allComments) >= 100 {
|
if len(allComments) >= commentBatchSize {
|
||||||
if err := uploader.CreateComments(allComments...); err != nil {
|
if err := uploader.CreateComments(allComments[:commentBatchSize]...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
allComments = make([]*base.Comment, 0, 100)
|
allComments = allComments[commentBatchSize:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(allComments) > 0 {
|
if len(allComments) > 0 {
|
||||||
|
@ -222,7 +252,7 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(prs) < 100 {
|
if len(prs) < prBatchSize {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue