async def _sync_revoc(self, rr_id: str) -> None:
LOGGER.debug('<STR_LIT>', rr_id)<EOL>(cd_id, tag) = rev_reg_id2cred_def_id__tag(rr_id)<EOL>try:<EOL><INDENT>json.loads(await self.get_cred_def(cd_id))<EOL><DEDENT>except AbsentCredDef:<EOL><INDENT>LOGGER.debug(<EOL>'<STR_LIT>', self._dir_tails)<EOL>raise AbsentCredDef('<STR_LIT>'.format(self._dir_tails))<EOL><DEDENT>except ClosedPool:<EOL><INDENT>pass  <EOL><DEDENT>with REVO_CACHE.lock:<EOL><INDENT>revo_cache_entry = REVO_CACHE.get(rr_id, None)<EOL>tails = revo_cache_entry.tails if revo_cache_entry else None<EOL>if tails is None:  <EOL><INDENT>try:<EOL><INDENT>tails = await Tails(self._dir_tails, cd_id, tag).open()<EOL><DEDENT>except AbsentTails:  <EOL><INDENT>rrdef = json.loads(await self._get_rev_reg_def(rr_id))<EOL>tails_hash = rrdef['<STR_LIT:value>']['<STR_LIT>']<EOL>path_tails = join(Tails.dir(self._dir_tails, rr_id), tails_hash)<EOL>if not isfile(path_tails):<EOL><INDENT>LOGGER.debug('<STR_LIT>', path_tails)<EOL>raise AbsentTails('<STR_LIT>'.format(path_tails))<EOL><DEDENT>Tails.associate(self._dir_tails, rr_id, tails_hash)<EOL>tails = await Tails(self._dir_tails, cd_id, tag).open()  <EOL><DEDENT>if revo_cache_entry is None:<EOL><INDENT>REVO_CACHE[rr_id] = RevoCacheEntry(None, tails)<EOL><DEDENT>else:<EOL><INDENT>REVO_CACHE[rr_id].tails = tails<EOL><DEDENT><DEDENT><DEDENT>LOGGER.debug('<STR_LIT>')<EOL>
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