fix: support account creation on pxc
This commit is contained in:
@@ -1859,6 +1859,9 @@ func (a *adapter) UserCreate(user *t.User) error {
|
||||
func lockUserAccountNoSequence(ctx context.Context, tx *sqlx.Tx) (func(), error) {
|
||||
var locked sql.NullInt64
|
||||
if err := tx.QueryRowContext(ctx, "SELECT GET_LOCK(CONCAT(DATABASE(), ':im_users_account_no'), 10)").Scan(&locked); err != nil {
|
||||
if isPXCStrictModeNamedLockError(err) {
|
||||
return func() {}, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if !locked.Valid || locked.Int64 != 1 {
|
||||
@@ -5105,6 +5108,20 @@ func isIDOutOfRange(err error) bool {
|
||||
return ok && myerr.Number == 1264 && strings.Contains(strings.ToLower(myerr.Message), "id")
|
||||
}
|
||||
|
||||
func isPXCStrictModeNamedLockError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
myerr, ok := err.(*ms.MySQLError)
|
||||
if !ok || myerr.Number != 1105 {
|
||||
return false
|
||||
}
|
||||
msg := strings.ToLower(myerr.Message)
|
||||
return strings.Contains(msg, "percona-xtradb-cluster") &&
|
||||
strings.Contains(msg, "pxc_strict_mode") &&
|
||||
(strings.Contains(msg, "get_lock") || strings.Contains(msg, "release_lock"))
|
||||
}
|
||||
|
||||
func mysqlDefaultString(value, fallback string) string {
|
||||
if strings.TrimSpace(value) == "" {
|
||||
return fallback
|
||||
|
||||
Reference in New Issue
Block a user