add waitGroups for waiting finish all connects #131
Loading…
x
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 bool
init bool
wg sync.WaitGroup
это как я понимаю больше не нужно?
@ -425,0 +443,4 @@
case <-tm.C:
return nil
case <-gctx.Done():
return gctx.Err()
тут везде нужно возвращать ошибку иначе ерргруппа будет висеть пока все горутины не закончатся
@ -425,0 +429,4 @@
done := make(chan struct{})
go func() {
h.opts.Wait.Wait()
смотри, лучше сделать канал и если вейтгруппа кончилась- прямо там закрывать канал, тогда в селекте мы сразу попадем на нужный кейс
да, я прикинул потом, что закрытие нужно сместить