code: def WatchMetadata(
        self, handler, metadata_key='', recursive=True, timeout=None):
      
      while True:
        response = self._HandleMetadataUpdate(
            metadata_key=metadata_key, recursive=recursive, wait=True,
            timeout=timeout)
        try:
          handler(response)
        except Exception as e:
          self.logger.exception('Exception calling the response handler. %s.', e)
docs: Watch for changes to the contents of the metadata server.
  
      Args:
        handler: callable, a function to call with the updated metadata contents.
        metadata_key: string, the metadata key to watch for changes.
        recursive: bool, True if we should recursively watch for metadata changes.
        timeout: int, timeout in seconds for returning metadata output.