instance updates, including:

* permdisable instance on 6 failures
* restore in proper state on db load
This commit is contained in:
Jeffrey Paul 2020-04-09 03:06:52 -07:00
parent 8dbd92abbd
commit 3d98a37374

View File

@ -62,6 +62,10 @@ func New(options ...func(i *Instance)) *Instance {
opt(i) opt(i)
} }
if i.InitialFSMState == "FETCHING" {
i.InitialFSMState = "READY_FOR_TOOTFETCH"
}
i.FSM = fsm.NewFSM( i.FSM = fsm.NewFSM(
i.InitialFSMState, i.InitialFSMState,
fsm.Events{ fsm.Events{
@ -75,11 +79,13 @@ func New(options ...func(i *Instance)) *Instance {
{Name: "EARLY_FETCH_ERROR", Src: []string{"FETCHING_NODEINFO_URL", "PRE_NODEINFO_FETCH", "FETCHING_NODEINFO"}, Dst: "EARLY_ERROR"}, {Name: "EARLY_FETCH_ERROR", Src: []string{"FETCHING_NODEINFO_URL", "PRE_NODEINFO_FETCH", "FETCHING_NODEINFO"}, Dst: "EARLY_ERROR"},
{Name: "TOOT_FETCH_ERROR", Src: []string{"FETCHING"}, Dst: "TOOT_FETCH_ERROR"}, {Name: "TOOT_FETCH_ERROR", Src: []string{"FETCHING"}, Dst: "TOOT_FETCH_ERROR"},
{Name: "TOOTS_FETCHED", Src: []string{"FETCHING"}, Dst: "READY_FOR_TOOTFETCH"}, {Name: "TOOTS_FETCHED", Src: []string{"FETCHING"}, Dst: "READY_FOR_TOOTFETCH"},
{Name: "DISABLEMENT", Src: []string{"WEIRD_NODE", "EARLY_ERROR", "TOOT_FETCH_ERROR"}, Dst: "DISABLED"},
}, },
fsm.Callbacks{ fsm.Callbacks{
"enter_state": func(e *fsm.Event) { i.fsmEnterState(e) }, "enter_state": func(e *fsm.Event) { i.fsmEnterState(e) },
}, },
) )
return i return i
} }
@ -125,8 +131,18 @@ func (i *Instance) Unlock() {
func (i *Instance) bumpFetchError() { func (i *Instance) bumpFetchError() {
i.Lock() i.Lock()
probablyDead := i.ConsecutiveErrorCount > 3 probablyDead := i.ConsecutiveErrorCount > 3
shouldDisable := i.ConsecutiveErrorCount > 6
i.Unlock() i.Unlock()
if shouldDisable {
// auf wiedersehen, felicia
i.Lock()
i.Disabled = true
i.Unlock()
i.Event("DISABLEMENT")
return
}
if probablyDead { if probablyDead {
// if three consecutive fetch errors happen, only try once per day: // if three consecutive fetch errors happen, only try once per day:
i.setNextFetchAfter(instancePersistentErrorInterval) i.setNextFetchAfter(instancePersistentErrorInterval)