code: private synchronized void initializeFatClient(String storeName, Properties storeClientProps) {
          // updates the coordinator metadata with recent stores and cluster xml
          updateCoordinatorMetadataWithLatestState();
  
          logger.info("Creating a Fat client for store: " + storeName);
          SocketStoreClientFactory fatClientFactory = getFatClientFactory(this.coordinatorConfig.getBootstrapURLs(),
                                                                          storeClientProps);
  
          if(this.fatClientMap == null) {
              this.fatClientMap = new HashMap<String, DynamicTimeoutStoreClient<ByteArray, byte[]>>();
          }
          DynamicTimeoutStoreClient<ByteArray, byte[]> fatClient = new DynamicTimeoutStoreClient<ByteArray, byte[]>(storeName,
                                                                                                                    fatClientFactory,
                                                                                                                    1,
                                                                                                                    this.coordinatorMetadata.getStoreDefs(),
                                                                                                                    this.coordinatorMetadata.getClusterXmlStr());
          this.fatClientMap.put(storeName, fatClient);
  
      }
docs: Initialize the fat client for the given store.
  
  1. Updates the coordinatorMetadata 2.Gets the new store configs from the
  config file 3.Creates a new @SocketStoreClientFactory 4. Subsequently
  caches the @StoreClient obtained from the factory.
  
  
  This is synchronized because if Coordinator Admin is already doing some
  change we want the AsyncMetadataVersionManager to wait.
  
  @param storeName