A question about the judgement of unavailable ranges

I am studying cockroachdb source code recently and I notice that both metrics module and replicate queue will check whether a range is unavailable on their own.
However, for metrics module, It checks in this way:

unavailable = !desc.Replicas().CanMakeProgress(func(rDesc roachpb.ReplicaDescriptor) bool {
	_, live := livenessMap[rDesc.NodeID]
	return live

for replicate queue, It checks in anothor way:

// Avoid taking action if the range has too many dead replicas to make
// quorum.
voterReplicas := desc.Replicas().Voters()
liveVoterReplicas, deadVoterReplicas := rq.allocator.storePool.liveAndDeadReplicas(
	desc.RangeID, voterReplicas)
unavailable := !desc.Replicas().CanMakeProgress(func(rDesc roachpb.ReplicaDescriptor) bool {
	for _, inner := range liveVoterReplicas {
		if inner.ReplicaID == rDesc.ReplicaID {
			return true
	return false

I am confused about the different parameters liveFunc passed to the CanMakeProgress function and I want to know the reason.

Thanks in advance!

I’m confused by the former. Asking Tobi the author here: https://reviewable.io/reviews/cockroachdb/cockroach/39936#-M03VNWm1oh1clsHRjgD