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
)

close #45176
  • Loading branch information
zimulala committed Jul 17, 2023
1 parent 5027679 commit 492e0df
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions domain/domain.go
Expand Up @@ -1197,6 +1197,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 @@ -1212,6 +1213,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 492e0df

Please sign in to comment.