diff --git a/frontend_svc/gRPC/FrontendGRpcSvc.cpp b/frontend_svc/gRPC/FrontendGRpcSvc.cpp index 5009598de034ab680abe721bad5315077bbc7e6b..2129adeb68b75c01a04c3c411f80b11e24264bf1 100644 --- a/frontend_svc/gRPC/FrontendGRpcSvc.cpp +++ b/frontend_svc/gRPC/FrontendGRpcSvc.cpp @@ -109,6 +109,36 @@ Status CtaRpcImpl::GetTapes(::grpc::ServerContext *context, const ::google::prot return Status::OK; } + +Status CtaRpcImpl::Archive(::grpc::ServerContext* context, const ::cta::eos::Notification* request, ::cta::xrd::Response* response) { + + m_log->log(cta::log::INFO, "Archive request"); + + auto storageClassItor = request->file().xattr().find("sys.archive.storage_class"); + if(request->file().xattr().end() == storageClassItor) { + return ::grpc::Status(::grpc::StatusCode::INVALID_ARGUMENT, "storage class is not provided"); + } + const std::string storageClass = storageClassItor->second; + m_log->log(cta::log::INFO, "Archive request for " + storageClass); + + + cta::common::dataStructures::RequesterIdentity requester; + requester.name = request->cli().user().username(); + requester.group = request->cli().user().groupname(); + + auto instance = request->wf().instance().name(); + + try { + uint64_t archiveFileId = m_scheduler->checkAndGetNextArchiveFileId(instance, storageClass, requester, *m_log); + std::cout << "New Fileid: " << archiveFileId << std::endl; + } catch (cta::exception::Exception &ex) { + m_log->log(cta::log::CRIT, ex.getMessageValue()); + return ::grpc::Status(::grpc::StatusCode::INTERNAL, ex.getMessageValue()); + } + + return Status::OK; +} + void CtaRpcImpl::run(const std::string server_address) { ServerBuilder builder; diff --git a/frontend_svc/gRPC/FrontendGRpcSvc.h b/frontend_svc/gRPC/FrontendGRpcSvc.h index b4048d689987d76e11f1eec5d63f01ec0e07dace..7d10e04d5b009823933a3f6fa44c574cac4cb9f8 100644 --- a/frontend_svc/gRPC/FrontendGRpcSvc.h +++ b/frontend_svc/gRPC/FrontendGRpcSvc.h @@ -45,6 +45,8 @@ public: Status Version(::grpc::ServerContext *context, const ::google::protobuf::Empty *request, ::cta::admin::Version *response); Status GetTapes(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<::cta::admin::TapeLsItem>* writer); Status GetStorageClasses(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<::cta::admin::StorageClassLsItem>* writer); + + Status Archive(::grpc::ServerContext* context, const ::cta::eos::Notification* request, ::cta::xrd::Response* response); }; #endif //CTA_FRONTENDGRPCSVC_H diff --git a/frontend_svc/grpc-proto/protobuf/cta_rpc.proto b/frontend_svc/grpc-proto/protobuf/cta_rpc.proto index b8091387423353973d858fae8837f4e8fcecaa3e..e6299a67255cebd25a267612ea7be292fdff1068 100644 --- a/frontend_svc/grpc-proto/protobuf/cta_rpc.proto +++ b/frontend_svc/grpc-proto/protobuf/cta_rpc.proto @@ -9,6 +9,7 @@ package cta.rpc; import "google/protobuf/empty.proto"; import "cta_admin.proto"; +import "cta_eos.proto"; // // gRPC interface to CTA frontend @@ -17,4 +18,5 @@ service CtaRpc { rpc Version (google.protobuf.Empty) returns (cta.admin.Version) {} rpc GetTapes (google.protobuf.Empty) returns (stream cta.admin.TapeLsItem) {} rpc GetStorageClasses (google.protobuf.Empty) returns (stream cta.admin.StorageClassLsItem) {} + rpc Archive (cta.eos.Notification) returns (cta.xrd.Response) {} } \ No newline at end of file