docs: async def _sync_revoc_for_proof(self, rr_id: str) -> None:
          """
          Pick up tails file reader handle for input revocation registry identifier.  If no symbolic
          link is present, get the revocation registry definition to retrieve its tails file hash,
          then find the tails file and link it.
  
          Raise AbsentTails for missing corresponding tails file.
  
          :param rr_id: revocation registry identifier
          """
  
          LOGGER.debug('HolderProver._sync_revoc_for_proof >>> rr_id: %s', rr_id)
  
          if not ok_rev_reg_id(rr_id):
              LOGGER.debug('HolderProver._sync_revoc_for_proof <!< Bad rev reg id %s', rr_id)
              raise BadIdentifier('Bad rev reg id {}'.format(rr_id))
  
          (cd_id, tag) = rev_reg_id2cred_def_id_tag(rr_id)
  
          try:
              json.loads(await self.get_cred_def(cd_id))
          except AbsentCredDef:
              LOGGER.debug(
                  'HolderProver._sync_revoc_for_proof <!< corrupt tails tree %s may be for another ledger',
                  self._dir_tails)
              raise AbsentCredDef('Corrupt tails tree {} may be for another ledger'.format(self._dir_tails))
          except ClosedPool:
              pass  # carry on, may be OK from cache only
  
          with REVO_CACHE.lock:
              revo_cache_entry = REVO_CACHE.get(rr_id, None)
              tails = revo_cache_entry.tails if revo_cache_entry else None
              if tails is None:  #  it's not yet set in cache
                  try:
                      tails = await Tails(self._dir_tails, cd_id, tag).open()
                  except AbsentTails:  # get hash from ledger and check for tails file
                      rr_def = json.loads(await self.get_rev_reg_def(rr_id))
                      tails_hash = rr_def['value']['tailsHash']
                      path_tails = join(Tails.dir(self._dir_tails, rr_id), tails_hash)
                      if not isfile(path_tails):
                          LOGGER.debug('HolderProver._sync_revoc_for_proof <!< No tails file present at %s', path_tails)
                          raise AbsentTails('No tails file present at {}'.format(path_tails))
                      Tails.associate(self._dir_tails, rr_id, tails_hash)
                      tails = await Tails(self._dir_tails, cd_id, tag).open()  # OK now since tails file present
  
                  if revo_cache_entry is None:
                      REVO_CACHE[rr_id] = RevoCacheEntry(None, tails)
                  else:
                      REVO_CACHE[rr_id].tails = tails
  
          LOGGER.debug('HolderProver._sync_revoc_for_proof <<<')