diff options
| author | Dan Engelbrecht <[email protected]> | 2025-12-11 10:02:06 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-12-11 10:02:06 +0100 |
| commit | a598cb444f311c39bbf8d83e2004dd3545b9412d (patch) | |
| tree | e2527cd9c7fcb62e89605d0a3982ce3b052d5fba /src/zen/cmds/builds_cmd.cpp | |
| parent | HTTP server API changes for improved extensibility (#684) (diff) | |
| download | archived-zen-a598cb444f311c39bbf8d83e2004dd3545b9412d.tar.xz archived-zen-a598cb444f311c39bbf8d83e2004dd3545b9412d.zip | |
remove direct console output from code that is used from service mode (#688)
Diffstat (limited to 'src/zen/cmds/builds_cmd.cpp')
| -rw-r--r-- | src/zen/cmds/builds_cmd.cpp | 165 |
1 files changed, 90 insertions, 75 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp index 7060f092a..b1052654d 100644 --- a/src/zen/cmds/builds_cmd.cpp +++ b/src/zen/cmds/builds_cmd.cpp @@ -393,7 +393,8 @@ namespace { return CleanAndRemoveDirectory(WorkerPool, AbortFlag, PauseFlag, Directory); } - void ValidateBuildPart(ThreadWorkers& Workers, + void ValidateBuildPart(OperationLogOutput& Output, + ThreadWorkers& Workers, BuildStorageBase& Storage, const Oid& BuildId, Oid BuildPartId, @@ -403,9 +404,7 @@ namespace { ProgressBar::SetLogOperationName(ProgressMode, "Validate Part"); - std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode)); - - BuildsOperationValidateBuildPart ValidateOp(*Output, + BuildsOperationValidateBuildPart ValidateOp(Output, Storage, AbortFlag, PauseFlag, @@ -428,7 +427,8 @@ namespace { NiceTimeSpanMs(ValidateOp.m_ValidateStats.ElapsedWallTimeUS / 1000)); } - void UploadFolder(ThreadWorkers& Workers, + void UploadFolder(OperationLogOutput& Output, + ThreadWorkers& Workers, StorageInstance& Storage, const Oid& BuildId, const Oid& BuildPartId, @@ -448,10 +448,8 @@ namespace { { Stopwatch UploadTimer; - std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode)); - BuildsOperationUploadFolder UploadOp( - *Output, + Output, Storage, AbortFlag, PauseFlag, @@ -1151,7 +1149,8 @@ namespace { return Result; } - ChunkedFolderContent GetRemoteContent(StorageInstance& Storage, + ChunkedFolderContent GetRemoteContent(OperationLogOutput& Output, + StorageInstance& Storage, const Oid& BuildId, const std::vector<std::pair<Oid, std::string>>& BuildParts, std::span<const std::string> IncludeWildcards, @@ -1184,15 +1183,15 @@ namespace { OutChunkController = CreateChunkingController(ChunkerName, Parameters); } - auto ParseBuildPartManifest = [](StorageInstance& Storage, - const Oid& BuildId, - const Oid& BuildPartId, - CbObject BuildPartManifest, - std::span<const std::string> IncludeWildcards, - std::span<const std::string> ExcludeWildcards, - ChunkedFolderContent& OutRemoteContent, - std::vector<ChunkBlockDescription>& OutBlockDescriptions, - std::vector<IoHash>& OutLooseChunkHashes) { + auto ParseBuildPartManifest = [&Output](StorageInstance& Storage, + const Oid& BuildId, + const Oid& BuildPartId, + CbObject BuildPartManifest, + std::span<const std::string> IncludeWildcards, + std::span<const std::string> ExcludeWildcards, + ChunkedFolderContent& OutRemoteContent, + std::vector<ChunkBlockDescription>& OutBlockDescriptions, + std::vector<IoHash>& OutLooseChunkHashes) { std::vector<uint32_t> AbsoluteChunkOrders; std::vector<uint64_t> LooseChunkRawSizes; std::vector<IoHash> BlockRawHashes; @@ -1213,17 +1212,16 @@ namespace { // TODO: GetBlockDescriptions for all BlockRawHashes in one go - check for local block descriptions when we cache them { - std::unique_ptr<OperationLogOutput> OperationLogOutput(CreateConsoleLogOutput(ProgressMode)); - bool AttemptFallback = false; - OutBlockDescriptions = GetBlockDescriptions(*OperationLogOutput, - *Storage.BuildStorage, - Storage.BuildCacheStorage.get(), - BuildId, - BuildPartId, - BlockRawHashes, - AttemptFallback, - IsQuiet, - IsVerbose); + bool AttemptFallback = false; + OutBlockDescriptions = GetBlockDescriptions(Output, + *Storage.BuildStorage, + Storage.BuildCacheStorage.get(), + BuildId, + BuildPartId, + BlockRawHashes, + AttemptFallback, + IsQuiet, + IsVerbose); } CalculateLocalChunkOrders(AbsoluteChunkOrders, @@ -1669,7 +1667,8 @@ namespace { bool AppendNewContent = false; }; - void DownloadFolder(ThreadWorkers& Workers, + void DownloadFolder(OperationLogOutput& Output, + ThreadWorkers& Workers, StorageInstance& Storage, const Oid& BuildId, const std::vector<Oid>& BuildPartIds, @@ -1720,7 +1719,8 @@ namespace { ProgressBar::SetLogOperationProgress(ProgressMode, TaskSteps::CompareState, TaskSteps::StepCount); - ChunkedFolderContent RemoteContent = GetRemoteContent(Storage, + ChunkedFolderContent RemoteContent = GetRemoteContent(Output, + Storage, BuildId, AllBuildParts, Options.IncludeWildcards, @@ -1875,9 +1875,8 @@ namespace { ProgressBar::SetLogOperationProgress(ProgressMode, TaskSteps::Download, TaskSteps::StepCount); - std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode)); - BuildsOperationUpdateFolder Updater( - *Output, + BuildsOperationUpdateFolder Updater( + Output, Storage, AbortFlag, PauseFlag, @@ -1892,24 +1891,24 @@ namespace { BlockDescriptions, LooseChunkHashes, BuildsOperationUpdateFolder::Options{ - .IsQuiet = IsQuiet, - .IsVerbose = IsVerbose, - .AllowFileClone = Options.AllowFileClone, - .UseSparseFiles = UseSparseFiles, - .SystemRootDir = Options.SystemRootDir, - .ZenFolderPath = Options.ZenFolderPath, - .LargeAttachmentSize = LargeAttachmentSize, - .PreferredMultipartChunkSize = PreferredMultipartChunkSize, - .PartialBlockRequestMode = Options.PartialBlockRequestMode, - .WipeTargetFolder = Options.CleanTargetFolder, - .PrimeCacheOnly = Options.PrimeCacheOnly, - .EnableOtherDownloadsScavenging = Options.EnableOtherDownloadsScavenging, - .EnableTargetFolderScavenging = Options.EnableTargetFolderScavenging || Options.AppendNewContent, - .ValidateCompletedSequences = Options.PostDownloadVerify, - .ExcludeFolders = DefaultExcludeFolders, - .ExcludeExtensions = DefaultExcludeExtensions, - .MaximumInMemoryPayloadSize = Options.MaximumInMemoryPayloadSize, - .PopulateCache = Options.PopulateCache}); + .IsQuiet = IsQuiet, + .IsVerbose = IsVerbose, + .AllowFileClone = Options.AllowFileClone, + .UseSparseFiles = UseSparseFiles, + .SystemRootDir = Options.SystemRootDir, + .ZenFolderPath = Options.ZenFolderPath, + .LargeAttachmentSize = LargeAttachmentSize, + .PreferredMultipartChunkSize = PreferredMultipartChunkSize, + .PartialBlockRequestMode = Options.PartialBlockRequestMode, + .WipeTargetFolder = Options.CleanTargetFolder, + .PrimeCacheOnly = Options.PrimeCacheOnly, + .EnableOtherDownloadsScavenging = Options.EnableOtherDownloadsScavenging, + .EnableTargetFolderScavenging = Options.EnableTargetFolderScavenging || Options.AppendNewContent, + .ValidateCompletedSequences = Options.PostDownloadVerify, + .ExcludeFolders = DefaultExcludeFolders, + .ExcludeExtensions = DefaultExcludeExtensions, + .MaximumInMemoryPayloadSize = Options.MaximumInMemoryPayloadSize, + .PopulateCache = Options.PopulateCache}); { ProgressBar::PushLogOperation(ProgressMode, "Download"); auto _ = MakeGuard([]() { ProgressBar::PopLogOperation(ProgressMode); }); @@ -3001,6 +3000,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) std::unique_ptr<AuthMgr> Auth; + std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode)); + auto CreateBuildStorage = [&](BuildStorageBase::Statistics& StorageStats, BuildStorageCache::Statistics& StorageCacheStats, const std::filesystem::path& TempPath, @@ -3035,7 +3036,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) m_Verbose); BuildStorageResolveResult ResolveRes = - ResolveBuildStorage(ClientSettings, m_Host, m_OverrideHost, m_ZenCacheHost, ZenCacheResolveMode::All, m_Verbose); + ResolveBuildStorage(*Output, ClientSettings, m_Host, m_OverrideHost, m_ZenCacheHost, ZenCacheResolveMode::All, m_Verbose); if (!ResolveRes.HostUrl.empty()) { ClientSettings.AssumeHttp2 = ResolveRes.HostAssumeHttp2; @@ -3607,7 +3608,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) const std::filesystem::path TempDir = ZenTempFolderPath(m_ZenFolderPath); - UploadFolder(Workers, + UploadFolder(*Output, + Workers, Storage, BuildId, BuildPartId, @@ -3627,7 +3629,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { if (m_PostUploadVerify) { - ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); + ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); } } @@ -3743,7 +3745,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) throw OptionParseException("'--append' conflicts with '--clean'", SubOption->help()); } - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, BuildPartIds, @@ -3889,8 +3892,6 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) ProgressBar::SetLogOperationName(ProgressMode, "Prime Cache"); - std::unique_ptr<OperationLogOutput> Output(CreateConsoleLogOutput(ProgressMode)); - BuildsOperationPrimeCache PrimeOp(*Output, Storage, AbortFlag, @@ -4019,7 +4020,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) const Oid BuildPartId = m_BuildPartName.empty() ? Oid::Zero : ParseBuildPartId(); - ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); + ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); if (AbortFlag) { @@ -4068,7 +4069,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { throw OptionParseException(fmt::format("'--build-id' ('{}') is malformed", BuildIdString), SubOption->help()); } - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {}, @@ -4234,7 +4236,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) const std::filesystem::path UploadTempDir = UploadTempDirectory(m_Path); // std::filesystem::path UploadTempDir = m_ZenFolderPath / "upload_tmp"; - UploadFolder(Workers, + UploadFolder(*Output, + Workers, Storage, BuildId, BuildPartId, @@ -4254,7 +4257,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) throw std::runtime_error("Test aborted. (Upload build)"); } - ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); + ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); if (!m_IncludeWildcard.empty() || !m_ExcludeWildcard.empty()) { @@ -4266,7 +4269,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) std::vector<std::string> ExcludeWildcards; ParseFileFilters(IncludeWildcards, ExcludeWildcards); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4295,7 +4299,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4320,7 +4325,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nDownload Full Build {}, Part {} ({}) to '{}'", BuildId, BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4346,7 +4352,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}'", BuildId, BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4369,7 +4376,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (identical target)", BuildId, BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4484,7 +4492,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) ScrambleDir(DownloadPath); ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (scrambled target)", BuildId, BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4518,7 +4527,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) ZEN_CONSOLE("\nUpload scrambled Build {}, Part {} ({})\n{}\n", BuildId2, BuildPartId2, m_BuildPartName, SB.ToView()); } - UploadFolder(Workers, + UploadFolder(*Output, + Workers, Storage, BuildId2, BuildPartId2, @@ -4538,10 +4548,11 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) throw std::runtime_error("Test aborted. (Upload scrambled)"); } - ValidateBuildPart(Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); + ValidateBuildPart(*Output, Workers, *Storage.BuildStorage, BuildId, BuildPartId, m_BuildPartName); ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4564,7 +4575,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (scrambled)", BuildId2, BuildPartId2, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId2, {BuildPartId2}, @@ -4586,7 +4598,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nRe-download Build {}, Part {} ({}) to '{}' (scrambled)", BuildId2, BuildPartId2, m_BuildPartName, DownloadPath); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId2, {BuildPartId2}, @@ -4608,7 +4621,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath2); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, @@ -4630,7 +4644,8 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } ZEN_CONSOLE("\nDownload Build {}, Part {} ({}) to '{}' (original)", BuildId, BuildPartId, m_BuildPartName, DownloadPath3); - DownloadFolder(Workers, + DownloadFolder(*Output, + Workers, Storage, BuildId, {BuildPartId}, |