code: async def _sync_revoc(self, rr_id: str, rr_size: int = None) -> None:
          
  
          LOGGER.debug('Issuer._sync_revoc >>> rr_id: %s, rr_size: %s', rr_id, rr_size)
  
          (cd_id, tag) = rev_reg_id2cred_def_id__tag(rr_id)
  
          try:
              await self.get_cred_def(cd_id)
          except AbsentCredDef:
              LOGGER.debug(
                  'Issuer._sync_revoc: <!< tails tree %s may be for another ledger; no cred def found on %s',
                  self._dir_tails,
                  cd_id)
              raise AbsentCredDef('Tails tree {} may be for another ledger; no cred def found on {}'.format(
                  self._dir_tails,
                  cd_id))
  
          with REVO_CACHE.lock:
              revo_cache_entry = REVO_CACHE.get(rr_id, None)
              tails = None if revo_cache_entry is None else revo_cache_entry.tails
              if tails is None:  #  it's a new revocation registry, or not yet set in cache
                  try:
                      tails = await Tails(self._dir_tails, cd_id, tag).open()
                  except AbsentTails:
                      await self._create_rev_reg(rr_id, rr_size)   # it's a new revocation registry
                      tails = await Tails(self._dir_tails, cd_id, tag).open()  # symlink should exist now
  
                  if revo_cache_entry is None:
                      REVO_CACHE[rr_id] = RevoCacheEntry(None, tails)
                  else:
                      REVO_CACHE[rr_id].tails = tails
  
          LOGGER.debug('Issuer._sync_revoc <<<')
docs: Create revoc registry if need be for input revocation registry identifier;
          open and cache tails file reader.
  
          :param rr_id: revocation registry identifier
          :param rr_size: if new revocation registry necessary, its size (default as per _create_rev_reg())