|
|
|
|
@ -852,13 +852,38 @@ func (rc *Client) GetDBSchema(dom *domain.Domain, dbName model.CIStr) (*model.DB
|
|
|
|
|
return info.SchemaByName(dbName)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CreateDatabase creates a database.
|
|
|
|
|
func (rc *Client) CreateDatabase(ctx context.Context, db *model.DBInfo) error {
|
|
|
|
|
// CreateDatabases creates databases. If the client has the db pool, it would create it.
|
|
|
|
|
func (rc *Client) CreateDatabases(ctx context.Context, dbs []*metautil.Database) error {
|
|
|
|
|
if rc.IsSkipCreateSQL() {
|
|
|
|
|
log.Info("skip create database", zap.Stringer("name", db.Name))
|
|
|
|
|
log.Info("skip create database")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(rc.dbPool) == 0 {
|
|
|
|
|
log.Info("create databases sequentially")
|
|
|
|
|
for _, db := range dbs {
|
|
|
|
|
err := rc.createDatabaseWithDBConn(ctx, db.Info, rc.db)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return errors.Trace(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.Info("create databases in db pool", zap.Int("pool size", len(rc.dbPool)))
|
|
|
|
|
eg, ectx := errgroup.WithContext(ctx)
|
|
|
|
|
workers := utils.NewWorkerPool(uint(len(rc.dbPool)), "DB DDL workers")
|
|
|
|
|
for _, db_ := range dbs {
|
|
|
|
|
db := db_
|
|
|
|
|
workers.ApplyWithIDInErrorGroup(eg, func(id uint64) error {
|
|
|
|
|
conn := rc.dbPool[id%uint64(len(rc.dbPool))]
|
|
|
|
|
return rc.createDatabaseWithDBConn(ectx, db.Info, conn)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return eg.Wait()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (rc *Client) createDatabaseWithDBConn(ctx context.Context, db *model.DBInfo, conn *DB) error {
|
|
|
|
|
log.Info("create database", zap.Stringer("name", db.Name))
|
|
|
|
|
|
|
|
|
|
if !rc.supportPolicy {
|
|
|
|
|
@ -868,12 +893,12 @@ func (rc *Client) CreateDatabase(ctx context.Context, db *model.DBInfo) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if db.PlacementPolicyRef != nil {
|
|
|
|
|
if err := rc.db.ensurePlacementPolicy(ctx, db.PlacementPolicyRef.Name, rc.policyMap); err != nil {
|
|
|
|
|
if err := conn.ensurePlacementPolicy(ctx, db.PlacementPolicyRef.Name, rc.policyMap); err != nil {
|
|
|
|
|
return errors.Trace(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rc.db.CreateDatabase(ctx, db)
|
|
|
|
|
return conn.CreateDatabase(ctx, db)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CreateTables creates multiple tables, and returns their rewrite rules.
|
|
|
|
|
|