func (do *Domain) tryLoadSchemaDiffs(m *meta.Meta, usedVersion, newVersion int64) (bool, error) {
	if usedVersion == initialVersion || newVersion-usedVersion > maxNumberOfDiffsToLoad {
		// If there isn't any used version, or used version is too old, we do full load.
		return false, nil
	}
	if usedVersion > newVersion {
		// When user use History Read feature, history schema will be loaded.
		// usedVersion may be larger than newVersion, full load is needed.
		return false, nil
	}
	var diffs []*model.SchemaDiff
	for usedVersion < newVersion {
		usedVersion++
		diff, err := m.GetSchemaDiff(usedVersion)
		if err != nil {
			return false, errors.Trace(err)
		}
		if diff == nil {
			// If diff is missing for any version between used and new version, we fall back to full reload.
			return false, nil
		}
		diffs = append(diffs, diff)
	}
	builder := infoschema.NewBuilder(do.infoHandle).InitWithOldInfoSchema()
	for _, diff := range diffs {
		err := builder.ApplyDiff(m, diff)
		if err != nil {
			return false, errors.Trace(err)
		}
	}
	builder.Build()
	return true, nil
}
// tryLoadSchemaDiffs tries to only load latest schema changes.
// Returns true if the schema is loaded successfully.
// Returns false if the schema can not be loaded by schema diff, then we need to do full load.
tryLoadSchemaDiffs tries to only load latest schema changes.
Returns true if the schema is loaded successfully.
Returns false if the schema can not be loaded by schema diff, then we need to do full load.
// tryLoadSchemaDiffs tries to only load latest schema changes . // Returns true if the schema is loaded successfully . // Returns false if the schema can not be loaded by schema diff then we need to do full load .
func (do *Domain) tryLoadSchemaDiffs(m *meta.Meta, usedVersion, newVersion int64) (bool, error) {
	if usedVersion == initialVersion || newVersion-usedVersion > maxNumberOfDiffsToLoad {
		return false, nil
	}
	if usedVersion > newVersion {
		return false, nil
	}
	var diffs []*model.SchemaDiff
	for usedVersion < newVersion {
		usedVersion++
		diff, err := m.GetSchemaDiff(usedVersion)
		if err != nil {
			return false, errors.Trace(err)
		}
		if diff == nil {
			return false, nil
		}
		diffs = append(diffs, diff)
	}
	builder := infoschema.NewBuilder(do.infoHandle).InitWithOldInfoSchema()
	for _, diff := range diffs {
		err := builder.ApplyDiff(m, diff)
		if err != nil {
			return false, errors.Trace(err)
		}
	}
	builder.Build()
	return true, nil
}
func ( do * Domain ) tryLoadSchemaDiffs ( m * meta . Meta , usedVersion , newVersion int64 ) ( bool , error ) { if usedVersion == initialVersion || newVersion - usedVersion > maxNumberOfDiffsToLoad { return false , nil } if usedVersion > newVersion { return false , nil } var diffs [ ] * model . SchemaDiff for usedVersion < newVersion { usedVersion ++ diff , err := m . GetSchemaDiff ( usedVersion ) if err != nil { return false , errors . Trace ( err ) } if diff == nil { return false , nil } diffs = append ( diffs , diff ) } builder := infoschema . NewBuilder ( do . infoHandle ) . InitWithOldInfoSchema ( ) for _ , diff := range diffs { err := builder . ApplyDiff ( m , diff ) if err != nil { return false , errors . Trace ( err ) } } builder . Build ( ) return true , nil }
tryLoadSchemaDiffs tries to only load latest schema changes.
tryLoadSchemaDiffs tries to only load latest schema changes .
// If there isn't any used version, or used version is too old, we do full load. // When user use History Read feature, history schema will be loaded. // usedVersion may be larger than newVersion, full load is needed. // If diff is missing for any version between used and new version, we fall back to full reload.