// Returns the resulting file or in case of extraction the destination // directory (for logging). static Try<string> fetchThroughCache( const FetcherInfo::Item& item, const Option<string>& cacheDirectory, const string& sandboxDirectory, const Option<string>& frameworksHome) { if (cacheDirectory.isNone() || cacheDirectory.get().empty()) { return Error("Cache directory not specified"); } if (!item.has_cache_filename() || item.cache_filename().empty()) { // This should never happen if this program is used by the Mesos // slave and could then be a CHECK. But other uses are possible. return Error("No cache file name for: " + item.uri().value()); } CHECK_NE(FetcherInfo::Item::BYPASS_CACHE, item.action()) << "Unexpected fetcher action selector"; if (item.action() == FetcherInfo::Item::DOWNLOAD_AND_CACHE) { LOG(INFO) << "Downloading into cache"; Try<Nothing> mkdir = os::mkdir(cacheDirectory.get()); if (mkdir.isError()) { return Error("Failed to create fetcher cache directory '" + cacheDirectory.get() + "': " + mkdir.error()); } Try<string> downloaded = download( item.uri().value(), path::join(cacheDirectory.get(), item.cache_filename()), frameworksHome); if (downloaded.isError()) { return Error(downloaded.error()); } } return fetchFromCache(item, cacheDirectory.get(), sandboxDirectory); }
// Returns the resulting file or in case of extraction the destination // directory (for logging). static Try<string> fetch( const FetcherInfo::Item& item, const Option<string>& cacheDirectory, const string& sandboxDirectory, const Option<string>& frameworksHome) { LOG(INFO) << "Fetching URI '" << item.uri().value() << "'"; if (item.action() == FetcherInfo::Item::BYPASS_CACHE) { return fetchBypassingCache( item.uri(), sandboxDirectory, frameworksHome); } return fetchThroughCache( item, cacheDirectory, sandboxDirectory, frameworksHome); }