func sendPing(node *Node, target string, timeout time.Duration) (*ping, error) {
	changes, bumpPiggybackCounters := node.disseminator.IssueAsSender()
	res, err := sendPingWithChanges(node, target, changes, timeout)
	if err != nil {
		return res, err
	}
	bumpPiggybackCounters()
	return res, err
}
sendPing sends a ping to target node that times out after timeout
package swim
import (
	"errors"
	"time"
	log "github.com/uber-common/bark"
	"github.com/uber/ringpop-go/logging"
	"github.com/uber/ringpop-go/shared"
	"github.com/uber/tchannel-go/json"
)
type ping struct {
	Changes           []Change `json:"changes"`
	Checksum          uint32   `json:"checksum"`
	Source            string   `json:"source"`
	SourceIncarnation int64    `json:"sourceIncarnationNumber"`
	App               string   `json:"app"`
}