diff --git a/controller/handler_ctrl/circuit_confirmation.go b/controller/handler_ctrl/circuit_confirmation.go index 4d9cd2a05..12f4ca05a 100644 --- a/controller/handler_ctrl/circuit_confirmation.go +++ b/controller/handler_ctrl/circuit_confirmation.go @@ -39,18 +39,19 @@ func (self *circuitConfirmationHandler) ContentType() int32 { } func (self *circuitConfirmationHandler) HandleReceive(msg *channel.Message, _ channel.Channel) { - logrus.Infof("received circuit confirmation request from [r/%s]", self.r.Id) + log := logrus.WithField("routerId", self.r.Id) + log.Info("received circuit confirmation request") confirm := &ctrl_pb.CircuitConfirmation{} if err := proto.Unmarshal(msg.Body, confirm); err == nil { for _, circuitId := range confirm.CircuitIds { - if _, found := self.n.GetCircuit(circuitId); !found { - go self.sendUnroute(circuitId) + if circuit, found := self.n.GetCircuit(circuitId); found && circuit.HasRouter(self.r) { + log.WithField("circuitId", circuitId).Debug("circuit found, ignoring") } else { - logrus.Debugf("[s/%s] found, ignoring", circuitId) + go self.sendUnroute(circuitId) } } } else { - logrus.Errorf("error unmarshaling circuit confirmation from [r/%s] (%v)", self.r.Id, err) + log.WithError(err).Error("error unmarshalling circuit confirmation") } } diff --git a/controller/network/circuit.go b/controller/network/circuit.go index ab76dd947..0beef8907 100644 --- a/controller/network/circuit.go +++ b/controller/network/circuit.go @@ -42,6 +42,18 @@ func (self *Circuit) latency() int64 { return latency } +func (self *Circuit) HasRouter(r *Router) bool { + if self == nil || self.Path == nil { + return false + } + for _, node := range self.Path.Nodes { + if node.Id == r.Id { + return true + } + } + return false +} + type circuitController struct { circuits cmap.ConcurrentMap // map[string]*Circuit idGenerator idgen.Generator