<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _load(self, url):
 """ Load from remote, but check local file content to identify duplicate content. If local file is found with same hash then it is used with metadata from remote object to avoid fetching full content. :param url: :return: """

        self._logger.debug('Loading url %s into resource cache' % url)
        retriever = get_resource_retriever(url)
        content_path = os.path.join(self.path, self._hash_path(url))

        try:
            if url in self.metadata:
                headers = retriever.fetch(content_path, last_etag=self.metadata[url]['etag'], progress_bar=self.progress_bars)
                if headers is None:
                    # no update, return what is already loaded
                    self._logger.info('Cached %s is up-to-date. No data download needed' % url)
                    return self.metadata[url]
            else:
                headers = retriever.fetch(content_path, progress_bar=self.progress_bars)
                if headers is None:
                    raise Exception('Fetch of %s failed' % url)

            if 'etag' not in headers:
                # No Etag returned, so generate it
                headers['etag'] = fs_util.calc_file_md5(content_path)

            # Populate metadata from the headers
            self.metadata[url] = headers.copy()
            self.metadata[url]['content'] = content_path
            return self.metadata[url]
        except:
            self._logger.error('Failed getting resource: %s')

            # forcibly flush local entry if found
            if url in self.metadata:
                self.metadata.pop(url)
            raise
        finally:
            if url not in self.metadata:
                self._logger.debug('Cleaning up on failed load of %s' % url)
                # Cleanup on failure
                if content_path is not None and os.path.exists(content_path):
                    os.remove(content_path)