88
99 ydb "github.com/ydb-platform/ydb-go-sdk/v3"
1010 "github.com/ydb-platform/ydb-go-sdk/v3/internal/errors"
11+ "github.com/ydb-platform/ydb-go-sdk/v3/retry"
1112 "github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1213 "github.com/ydb-platform/ydb-go-sdk/v3/table"
1314)
@@ -66,14 +67,20 @@ func RemoveRecursive(ctx context.Context, db ydb.Connection, pathToRemove string
6667 fullSysTablePath := path .Join (db .Name (), sysTable )
6768 var list func (int , string ) error
6869 list = func (i int , p string ) error {
69- dir , err := db .Scheme ().ListDirectory (ctx , p )
70+ var dir scheme.Directory
71+ var err error
72+ err = retry .Retry (ctx , true , func (ctx context.Context ) (err error ) {
73+ dir , err = db .Scheme ().ListDirectory (ctx , p )
74+ return err
75+ })
7076 var opErr * errors.OpError
7177 if errors .As (err , & opErr ) && opErr .Reason == errors .StatusSchemeError {
7278 return nil
7379 }
7480 if err != nil {
7581 return err
7682 }
83+
7784 for _ , child := range dir .Children {
7885 pt := path .Join (p , child .Name )
7986 if pt == fullSysTablePath {
@@ -84,7 +91,10 @@ func RemoveRecursive(ctx context.Context, db ydb.Connection, pathToRemove string
8491 if err = list (i + 1 , pt ); err != nil {
8592 return err
8693 }
87- if err = db .Scheme ().RemoveDirectory (ctx , pt ); err != nil {
94+ err = retry .Retry (ctx , true , func (ctx context.Context ) (err error ) {
95+ return db .Scheme ().RemoveDirectory (ctx , pt )
96+ })
97+ if err != nil {
8898 return err
8999 }
90100
0 commit comments