MCPcopy Create free account
hub / github.com/GoEdgeLab/EdgeNode / Fail

Method Fail

internal/nodes/origin_state_manager.go:130–174  ·  view source on GitHub ↗

Fail 添加失败的源站

(origin *serverconfigs.OriginConfig, tlsHost string, reverseProxy *serverconfigs.ReverseProxyConfig, callback func())

Source from the content-addressed store, hash-verified

128
129// Fail 添加失败的源站
130func (this *OriginStateManager) Fail(origin *serverconfigs.OriginConfig, tlsHost string, reverseProxy *serverconfigs.ReverseProxyConfig, callback func()) {
131 if origin == nil || origin.Id <= 0 {
132 return
133 }
134
135 this.locker.Lock()
136 state, ok := this.stateMap[origin.Id]
137 var timestamp = time.Now().Unix()
138 if ok {
139 if state.UpdatedAt < timestamp-300 { // N 分钟之后重新计数
140 state.CountFails = 0
141 state.Config.IsOk = true
142 }
143
144 state.TLSHost = tlsHost
145 state.CountFails++
146 state.Config = origin
147 state.ReverseProxy = reverseProxy
148 state.UpdatedAt = timestamp
149
150 if origin.IsOk {
151 origin.IsOk = state.CountFails < 5 // 超过 N 次之后认为是异常
152
153 if !origin.IsOk {
154 if callback != nil {
155 callback()
156 }
157 }
158 }
159 } else {
160 // 同时最多监控 N 个源站地址
161 if len(this.stateMap) < maxOriginStates {
162 this.stateMap[origin.Id] = &OriginState{
163 CountFails: 1,
164 Config: origin,
165 TLSHost: tlsHost,
166 ReverseProxy: reverseProxy,
167 UpdatedAt: timestamp,
168 }
169 }
170
171 origin.IsOk = true
172 }
173 this.locker.Unlock()
174}
175
176// Success 添加成功的源站
177func (this *OriginStateManager) Success(origin *serverconfigs.OriginConfig, callback func()) {

Callers 5

connectOriginMethod · 0.80
doWebsocketMethod · 0.80
connectOriginMethod · 0.80
doOriginRequestMethod · 0.80

Calls 3

UnixMethod · 0.80
LockMethod · 0.45
UnlockMethod · 0.45

Tested by 1