S3BinaryCacheStore: Set Content-Type
This is necessary for serving log files to browsers.
This commit is contained in:
		
							parent
							
								
									8b1d65bebe
								
							
						
					
					
						commit
						45c70382ac
					
				
					 5 changed files with 25 additions and 13 deletions
				
			
		|  | @ -97,7 +97,7 @@ void BinaryCacheStore::init() | ||||||
| 
 | 
 | ||||||
|     auto cacheInfo = getFile(cacheInfoFile); |     auto cacheInfo = getFile(cacheInfoFile); | ||||||
|     if (!cacheInfo) { |     if (!cacheInfo) { | ||||||
|         upsertFile(cacheInfoFile, "StoreDir: " + storeDir + "\n"); |         upsertFile(cacheInfoFile, "StoreDir: " + storeDir + "\n", "text/x-nix-cache-info"); | ||||||
|     } else { |     } else { | ||||||
|         for (auto & line : tokenizeString<Strings>(*cacheInfo, "\n")) { |         for (auto & line : tokenizeString<Strings>(*cacheInfo, "\n")) { | ||||||
|             size_t colon = line.find(':'); |             size_t colon = line.find(':'); | ||||||
|  | @ -224,7 +224,7 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         upsertFile(storePathToHash(info.path) + ".ls.xz", *compress("xz", jsonOut.str())); |         upsertFile(storePathToHash(info.path) + ".ls.xz", *compress("xz", jsonOut.str()), "application/x-nix-nar-listing"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     else { |     else { | ||||||
|  | @ -254,7 +254,7 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str | ||||||
|            ""); |            ""); | ||||||
|     if (repair || !fileExists(narInfo->url)) { |     if (repair || !fileExists(narInfo->url)) { | ||||||
|         stats.narWrite++; |         stats.narWrite++; | ||||||
|         upsertFile(narInfo->url, *narCompressed); |         upsertFile(narInfo->url, *narCompressed, "application/x-nix-nar"); | ||||||
|     } else |     } else | ||||||
|         stats.narWriteAverted++; |         stats.narWriteAverted++; | ||||||
| 
 | 
 | ||||||
|  | @ -265,7 +265,7 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str | ||||||
|     /* Atomically write the NAR info file.*/ |     /* Atomically write the NAR info file.*/ | ||||||
|     if (secretKey) narInfo->sign(*secretKey); |     if (secretKey) narInfo->sign(*secretKey); | ||||||
| 
 | 
 | ||||||
|     upsertFile(narInfoFile, narInfo->to_string()); |     upsertFile(narInfoFile, narInfo->to_string(), "text/x-nix-narinfo"); | ||||||
| 
 | 
 | ||||||
|     auto hashPart = storePathToHash(narInfo->path); |     auto hashPart = storePathToHash(narInfo->path); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,7 +31,9 @@ public: | ||||||
| 
 | 
 | ||||||
|     virtual bool fileExists(const std::string & path) = 0; |     virtual bool fileExists(const std::string & path) = 0; | ||||||
| 
 | 
 | ||||||
|     virtual void upsertFile(const std::string & path, const std::string & data) = 0; |     virtual void upsertFile(const std::string & path, | ||||||
|  |         const std::string & data, | ||||||
|  |         const std::string & mimeType) = 0; | ||||||
| 
 | 
 | ||||||
|     /* Return the contents of the specified file, or null if it
 |     /* Return the contents of the specified file, or null if it
 | ||||||
|        doesn't exist. */ |        doesn't exist. */ | ||||||
|  |  | ||||||
|  | @ -64,7 +64,9 @@ protected: | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void upsertFile(const std::string & path, const std::string & data) override |     void upsertFile(const std::string & path, | ||||||
|  |         const std::string & data, | ||||||
|  |         const std::string & mimeType) override | ||||||
|     { |     { | ||||||
|         throw UploadToHTTP("uploading to an HTTP binary cache is not supported"); |         throw UploadToHTTP("uploading to an HTTP binary cache is not supported"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -30,7 +30,9 @@ protected: | ||||||
| 
 | 
 | ||||||
|     bool fileExists(const std::string & path) override; |     bool fileExists(const std::string & path) override; | ||||||
| 
 | 
 | ||||||
|     void upsertFile(const std::string & path, const std::string & data) override; |     void upsertFile(const std::string & path, | ||||||
|  |         const std::string & data, | ||||||
|  |         const std::string & mimeType) override; | ||||||
| 
 | 
 | ||||||
|     void getFile(const std::string & path, |     void getFile(const std::string & path, | ||||||
|         std::function<void(std::shared_ptr<std::string>)> success, |         std::function<void(std::shared_ptr<std::string>)> success, | ||||||
|  | @ -83,7 +85,9 @@ bool LocalBinaryCacheStore::fileExists(const std::string & path) | ||||||
|     return pathExists(binaryCacheDir + "/" + path); |     return pathExists(binaryCacheDir + "/" + path); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void LocalBinaryCacheStore::upsertFile(const std::string & path, const std::string & data) | void LocalBinaryCacheStore::upsertFile(const std::string & path, | ||||||
|  |     const std::string & data, | ||||||
|  |     const std::string & mimeType) | ||||||
| { | { | ||||||
|     atomicWrite(binaryCacheDir + "/" + path, data); |     atomicWrite(binaryCacheDir + "/" + path, data); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -148,7 +148,7 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore | ||||||
|         : S3BinaryCacheStore(params) |         : S3BinaryCacheStore(params) | ||||||
|         , bucketName(bucketName) |         , bucketName(bucketName) | ||||||
|         , s3Helper(get(params, "aws-region", Aws::Region::US_EAST_1)) |         , s3Helper(get(params, "aws-region", Aws::Region::US_EAST_1)) | ||||||
|         , textCompression(get(params, "text-compression", "gzip")) |         , textCompression(get(params, "text-compression", "")) | ||||||
|         , logCompression(get(params, "log-compression", textCompression)) |         , logCompression(get(params, "log-compression", textCompression)) | ||||||
|     { |     { | ||||||
|         diskCache = getNarInfoDiskCache(); |         diskCache = getNarInfoDiskCache(); | ||||||
|  | @ -229,6 +229,7 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void uploadFile(const std::string & path, const std::string & data, |     void uploadFile(const std::string & path, const std::string & data, | ||||||
|  |         const std::string & mimeType, | ||||||
|         const std::string & contentEncoding) |         const std::string & contentEncoding) | ||||||
|     { |     { | ||||||
|         auto request = |         auto request = | ||||||
|  | @ -236,6 +237,8 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore | ||||||
|             .WithBucket(bucketName) |             .WithBucket(bucketName) | ||||||
|             .WithKey(path); |             .WithKey(path); | ||||||
| 
 | 
 | ||||||
|  |         request.SetContentType(mimeType); | ||||||
|  | 
 | ||||||
|         if (contentEncoding != "") |         if (contentEncoding != "") | ||||||
|             request.SetContentEncoding(contentEncoding); |             request.SetContentEncoding(contentEncoding); | ||||||
| 
 | 
 | ||||||
|  | @ -261,14 +264,15 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore | ||||||
|         stats.putTimeMs += duration; |         stats.putTimeMs += duration; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void upsertFile(const std::string & path, const std::string & data) override |     void upsertFile(const std::string & path, const std::string & data, | ||||||
|  |         const std::string & mimeType) override | ||||||
|     { |     { | ||||||
|         if (path.find(".narinfo") != std::string::npos) |         if (path.find(".narinfo") != std::string::npos) | ||||||
|             uploadFile(path, *compress(textCompression, data), textCompression); |             uploadFile(path, *compress(textCompression, data), mimeType, textCompression); | ||||||
|         else if (path.find("/log") != std::string::npos) |         else if (path.find("/log") != std::string::npos) | ||||||
|             uploadFile(path, *compress(logCompression, data), logCompression); |             uploadFile(path, *compress(logCompression, data), mimeType, logCompression); | ||||||
|         else |         else | ||||||
|             uploadFile(path, data, ""); |             uploadFile(path, data, mimeType, ""); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void getFile(const std::string & path, |     void getFile(const std::string & path, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue