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…
Reference in a new issue