Skip to content

Commit

Permalink
domain: fix a bug when reloading take a long time in domain.Init (#45170
Browse files Browse the repository at this point in the history
) (#45391)

close #45176
  • Loading branch information
ti-chi-bot committed Oct 11, 2023
1 parent ef54d6c commit 5704f50
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions domain/domain.go
Expand Up @@ -1172,6 +1172,7 @@ func (do *Domain) Init(
if err != nil {
return err
}
startReloadTime := time.Now()
// step 2: domain reload the infoSchema.
err = do.Reload()
if err != nil {
Expand All @@ -1187,6 +1188,17 @@ func (do *Domain) Init(
// Only when the store is local that the lease value is 0.
// If the store is local, it doesn't need loadSchemaInLoop.
if ddlLease > 0 {
sub := time.Since(startReloadTime)
// The reload(in step 2) operation takes more than ddlLease and a new reload operation was not performed,
// the next query will respond by ErrInfoSchemaExpired error. So we do a new reload to update schemaValidator.latestSchemaExpire.
if sub > (ddlLease / 2) {
logutil.BgLogger().Warn("loading schema takes a long time, we do a new reload", zap.Duration("take time", sub))
err = do.Reload()
if err != nil {
return err
}
}

// Local store needs to get the change information for every DDL state in each session.
do.wg.Run(func() {
do.loadSchemaInLoop(ctx, ddlLease)
Expand Down

0 comments on commit 5704f50

Please sign in to comment.