mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 13:02:33 +02:00
fix reload stuck
This commit is contained in:
parent
2fe0b888bd
commit
cd74b76483
6 changed files with 23 additions and 17 deletions
|
@ -46,7 +46,7 @@ func newWaker(parent task.Parent, entry route.Entry, rp *gphttp.ReverseProxy, st
|
|||
rp: rp,
|
||||
stream: stream,
|
||||
}
|
||||
task := parent.Subtask("idlewatcher")
|
||||
task := parent.Subtask("idlewatcher." + entry.TargetName())
|
||||
watcher, err := registerWatcher(task, entry, waker)
|
||||
if err != nil {
|
||||
return nil, E.Errorf("register watcher: %w", err)
|
||||
|
@ -117,6 +117,7 @@ func (w *Watcher) Uptime() time.Duration {
|
|||
return 0
|
||||
}
|
||||
|
||||
// Status implements health.HealthMonitor.
|
||||
func (w *Watcher) Status() health.Status {
|
||||
status := w.getStatusUpdateReady()
|
||||
if w.metric != nil {
|
||||
|
@ -125,7 +126,6 @@ func (w *Watcher) Status() health.Status {
|
|||
return status
|
||||
}
|
||||
|
||||
// Status implements health.HealthMonitor.
|
||||
func (w *Watcher) getStatusUpdateReady() health.Status {
|
||||
if !w.ContainerRunning {
|
||||
return health.StatusNapping
|
||||
|
|
|
@ -32,7 +32,7 @@ func setup() {
|
|||
return
|
||||
}
|
||||
|
||||
t := task.RootTask("error_page", true)
|
||||
t := task.RootTask("error_page", false)
|
||||
dirWatcher = W.NewDirectoryWatcher(t, errPagesBasePath)
|
||||
loadContent()
|
||||
go watchDir()
|
||||
|
|
|
@ -83,7 +83,7 @@ func (r *HTTPRoute) Start(parent task.Parent) E.Error {
|
|||
|
||||
switch {
|
||||
case entry.UseIdleWatcher(r):
|
||||
waker, err := idlewatcher.NewHTTPWaker(r.task, r.ReverseProxyEntry, r.rp)
|
||||
waker, err := idlewatcher.NewHTTPWaker(parent, r.ReverseProxyEntry, r.rp)
|
||||
if err != nil {
|
||||
r.task.Finish(err)
|
||||
return err
|
||||
|
@ -144,13 +144,13 @@ func (r *HTTPRoute) Start(parent task.Parent) E.Error {
|
|||
r.addToLoadBalancer(parent)
|
||||
} else {
|
||||
routes.SetHTTPRoute(r.TargetName(), r)
|
||||
r.task.OnFinished("entrypoint_remove_route", func() {
|
||||
r.task.OnCancel("entrypoint_remove_route", func() {
|
||||
routes.DeleteHTTPRoute(r.TargetName())
|
||||
})
|
||||
}
|
||||
|
||||
if common.PrometheusEnabled {
|
||||
r.task.OnFinished("metrics_cleanup", r.rp.UnregisterMetrics)
|
||||
r.task.OnCancel("metrics_cleanup", r.rp.UnregisterMetrics)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -108,9 +108,6 @@ func (p *Provider) startRoute(parent task.Parent, r *R.Route) E.Error {
|
|||
}
|
||||
|
||||
p.routes.Store(r.Entry.Alias, r)
|
||||
r.Task().OnFinished("provider_remove_route", func() {
|
||||
p.routes.Delete(r.Entry.Alias)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,15 @@ func GetStreamRoutes() F.Map[string, types.StreamRoute] {
|
|||
return streamRoutes
|
||||
}
|
||||
|
||||
func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) {
|
||||
r, ok := httpRoutes.Load(alias)
|
||||
if ok {
|
||||
return r, true
|
||||
}
|
||||
// try find with exact match
|
||||
return httpRoutes.Load(host)
|
||||
}
|
||||
|
||||
func GetHTTPRoute(alias string) (types.HTTPRoute, bool) {
|
||||
return httpRoutes.Load(alias)
|
||||
}
|
||||
|
@ -41,3 +50,8 @@ func DeleteHTTPRoute(alias string) {
|
|||
func DeleteStreamRoute(alias string) {
|
||||
streamRoutes.Delete(alias)
|
||||
}
|
||||
|
||||
func TestClear() {
|
||||
httpRoutes = F.NewMapOf[string, types.HTTPRoute]()
|
||||
streamRoutes = F.NewMapOf[string, types.StreamRoute]()
|
||||
}
|
||||
|
|
|
@ -55,14 +55,13 @@ func (r *StreamRoute) Start(parent task.Parent) E.Error {
|
|||
|
||||
r.task = parent.Subtask("stream." + r.TargetName())
|
||||
r.Stream = NewStream(r)
|
||||
|
||||
parent.OnCancel("finish", func() {
|
||||
r.task.Finish(nil)
|
||||
})
|
||||
|
||||
switch {
|
||||
case entry.UseIdleWatcher(r):
|
||||
waker, err := idlewatcher.NewStreamWaker(r.task, r.StreamEntry, r.Stream)
|
||||
waker, err := idlewatcher.NewStreamWaker(parent, r.StreamEntry, r.Stream)
|
||||
if err != nil {
|
||||
r.task.Finish(err)
|
||||
return err
|
||||
|
@ -88,7 +87,7 @@ func (r *StreamRoute) Start(parent task.Parent) E.Error {
|
|||
return E.From(err)
|
||||
}
|
||||
|
||||
r.task.OnFinished("close_stream", func() {
|
||||
r.task.OnCancel("close_stream", func() {
|
||||
if err := r.Stream.Close(); err != nil {
|
||||
E.LogError("close stream failed", err, &r.l)
|
||||
}
|
||||
|
@ -107,7 +106,7 @@ func (r *StreamRoute) Start(parent task.Parent) E.Error {
|
|||
go r.acceptConnections()
|
||||
|
||||
routes.SetStreamRoute(r.TargetName(), r)
|
||||
r.task.OnFinished("entrypoint_remove_route", func() {
|
||||
r.task.OnCancel("entrypoint_remove_route", func() {
|
||||
routes.DeleteStreamRoute(r.TargetName())
|
||||
})
|
||||
return nil
|
||||
|
@ -144,14 +143,10 @@ func (r *StreamRoute) acceptConnections() {
|
|||
if conn == nil {
|
||||
panic("connection is nil")
|
||||
}
|
||||
connTask := r.task.Subtask("connection")
|
||||
go func() {
|
||||
err := r.Stream.Handle(conn)
|
||||
if err != nil && !errors.Is(err, context.Canceled) {
|
||||
E.LogError("handle connection error", err, &r.l)
|
||||
connTask.Finish(err)
|
||||
} else {
|
||||
connTask.Finish("closed")
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue