in Sources/DistributedActors/Cluster/SWIM/SWIMActorShell.swift [220:268]
func sendPing(
to target: SWIMPeer,
payload: SWIM.GossipPayload,
pingRequestOrigin: SWIMPingRequestOriginPeer?,
pingRequestSequenceNumber: SWIM.SequenceNumber?,
timeout: DispatchTimeInterval,
sequenceNumber: SWIM.SequenceNumber,
context: MyselfContext
) {
let payload = self.swim.makeGossipPayload(to: target)
context.log.debug("Sending ping", metadata: self.swim.metadata([
"swim/target": "\(target)",
"swim/gossip/payload": "\(payload)",
"swim/timeout": "\(timeout)",
]))
let pingSentAt = DispatchTime.now()
self.metrics.shell.messageOutboundCount.increment()
target.ping(payload: payload, timeout: timeout, sequenceNumber: sequenceNumber, context: context) { result in
switch result {
case .success(let pingResponse):
self.metrics.shell.pingResponseTime.recordInterval(since: pingSentAt)
self.handlePingResponse(
response: pingResponse,
pingRequestOrigin: pingRequestOrigin,
pingRequestSequenceNumber: pingRequestSequenceNumber,
context: context
)
case .failure(let error):
context.log.debug(".ping resulted in error", metadata: self.swim.metadata([
"swim/ping/target": "\(target)",
"swim/ping/sequenceNumber": "\(sequenceNumber)",
"error": "\(error)",
]))
self.handlePingResponse(
response: .timeout(
target: target,
pingRequestOrigin: pingRequestOrigin,
timeout: timeout,
sequenceNumber: sequenceNumber
),
pingRequestOrigin: pingRequestOrigin,
pingRequestSequenceNumber: pingRequestSequenceNumber,
context: context
)
}
}
}