diff options
| author | Konstantin Lebedev <lebedev_k@tochka.com> | 2021-06-15 18:12:39 +0500 |
|---|---|---|
| committer | Konstantin Lebedev <lebedev_k@tochka.com> | 2021-06-15 18:12:39 +0500 |
| commit | 6aa1a56ec87ca63f7a072eb6c9599e06fbb5ca9a (patch) | |
| tree | 2e894d711e7bff2e7e81043f2a00e88c34b685dd /weed/filer/abstract_sql | |
| parent | ebe971da2e12bc155819ba1e60f720513d0cfc20 (diff) | |
| download | seaweedfs-6aa1a56ec87ca63f7a072eb6c9599e06fbb5ca9a.tar.xz seaweedfs-6aa1a56ec87ca63f7a072eb6c9599e06fbb5ca9a.zip | |
avoid crashes Galera Cluster
https://github.com/chrislusf/seaweedfs/issues/2125
Diffstat (limited to 'weed/filer/abstract_sql')
| -rw-r--r-- | weed/filer/abstract_sql/abstract_sql_store.go | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/weed/filer/abstract_sql/abstract_sql_store.go b/weed/filer/abstract_sql/abstract_sql_store.go index bb8ced81a..26dff7fe7 100644 --- a/weed/filer/abstract_sql/abstract_sql_store.go +++ b/weed/filer/abstract_sql/abstract_sql_store.go @@ -10,6 +10,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" "strings" "sync" + "time" ) type SqlGenerator interface { @@ -261,7 +262,7 @@ func (store *AbstractSqlStore) DeleteEntry(ctx context.Context, fullpath util.Fu return nil } -func (store *AbstractSqlStore) DeleteFolderChildren(ctx context.Context, fullpath util.FullPath) error { +func (store *AbstractSqlStore) DeleteFolderChildren(ctx context.Context, fullpath util.FullPath, limit int64) error { db, bucket, shortPath, err := store.getTxOrDB(ctx, fullpath, true) if err != nil { @@ -279,18 +280,23 @@ func (store *AbstractSqlStore) DeleteFolderChildren(ctx context.Context, fullpat } } - glog.V(4).Infof("delete %s SQL %s %d", string(shortPath), store.GetSqlDeleteFolderChildren(bucket), util.HashStringToLong(string(shortPath))) - - res, err := db.ExecContext(ctx, store.GetSqlDeleteFolderChildren(bucket), util.HashStringToLong(string(shortPath)), string(shortPath)) - if err != nil { - return fmt.Errorf("deleteFolderChildren %s: %s", fullpath, err) - } + for { + glog.V(4).Infof("delete %s SQL %s %d", string(shortPath), store.GetSqlDeleteFolderChildren(bucket), util.HashStringToLong(string(shortPath))) + res, err := db.ExecContext(ctx, store.GetSqlDeleteFolderChildren(bucket), util.HashStringToLong(string(shortPath)), string(shortPath), limit) + if err != nil { + return fmt.Errorf("deleteFolderChildren %s: %s", fullpath, err) + } - _, err = res.RowsAffected() - if err != nil { - return fmt.Errorf("deleteFolderChildren %s but no rows affected: %s", fullpath, err) + rowCount, err := res.RowsAffected() + if err != nil { + return fmt.Errorf("deleteFolderChildren %s but no rows affected: %s", fullpath, err) + } + if rowCount < limit { + break + } + // to give the Galera Cluster a chance to breath + time.Sleep(time.Second) } - return nil } |
