docstr: Note this is for optimization only - it allows slow-initialization credentials to be
  reused across multiple threads and processes.
  
  Speed up applies mainly to the "no access key" path.
docstr_tok: ["Note","this","is","for","optimization","only","-","it","allows","slow-initialization","credentials","to","be","reused","across","multiple","threads","and","processes",".","Speed","up","applies","mainly","to","the","``","no","access","key","''","path","."]
code: def root_client(self):
      """Note this is for optimization only - it allows slow-initialization credentials to be
      reused across multiple threads and processes.
  
      Speed up applies mainly to the "no access key" path.
      """
      if self._root_client is None:
          self._root_client = _AzureRootClient(
              datastore_root=self.datastore_root,
              token=self._get_default_token(),
          )
      return self._root_client
  
imports: import json
  import os
  import shutil
  import uuid
  import time
  from concurrent.futures import as_completed
  from tempfile import mkdtemp
  from metaflow.datastore.datastore_storage import DataStoreStorage, CloseAfterUse
  from metaflow.exception import MetaflowInternalError
  from metaflow.metaflow_config import DATASTORE_SYSROOT_AZURE, ARTIFACT_LOCALROOT, AZURE_STORAGE_WORKLOAD_TYPE
  from metaflow.plugins.azure.azure_utils import check_azure_deps, process_exception, handle_exceptions, create_static_token_credential, parse_azure_full_path
  from metaflow.plugins.azure.blob_service_client_factory import get_azure_blob_service_client
  from metaflow.plugins.storage_executor import StorageExecutor, handle_executor_exceptions
label_desc: Use image node_id 3 for calling the AzureStorage obj's underlying member method code with example usage: obj.root_client() and returns: self