class_docstr: MLMDConnectionManager manages the connections to MLMD.
  
  It can connect to multiple MLMD databases.
  For each MLMD database it connects, only one connection/channel will be
  created. The connections/channels can be distinguished by the "identifier" of
  the connection config.
  
  The connection sharing begins from the time the manager instance __enter__ and
  ends on the __exit__. Manager can __enter__ multiple times; in such case the
  outermost __enter__ and __exit__ pair matters.
code: def __exit__(
      self,
      exc_type: Optional[Type[Exception]] = None,
      exc_value: Optional[Exception] = None,
      exc_tb: Optional[types.TracebackType] = None,
  ) -> None:
      self._enter_count -= 1
      if not self._enter_count:
          self._exit_stack.close()
          self._mlmd_handle_by_config_id.clear()
  
file_path: tfx/tfx/orchestration/mlmd_connection_manager.py
imports: import contextlib
  import types
  from typing import Optional, Type, Union, cast
  from tfx.orchestration import metadata
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 6 for calling the MLMDConnectionManager obj's underlying member method code with example usage: obj.__exit__(exc_type, exc_value, exc_tb) without return types