code: func (pvIndex *persistentVolumeOrderedIndex) findByClaim(claim *v1.PersistentVolumeClaim, delayBinding bool) (*v1.PersistentVolume, error) {
  	// PVs are indexed by their access modes to allow easier searching.  Each
  	// index is the string representation of a set of access modes. There is a
  	// finite number of possible sets and PVs will only be indexed in one of
  	// them (whichever index matches the PV's modes).
  	//
  	// A request for resources will always specify its desired access modes.
  	// Any matching PV must have at least that number of access modes, but it
  	// can have more.  For example, a user asks for ReadWriteOnce but a GCEPD
  	// is available, which is ReadWriteOnce+ReadOnlyMany.
  	//
  	// Searches are performed against a set of access modes, so we can attempt
  	// not only the exact matching modes but also potential matches (the GCEPD
  	// example above).
  	allPossibleModes := pvIndex.allPossibleMatchingAccessModes(claim.Spec.AccessModes)
  
  	for _, modes := range allPossibleModes {
  		volumes, err := pvIndex.listByAccessModes(modes)
  		if err != nil {
  			return nil, err
  		}
  
  		bestVol, err := findMatchingVolume(claim, volumes, nil /* node for topology binding*/, nil /* exclusion map */, delayBinding)
  		if err != nil {
  			return nil, err
  		}
  
  		if bestVol != nil {
  			return bestVol, nil
  		}
  	}
  	return nil, nil
  }
docs: // find returns the nearest PV from the ordered list or nil if a match is not found