class_docstr: Lock class for synchronizing processes for NFSv2 or later.
  
  On acquiring the lock, link system call is called to create an exclusive file. The file is
  deleted when the lock is released. In NFS environments prior to NFSv3, use this instead of
  :class:`~optuna.storages.JournalFileOpenLock`
  
  Args:
      filepath:
          The path of the file whose race condition must be protected.
class_docstr_tok: ["Lock","class","for","synchronizing","processes","for","NFSv2","or","later",".","On","acquiring","the","lock",",","link","system","call","is","called","to","create","an","exclusive","file",".","The","file","is","deleted","when","the","lock","is","released",".","In","NFS","environments","prior","to","NFSv3",",","use","this","instead","of",":","class",":","`","~optuna.storages.JournalFileOpenLock","`","Args",":","filepath",":","The","path","of","the","file","whose","race","condition","must","be","protected","."]
docstr: Release a lock by removing the symbolic link.
docstr_tok: ["Release","a","lock","by","removing","the","symbolic","link","."]
code: def release(self) -> None:
      """Release a lock by removing the symbolic link."""
  
      try:
          os.rename(self._lock_file, self._lock_rename_file)
          os.unlink(self._lock_rename_file)
      except OSError:
          raise RuntimeError("Error: did not possess lock")
      except BaseException:
          os.unlink(self._lock_rename_file)
          raise
  
imports: import abc
  from contextlib import contextmanager
  import errno
  import json
  import os
  import time
  from typing import Any
  from typing import Dict
  from typing import Iterator
  from typing import List
  from typing import Optional
  import uuid
  from optuna.storages._journal.base import BaseJournalLogStorage
label_desc: Use image node_id 3 for calling the JournalFileSymlinkLock obj's underlying member method code with example usage: obj.release() without return types