code: func (do *Domain) Reload() error {
  	failpoint.Inject("ErrorMockReloadFailed", func(val failpoint.Value) {
  		if val.(bool) {
  			failpoint.Return(errors.New("mock reload failed"))
  		}
  	})
  
  	// Lock here for only once at the same time.
  	do.m.Lock()
  	defer do.m.Unlock()
  
  	startTime := time.Now()
  
  	var err error
  	var latestSchemaVersion int64
  
  	ver, err := do.store.CurrentVersion()
  	if err != nil {
  		return err
  	}
  
  	schemaVersion := int64(0)
  	oldInfoSchema := do.infoHandle.Get()
  	if oldInfoSchema != nil {
  		schemaVersion = oldInfoSchema.SchemaMetaVersion()
  	}
  
  	var (
  		fullLoad        bool
  		changedTableIDs []int64
  	)
  	latestSchemaVersion, changedTableIDs, fullLoad, err = do.loadInfoSchema(do.infoHandle, schemaVersion, ver.Ver)
  	metrics.LoadSchemaDuration.Observe(time.Since(startTime).Seconds())
  	if err != nil {
  		metrics.LoadSchemaCounter.WithLabelValues("failed").Inc()
  		return err
  	}
  	metrics.LoadSchemaCounter.WithLabelValues("succ").Inc()
  
  	if fullLoad {
  		logutil.Logger(context.Background()).Info("full load and reset schema validator")
  		do.SchemaValidator.Reset()
  	}
  	do.SchemaValidator.Update(ver.Ver, schemaVersion, latestSchemaVersion, changedTableIDs)
  
  	lease := do.DDL().GetLease()
  	sub := time.Since(startTime)
  	// Reload interval is lease / 2, if load schema time elapses more than this interval,
  	// some query maybe responded by ErrInfoSchemaExpired error.
  	if sub > (lease/2) && lease > 0 {
  		logutil.Logger(context.Background()).Warn("loading schema takes a long time", zap.Duration("take time", sub))
  	}
  
  	return nil
  }
docs: // Reload reloads InfoSchema.
  // It's public in order to do the test.