From f283c0cf7ebd65f09a6a7ac6f47b74696ef02a6c Mon Sep 17 00:00:00 2001 From: Michael Davis <michael.davis@cern.ch> Date: Fri, 28 Sep 2018 16:28:18 +0200 Subject: [PATCH] [cta-admin] Refactors cta-admin stream response protocol buffers --- cmdline/CtaAdminCmd.cpp | 148 ++++++++++------------- cmdline/CtaAdminCmd.hpp | 60 ++++----- xroot_plugins/XrdCtaArchiveFileLs.hpp | 16 +-- xroot_plugins/XrdCtaListPendingQueue.hpp | 36 ++---- xrootd-ssi-protobuf-interface | 2 +- 5 files changed, 107 insertions(+), 155 deletions(-) diff --git a/cmdline/CtaAdminCmd.cpp b/cmdline/CtaAdminCmd.cpp index ceaa5c9798..6f1f7fe277 100644 --- a/cmdline/CtaAdminCmd.cpp +++ b/cmdline/CtaAdminCmd.cpp @@ -59,43 +59,29 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const // Output results in JSON format for parsing by a script if(CtaAdminCmd::isJson()) { - std::cout << CtaAdminCmd::jsonDelim() << Log::DumpProtobuf(&record); -#if 0 + std::cout << CtaAdminCmd::jsonDelim(); + switch(record.data_case()) { - case Data::kAfItemFieldNumber: std::cout << Log::DumpProtobuf(&record.af_item()); break; - case Data::kAfSummaryItemFieldNumber: std::cout << Log::DumpProtobuf(&record.af_summary_item()); break; + case Data::kAflsItem: std::cout << Log::DumpProtobuf(&record.afls_item()); break; + case Data::kAflsSummary: std::cout << Log::DumpProtobuf(&record.afls_summary()); break; + case Data::kLpaItem: std::cout << Log::DumpProtobuf(&record.lpa_item()); break; + case Data::kLpaSummary: std::cout << Log::DumpProtobuf(&record.lpa_summary()); break; + case Data::kLprItem: std::cout << Log::DumpProtobuf(&record.lpr_item()); break; + case Data::kLprSummary: std::cout << Log::DumpProtobuf(&record.lpr_summary()); break; default: throw std::runtime_error("Received invalid stream data from CTA Frontend."); } -#endif - return; } - // Format results in a tabular format for a human - switch(record.data_case()) - { - case Data::kAfItemFieldNumber : switch(record.af_item().type()) - { - case ArchiveFileItem::ARCHIVEFILE_LS: CtaAdminCmd::printAfLsItem(record.af_item()); break; - case ArchiveFileItem::LISTPENDINGARCHIVES: CtaAdminCmd::printLpaItem (record.af_item()); break; - case ArchiveFileItem::LISTPENDINGRETRIEVES: CtaAdminCmd::printLprItem (record.af_item()); break; + else switch(record.data_case()) { + case Data::kAflsItem: CtaAdminCmd::print(record.afls_item()); break; + case Data::kAflsSummary: CtaAdminCmd::print(record.afls_summary()); break; + case Data::kLpaItem: CtaAdminCmd::print(record.lpa_item()); break; + case Data::kLpaSummary: CtaAdminCmd::print(record.lpa_summary()); break; + case Data::kLprItem: CtaAdminCmd::print(record.lpr_item()); break; + case Data::kLprSummary: CtaAdminCmd::print(record.lpr_summary()); break; default: - throw std::runtime_error("Not implemented/received invalid stream data from CTA Frontend."); - } - break; - - case Data::kAfSummaryItemFieldNumber : switch(record.af_summary_item().type()) - { - case ArchiveFileSummaryItem::ARCHIVEFILE_LS: CtaAdminCmd::printAfLsSummaryItem(record.af_summary_item()); break; - case ArchiveFileSummaryItem::LISTPENDINGARCHIVES: CtaAdminCmd::printLpaSummaryItem (record.af_summary_item()); break; - case ArchiveFileSummaryItem::LISTPENDINGRETRIEVES: CtaAdminCmd::printLprSummaryItem (record.af_summary_item()); break; - default: - throw std::runtime_error("Not implemented/received invalid stream data from CTA Frontend."); - } - break; - - default: - throw std::runtime_error("Received invalid stream data from CTA Frontend."); + throw std::runtime_error("Received invalid stream data from CTA Frontend."); } } @@ -223,7 +209,7 @@ void CtaAdminCmd::send() const // Print message text std::cout << response.message_txt(); // Print streaming response header - switch(response.show_header()) { + if(!isJson()) switch(response.show_header()) { case HeaderType::ARCHIVEFILE_LS: printAfLsHeader(); break; case HeaderType::ARCHIVEFILE_LS_SUMMARY: printAfLsSummaryHeader(); break; case HeaderType::LISTPENDINGARCHIVES: printLpaHeader(); break; @@ -417,23 +403,23 @@ void CtaAdminCmd::printAfLsHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printAfLsItem(const cta::admin::ArchiveFileItem &af_item) +void CtaAdminCmd::print(const cta::admin::ArchiveFileLsItem &afls_item) { - std::cout << std::setfill(' ') << std::setw(11) << std::right << af_item.af().archive_id() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.copy_nb() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.tf().vid() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.tf().f_seq() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.tf().block_id() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().disk_instance() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.af().disk_id() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_item.af().size() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_item.af().cs().type() << ' ' - << std::setfill(' ') << std::setw(14) << std::right << af_item.af().cs().value() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_item.af().storage_class() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().owner() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().group() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_item.af().creation_time() << ' ' - << af_item.af().df().path() + std::cout << std::setfill(' ') << std::setw(11) << std::right << afls_item.af().archive_id() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << afls_item.copy_nb() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << afls_item.tf().vid() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << afls_item.tf().f_seq() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << afls_item.tf().block_id() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << afls_item.af().disk_instance() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << afls_item.af().disk_id() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << afls_item.af().size() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << afls_item.af().cs().type() << ' ' + << std::setfill(' ') << std::setw(14) << std::right << afls_item.af().cs().value() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << afls_item.af().storage_class() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << afls_item.af().df().owner() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << afls_item.af().df().group() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << afls_item.af().creation_time() << ' ' + << afls_item.af().df().path() << std::endl; } @@ -445,10 +431,10 @@ void CtaAdminCmd::printAfLsSummaryHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printAfLsSummaryItem(const cta::admin::ArchiveFileSummaryItem &af_summary_item) +void CtaAdminCmd::print(const cta::admin::ArchiveFileLsSummary &afls_summary) { - std::cout << std::setfill(' ') << std::setw(13) << std::right << af_summary_item.total_files() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_summary_item.total_size() << ' ' + std::cout << std::setfill(' ') << std::setw(13) << std::right << afls_summary.total_files() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << afls_summary.total_size() << ' ' << std::endl; } @@ -470,20 +456,20 @@ void CtaAdminCmd::printLpaHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printLpaItem(const cta::admin::ArchiveFileItem &af_item) +void CtaAdminCmd::print(const cta::admin::ListPendingArchivesItem &lpa_item) { - std::cout << std::setfill(' ') << std::setw(18) << std::right << af_item.tapepool() << ' ' - << std::setfill(' ') << std::setw(11) << std::right << af_item.af().archive_id() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_item.af().storage_class() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.copy_nb() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.af().disk_id() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().disk_instance() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_item.af().cs().type() << ' ' - << std::setfill(' ') << std::setw(14) << std::right << af_item.af().cs().value() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_item.af().size() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().owner() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().group() << ' ' - << af_item.af().df().path() + std::cout << std::setfill(' ') << std::setw(18) << std::right << lpa_item.tapepool() << ' ' + << std::setfill(' ') << std::setw(11) << std::right << lpa_item.af().archive_id() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << lpa_item.af().storage_class() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << lpa_item.copy_nb() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << lpa_item.af().disk_id() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << lpa_item.af().disk_instance() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << lpa_item.af().cs().type() << ' ' + << std::setfill(' ') << std::setw(14) << std::right << lpa_item.af().cs().value() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << lpa_item.af().size() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << lpa_item.af().df().owner() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << lpa_item.af().df().group() << ' ' + << lpa_item.af().df().path() << std::endl; } @@ -496,11 +482,11 @@ void CtaAdminCmd::printLpaSummaryHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printLpaSummaryItem(const cta::admin::ArchiveFileSummaryItem &af_summary_item) +void CtaAdminCmd::print(const cta::admin::ListPendingArchivesSummary &lpa_summary) { - std::cout << std::setfill(' ') << std::setw(18) << std::right << af_summary_item.tapepool() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_summary_item.total_files() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_summary_item.total_size() << ' ' + std::cout << std::setfill(' ') << std::setw(18) << std::right << lpa_summary.tapepool() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << lpa_summary.total_files() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << lpa_summary.total_size() << ' ' << std::endl; } @@ -519,17 +505,17 @@ void CtaAdminCmd::printLprHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printLprItem(const cta::admin::ArchiveFileItem &af_item) +void CtaAdminCmd::print(const cta::admin::ListPendingRetrievesItem &lpr_item) { - std::cout << std::setfill(' ') << std::setw(13) << std::right << af_item.tf().vid() << ' ' - << std::setfill(' ') << std::setw(11) << std::right << af_item.af().archive_id() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.copy_nb() << ' ' - << std::setfill(' ') << std::setw(7) << std::right << af_item.tf().f_seq() << ' ' - << std::setfill(' ') << std::setw(9) << std::right << af_item.tf().block_id() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_item.af().size() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().owner() << ' ' - << std::setfill(' ') << std::setw(8) << std::right << af_item.af().df().group() << ' ' - << af_item.af().df().path() + std::cout << std::setfill(' ') << std::setw(13) << std::right << lpr_item.tf().vid() << ' ' + << std::setfill(' ') << std::setw(11) << std::right << lpr_item.af().archive_id() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << lpr_item.copy_nb() << ' ' + << std::setfill(' ') << std::setw(7) << std::right << lpr_item.tf().f_seq() << ' ' + << std::setfill(' ') << std::setw(9) << std::right << lpr_item.tf().block_id() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << lpr_item.af().size() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << lpr_item.af().df().owner() << ' ' + << std::setfill(' ') << std::setw(8) << std::right << lpr_item.af().df().group() << ' ' + << lpr_item.af().df().path() << std::endl; } @@ -542,11 +528,11 @@ void CtaAdminCmd::printLprSummaryHeader() << TEXT_NORMAL << std::endl; } -void CtaAdminCmd::printLprSummaryItem(const cta::admin::ArchiveFileSummaryItem &af_summary_item) +void CtaAdminCmd::print(const cta::admin::ListPendingRetrievesSummary &lpr_summary) { - std::cout << std::setfill(' ') << std::setw(13) << std::right << af_summary_item.vid() << ' ' - << std::setfill(' ') << std::setw(13) << std::right << af_summary_item.total_files() << ' ' - << std::setfill(' ') << std::setw(12) << std::right << af_summary_item.total_size() << ' ' + std::cout << std::setfill(' ') << std::setw(13) << std::right << lpr_summary.vid() << ' ' + << std::setfill(' ') << std::setw(13) << std::right << lpr_summary.total_files() << ' ' + << std::setfill(' ') << std::setw(12) << std::right << lpr_summary.total_size() << ' ' << std::endl; } diff --git a/cmdline/CtaAdminCmd.hpp b/cmdline/CtaAdminCmd.hpp index 286f53f8bc..c295e8d761 100644 --- a/cmdline/CtaAdminCmd.hpp +++ b/cmdline/CtaAdminCmd.hpp @@ -29,13 +29,10 @@ class CtaAdminCmd public: CtaAdminCmd(int argc, const char *const *const argv); - /*! - * Send the protocol buffer across the XRootD SSI transport - */ + //! Send the protocol buffer across the XRootD SSI transport void send() const; // Static methods to format streaming responses - static bool isJson() { return is_json; } static char jsonDelim() { char c = is_first_record ? '[' : ','; @@ -43,61 +40,49 @@ public: return c; } - // "archivefile ls" command + // Output headers static void printAfLsHeader(); - static void printAfLsItem(const ArchiveFileItem &af_item); static void printAfLsSummaryHeader(); - static void printAfLsSummaryItem(const ArchiveFileSummaryItem &af_item); - - // "listpendingarchives" command static void printLpaHeader(); - static void printLpaItem(const ArchiveFileItem &af_item); static void printLpaSummaryHeader(); - static void printLpaSummaryItem(const ArchiveFileSummaryItem &af_summary_item); - - // "listpendingretrieves" command static void printLprHeader(); - static void printLprItem(const ArchiveFileItem &af_item); static void printLprSummaryHeader(); - static void printLprSummaryItem(const ArchiveFileSummaryItem &af_summary_item); + + // Output records + static void print(const ArchiveFileLsItem &afls_item); + static void print(const ArchiveFileLsSummary &afls_summary); + static void print(const ListPendingArchivesItem &lpa_item); + static void print(const ListPendingArchivesSummary &lpa_summary); + static void print(const ListPendingRetrievesItem &lpr_item); + static void print(const ListPendingRetrievesSummary &lpr_summary); private: - /*! - * Parse the options for a specific command/subcommand - */ + //! Parse the options for a specific command/subcommand void parseOptions(int start, int argc, const char *const *const argv, const cmd_val_t &options); - /*! - * Add a valid option to the protocol buffer - */ + //! Add a valid option to the protocol buffer void addOption(const Option &option, const std::string &value); - /*! - * Read a list of string options from a file - */ + //! Read a list of string options from a file void readListFromFile(cta::admin::OptionStrList &str_list, const std::string &filename); - /*! - * Throw an exception with usage help - */ + //! Throw an exception with usage help void throwUsage(const std::string &error_txt = "") const; - /*! - * Return the request timeout value (to pass to the ServiceClientSide constructor) - */ + //! Return the request timeout value (to pass to the ServiceClientSide constructor) int GetRequestTimeout() const; // Member variables - const std::string StreamBufferSize = "1024"; //!< Buffer size for Data/Stream Responses - const std::string DefaultRequestTimeout = "10"; //!< Default Request Timeout. Can be overridden by - //!< XRD_REQUESTTIMEOUT environment variable. + const std::string StreamBufferSize = "1024"; //!< Buffer size for Data/Stream Responses + const std::string DefaultRequestTimeout = "10"; //!< Default Request Timeout. Can be overridden by + //!< XRD_REQUESTTIMEOUT environment variable. - std::string m_execname; //!< Executable name of this program - cta::xrd::Request m_request; //!< Protocol Buffer for the command and parameters + std::string m_execname; //!< Executable name of this program + cta::xrd::Request m_request; //!< Protocol Buffer for the command and parameters - static bool is_json; //!< Display results in JSON format - static bool is_first_record; //!< Delimiter for JSON records + static bool is_json; //!< Display results in JSON format + static bool is_first_record; //!< Delimiter for JSON records static constexpr const char* const TEXT_RED = "\x1b[31;1m"; //!< Terminal formatting code for red text static constexpr const char* const TEXT_NORMAL = "\x1b[0m"; //!< Terminal formatting code for normal text @@ -105,4 +90,3 @@ private: }; }} // namespace cta::admin - diff --git a/xroot_plugins/XrdCtaArchiveFileLs.hpp b/xroot_plugins/XrdCtaArchiveFileLs.hpp index b1b6f6cc72..98c7205933 100644 --- a/xroot_plugins/XrdCtaArchiveFileLs.hpp +++ b/xroot_plugins/XrdCtaArchiveFileLs.hpp @@ -96,14 +96,11 @@ public: for(auto jt = archiveFile.tapeFiles.cbegin(); jt != archiveFile.tapeFiles.cend(); jt++) { Data record; - // Response type - record.mutable_af_item()->set_type(cta::admin::ArchiveFileItem::ARCHIVEFILE_LS); - // Copy number - record.mutable_af_item()->set_copy_nb(jt->first); + record.mutable_afls_item()->set_copy_nb(jt->first); // Archive file - auto af = record.mutable_af_item()->mutable_af(); + auto af = record.mutable_afls_item()->mutable_af(); af->set_archive_id(archiveFile.archiveFileID); af->set_disk_instance(archiveFile.diskInstance); af->set_disk_id(archiveFile.diskFileId); @@ -117,7 +114,7 @@ public: af->set_creation_time(archiveFile.creationTime); // Tape file - auto tf = record.mutable_af_item()->mutable_tf(); + auto tf = record.mutable_afls_item()->mutable_tf(); tf->set_vid(jt->second.vid); tf->set_f_seq(jt->second.fSeq); tf->set_block_id(jt->second.blockId); @@ -153,12 +150,9 @@ public: Data record; - // Response type - record.mutable_af_summary_item()->set_type(cta::admin::ArchiveFileSummaryItem::ARCHIVEFILE_LS); - // Summary statistics - record.mutable_af_summary_item()->set_total_files(summary.totalFiles); - record.mutable_af_summary_item()->set_total_size(summary.totalBytes); + record.mutable_afls_summary()->set_total_files(summary.totalFiles); + record.mutable_afls_summary()->set_total_size(summary.totalBytes); streambuf->Push(record); diff --git a/xroot_plugins/XrdCtaListPendingQueue.hpp b/xroot_plugins/XrdCtaListPendingQueue.hpp index 8a8c722777..5953ed60cd 100644 --- a/xroot_plugins/XrdCtaListPendingQueue.hpp +++ b/xroot_plugins/XrdCtaListPendingQueue.hpp @@ -162,17 +162,14 @@ bool ListPendingQueue<OStoreDB::ArchiveQueueItor_t>::pushRecord(XrdSsiPb::OStrea { Data record; - // Response type - record.mutable_af_item()->set_type(cta::admin::ArchiveFileItem::LISTPENDINGARCHIVES); - // Tapepool - record.mutable_af_item()->set_tapepool(tapepool); + record.mutable_lpa_item()->set_tapepool(tapepool); // Copy number - record.mutable_af_item()->set_copy_nb(job.copyNumber); + record.mutable_lpa_item()->set_copy_nb(job.copyNumber); // Archive file - auto af = record.mutable_af_item()->mutable_af(); + auto af = record.mutable_lpa_item()->mutable_af(); af->set_archive_id(job.archiveFileID); af->set_disk_instance(job.instanceName); af->set_disk_id(job.request.diskFileID); @@ -193,15 +190,12 @@ bool ListPendingQueue<OStoreDB::ArchiveQueueItor_t>::pushRecord(XrdSsiPb::OStrea { Data record; - // Response type - record.mutable_af_summary_item()->set_type(cta::admin::ArchiveFileSummaryItem::LISTPENDINGARCHIVES); - // Tapepool - record.mutable_af_summary_item()->set_tapepool(tapepool); + record.mutable_lpa_summary()->set_tapepool(tapepool); // Summary statistics - record.mutable_af_summary_item()->set_total_files(total_files); - record.mutable_af_summary_item()->set_total_size(total_size); + record.mutable_lpa_summary()->set_total_files(total_files); + record.mutable_lpa_summary()->set_total_size(total_size); return streambuf->Push(record); } @@ -233,14 +227,11 @@ bool ListPendingQueue<OStoreDB::RetrieveQueueItor_t>::pushRecord(XrdSsiPb::OStre Data record; - // Response type - record.mutable_af_item()->set_type(cta::admin::ArchiveFileItem::LISTPENDINGRETRIEVES); - // Copy number - record.mutable_af_item()->set_copy_nb(tape_it->second.first); + record.mutable_lpr_item()->set_copy_nb(tape_it->second.first); // Archive file - auto af = record.mutable_af_item()->mutable_af(); + auto af = record.mutable_lpr_item()->mutable_af(); af->set_archive_id(job.request.archiveFileID); //af->set_size(tape_it->second.second.compressedSize); af->set_size(job.fileSize); @@ -249,7 +240,7 @@ bool ListPendingQueue<OStoreDB::RetrieveQueueItor_t>::pushRecord(XrdSsiPb::OStre af->mutable_df()->set_path(job.request.diskFileInfo.path); // Tape file - auto tf = record.mutable_af_item()->mutable_tf(); + auto tf = record.mutable_lpr_item()->mutable_tf(); tf->set_vid(tape_it->first); tf->set_f_seq(tape_it->second.second.fSeq); tf->set_block_id(tape_it->second.second.blockId); @@ -266,15 +257,12 @@ bool ListPendingQueue<OStoreDB::RetrieveQueueItor_t>::pushRecord(XrdSsiPb::OStre { Data record; - // Response type - record.mutable_af_summary_item()->set_type(cta::admin::ArchiveFileSummaryItem::LISTPENDINGRETRIEVES); - // Tapepool - record.mutable_af_summary_item()->set_vid(vid); + record.mutable_lpr_summary()->set_vid(vid); // Summary statistics - record.mutable_af_summary_item()->set_total_files(total_files); - record.mutable_af_summary_item()->set_total_size(total_size); + record.mutable_lpr_summary()->set_total_files(total_files); + record.mutable_lpr_summary()->set_total_size(total_size); return streambuf->Push(record); } diff --git a/xrootd-ssi-protobuf-interface b/xrootd-ssi-protobuf-interface index 7fd284d077..86ff09ed5b 160000 --- a/xrootd-ssi-protobuf-interface +++ b/xrootd-ssi-protobuf-interface @@ -1 +1 @@ -Subproject commit 7fd284d077ad45ec42858845c5ee2c3899460c1d +Subproject commit 86ff09ed5b8ac1d2f9b6b4b20c451ba7dc43c424 -- GitLab