code: func (f *FailFilter) Filter(nodes []Node) []Node {
  	if len(nodes) <= 1 || f.MaxFails <= 0 {
  		return nodes
  	}
  	nl := []Node{}
  	for i := range nodes {
  		marker := &failMarker{}
  		if nil != nodes[i].marker {
  			marker = nodes[i].marker.Clone()
  		}
  		// log.Logf("%s: %d/%d %v/%v", nodes[i], marker.failCount, f.MaxFails, marker.failTime, f.FailTimeout)
  		if marker.failCount < uint32(f.MaxFails) ||
  			time.Since(time.Unix(marker.failTime, 0)) >= f.FailTimeout {
  			nl = append(nl, nodes[i])
  		}
  	}
  	return nl
  }
docs: // Filter filters nodes.