diff options
Diffstat (limited to 'src/zenserver')
6 files changed, 40 insertions, 10 deletions
diff --git a/src/zenserver/projectstore/buildsremoteprojectstore.cpp b/src/zenserver/projectstore/buildsremoteprojectstore.cpp index a9dd48510..0b0d8ccd0 100644 --- a/src/zenserver/projectstore/buildsremoteprojectstore.cpp +++ b/src/zenserver/projectstore/buildsremoteprojectstore.cpp @@ -470,7 +470,10 @@ private: }; std::shared_ptr<RemoteProjectStore> -CreateJupiterBuildsRemoteStore(const BuildsRemoteStoreOptions& Options, const std::filesystem::path& TempFilePath, bool Quiet) +CreateJupiterBuildsRemoteStore(const BuildsRemoteStoreOptions& Options, + const std::filesystem::path& TempFilePath, + bool Quiet, + bool Unattended) { std::string Url = Options.Url; if (Url.find("://"sv) == std::string::npos) @@ -495,7 +498,8 @@ CreateJupiterBuildsRemoteStore(const BuildsRemoteStoreOptions& Options, const st } else if (!Options.OidcExePath.empty()) { - if (auto TokenProviderMaybe = httpclientauth::CreateFromOidcTokenExecutable(Options.OidcExePath, Url, Quiet); TokenProviderMaybe) + if (auto TokenProviderMaybe = httpclientauth::CreateFromOidcTokenExecutable(Options.OidcExePath, Url, Quiet, Unattended); + TokenProviderMaybe) { TokenProvider = TokenProviderMaybe.value(); } diff --git a/src/zenserver/projectstore/buildsremoteprojectstore.h b/src/zenserver/projectstore/buildsremoteprojectstore.h index 60b6caef7..24ab9678d 100644 --- a/src/zenserver/projectstore/buildsremoteprojectstore.h +++ b/src/zenserver/projectstore/buildsremoteprojectstore.h @@ -26,6 +26,7 @@ struct BuildsRemoteStoreOptions : RemoteStoreOptions std::shared_ptr<RemoteProjectStore> CreateJupiterBuildsRemoteStore(const BuildsRemoteStoreOptions& Options, const std::filesystem::path& TempFilePath, - bool Quiet); + bool Quiet, + bool Unattended); } // namespace zen diff --git a/src/zenserver/projectstore/jupiterremoteprojectstore.cpp b/src/zenserver/projectstore/jupiterremoteprojectstore.cpp index a8d486e2a..da3f92353 100644 --- a/src/zenserver/projectstore/jupiterremoteprojectstore.cpp +++ b/src/zenserver/projectstore/jupiterremoteprojectstore.cpp @@ -343,7 +343,7 @@ private: }; std::shared_ptr<RemoteProjectStore> -CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options, const std::filesystem::path& TempFilePath, bool Quiet) +CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options, const std::filesystem::path& TempFilePath, bool Quiet, bool Unattended) { std::string Url = Options.Url; if (Url.find("://"sv) == std::string::npos) @@ -374,7 +374,8 @@ CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options, const std::fi } else if (!Options.OidcExePath.empty()) { - if (auto TokenProviderMaybe = httpclientauth::CreateFromOidcTokenExecutable(Options.OidcExePath, Url, Quiet); TokenProviderMaybe) + if (auto TokenProviderMaybe = httpclientauth::CreateFromOidcTokenExecutable(Options.OidcExePath, Url, Quiet, Unattended); + TokenProviderMaybe) { TokenProvider = TokenProviderMaybe.value(); } diff --git a/src/zenserver/projectstore/jupiterremoteprojectstore.h b/src/zenserver/projectstore/jupiterremoteprojectstore.h index ac2d25b47..d7a22700a 100644 --- a/src/zenserver/projectstore/jupiterremoteprojectstore.h +++ b/src/zenserver/projectstore/jupiterremoteprojectstore.h @@ -26,6 +26,7 @@ struct JupiterRemoteStoreOptions : RemoteStoreOptions std::shared_ptr<RemoteProjectStore> CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options, const std::filesystem::path& TempFilePath, - bool Quiet); + bool Quiet, + bool Unattended); } // namespace zen diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp index 97175da23..78e014346 100644 --- a/src/zenserver/projectstore/projectstore.cpp +++ b/src/zenserver/projectstore/projectstore.cpp @@ -268,7 +268,7 @@ namespace { ForceDisableBlocks, ForceDisableTempBlocks, AssumeHttp2}; - RemoteStore = CreateJupiterRemoteStore(Options, TempFilePath, /*Quiet*/ false); + RemoteStore = CreateJupiterRemoteStore(Options, TempFilePath, /*Quiet*/ false, /*Unattended*/ false); } if (CbObjectView Zen = Params["zen"sv].AsObjectView(); Zen) @@ -365,7 +365,7 @@ namespace { ForceDisableTempBlocks, AssumeHttp2, MetaData}; - RemoteStore = CreateJupiterBuildsRemoteStore(Options, TempFilePath, /*Quiet*/ false); + RemoteStore = CreateJupiterBuildsRemoteStore(Options, TempFilePath, /*Quiet*/ false, /*Unattended*/ false); } if (!RemoteStore) @@ -4812,11 +4812,11 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId, { if (WantsRawSizeField) { - RawSizes.resize(Hashes.size(), 0u); + RawSizes.resize(Hashes.size(), (uint64_t)-1); } if (WantsSizeField) { - Sizes.resize(Hashes.size(), 0u); + Sizes.resize(Hashes.size(), (uint64_t)-1); } WorkerThreadPool& WorkerPool = GetSmallWorkerPool(EWorkloadType::Burst); // GetSyncWorkerPool(); @@ -4832,11 +4832,13 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId, { if (WantsRawSizeField) { + ZEN_ASSERT_SLOW(RawSizes[Index] == (uint64_t)-1); IoHash _; if (CompressedBuffer::ValidateCompressedHeader(Payload, _, RawSizes[Index])) { if (WantsSizeField) { + ZEN_ASSERT_SLOW(Sizes[Index] == (uint64_t)-1); Sizes[Index] = Payload.GetSize(); } } @@ -4850,6 +4852,7 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId, } else if (WantsSizeField) { + ZEN_ASSERT_SLOW(Sizes[Index] == (uint64_t)-1); Sizes[Index] = Payload.GetSize(); } } @@ -4857,10 +4860,12 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId, { if (WantsSizeField) { + ZEN_ASSERT_SLOW(Sizes[Index] == (uint64_t)-1); Sizes[Index] = Payload.GetSize(); } if (WantsRawSizeField) { + ZEN_ASSERT_SLOW(Sizes[Index] == (uint64_t)-1); RawSizes[Index] = Payload.GetSize(); } } diff --git a/src/zenserver/projectstore/remoteprojectstore.cpp b/src/zenserver/projectstore/remoteprojectstore.cpp index 911628386..e61ccd917 100644 --- a/src/zenserver/projectstore/remoteprojectstore.cpp +++ b/src/zenserver/projectstore/remoteprojectstore.cpp @@ -2743,6 +2743,12 @@ ParseOplogContainer(const CbObject& ContainerObject, NiceBytes(Chunked.RawSize), Chunked.ChunkHashes.size()); } + if (remotestore_impl::IsCancelled(OptionalContext)) + { + return RemoteProjectStore::Result{.ErrorCode = gsl::narrow<int>(HttpResponseCode::OK), + .ElapsedSeconds = Timer.GetElapsedTimeMs() / 1000.0, + .Reason = "Operation cancelled"}; + } } size_t NeedBlockCount = 0; @@ -2787,6 +2793,12 @@ ParseOplogContainer(const CbObject& ContainerObject, NeedBlockCount++; } } + if (remotestore_impl::IsCancelled(OptionalContext)) + { + return RemoteProjectStore::Result{.ErrorCode = gsl::narrow<int>(HttpResponseCode::OK), + .ElapsedSeconds = Timer.GetElapsedTimeMs() / 1000.0, + .Reason = "Operation cancelled"}; + } } remotestore_impl::ReportMessage(OptionalContext, fmt::format("Requesting {} of {} attachment blocks", NeedBlockCount, BlocksArray.Num())); @@ -2801,6 +2813,12 @@ ParseOplogContainer(const CbObject& ContainerObject, OnNeedAttachment(AttachmentHash); NeedAttachmentCount++; } + if (remotestore_impl::IsCancelled(OptionalContext)) + { + return RemoteProjectStore::Result{.ErrorCode = gsl::narrow<int>(HttpResponseCode::OK), + .ElapsedSeconds = Timer.GetElapsedTimeMs() / 1000.0, + .Reason = "Operation cancelled"}; + } }; remotestore_impl::ReportMessage(OptionalContext, fmt::format("Requesting {} of {} large attachments", NeedAttachmentCount, LargeChunksArray.Num())); |