MCPcopy Create free account
hub / github.com/astercloud/aster / handleFailure

Method handleFailure

pkg/actor/system.go:538–566  ·  view source on GitHub ↗

handleFailure 处理 Actor 失败

(cell *actorCell, msg Message, err any)

Source from the content-addressed store, hash-verified

536
537// handleFailure 处理 Actor 失败
538func (s *System) handleFailure(cell *actorCell, msg Message, err any) {
539 supervisor := cell.supervisor
540 if supervisor == nil && cell.parent != nil {
541 // 使用父 Actor 的监督策略
542 s.actorsMu.RLock()
543 if parentCell, ok := s.actors[cell.parent.ID]; ok {
544 supervisor = parentCell.supervisor
545 }
546 s.actorsMu.RUnlock()
547 }
548
549 if supervisor == nil {
550 supervisor = DefaultSupervisorStrategy()
551 }
552
553 result := supervisor.HandleFailure(s, cell.pid, msg, err)
554
555 // 处理返回结果
556 switch r := result.(type) {
557 case DirectiveWithDelay:
558 // 延迟重启
559 time.AfterFunc(r.Delay, func() {
560 s.applyDirective(cell, r.Directive)
561 })
562 case Directive:
563 // 立即执行
564 s.applyDirective(cell, r)
565 }
566}
567
568// applyDirective 应用监督指令
569func (s *System) applyDirective(cell *actorCell, directive Directive) {

Callers 1

processMessageMethod · 0.95

Calls 3

applyDirectiveMethod · 0.95
HandleFailureMethod · 0.65

Tested by

no test coverage detected