add waitGroups for waiting finish all connects #131
Reference in New Issue
Block a user
No description provided.
Delete Branch "devstigneev/micro-server-tcp:issue_130"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
closes #130
https://pkg.go.dev/go.unistack.org/micro/v3/server#Options - там уже есть wg =)
глянь как сделано в грпц , там вроде было. нужно просто добавить грейсфул таймаут.
@@ -425,0 +435,4 @@}()// wait timeout or finish all connects<-ctx.Done()Тут мы ждем либо у нас концертны все закрылись и вызвался cancel()
либо ctx.Done выполнился по GracefulTimeout
если я использую time.Timer, не совсем смог прийти к решению, что я его в ручную остановил и мог без препятствий завершить метод
но возникает другая проблема, если Wait - залочился, то горутина с ней утекла
Нужна ли нам вообще ошибка от результата gracefullStop
@@ -473,0 +501,4 @@h.opts.Wait.Add(1)go func() {defer h.opts.Wait.Done()а тут дефер нужен вообще ? почему после hd.Serve(c)
просто не вызывать h.opts.Wait.Done()
теоретически, если hd.Serve может запаниковать?
то с дефиром вгДон исполниться
@@ -27,2 +29,4 @@registered boolinit boolwg sync.WaitGroupэто как я понимаю больше не нужно?
@@ -425,0 +443,4 @@case <-tm.C:return nilcase <-gctx.Done():return gctx.Err()тут везде нужно возвращать ошибку иначе ерргруппа будет висеть пока все горутины не закончатся
@@ -425,0 +429,4 @@done := make(chan struct{})go func() {h.opts.Wait.Wait()смотри, лучше сделать канал и если вейтгруппа кончилась- прямо там закрывать канал, тогда в селекте мы сразу попадем на нужный кейс
да, я прикинул потом, что закрытие нужно сместить