Skip to content
Snippets Groups Projects
Commit 7061a887 authored by Lasse Wardenaer's avatar Lasse Wardenaer
Browse files

Add modifyLogicalLibraryPhysicalLibrary

parent a636218f
No related branches found
No related tags found
No related merge requests found
Pipeline #65635 failed
......@@ -45,6 +45,11 @@ void DummyLogicalLibraryCatalogue::modifyLogicalLibraryComment(
throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");
}
void DummyLogicalLibraryCatalogue::modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) {
throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");
}
void DummyLogicalLibraryCatalogue::modifyLogicalLibraryDisabledReason(
const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &disabledReason) {
throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");
......
......@@ -40,6 +40,9 @@ public:
void modifyLogicalLibraryComment(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &comment) override;
void modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) override;
void modifyLogicalLibraryDisabledReason(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &disabledReason) override;
......
......@@ -68,6 +68,9 @@ public:
virtual void setLogicalLibraryDisabled(const common::dataStructures::SecurityIdentity &admin, const std::string &name,
const bool disabledValue) = 0;
virtual void modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) = 0;
};
} // namespace catalogue
......
......@@ -291,6 +291,44 @@ void RdbmsLogicalLibraryCatalogue::modifyLogicalLibraryComment(const common::dat
}
}
void RdbmsLogicalLibraryCatalogue::modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) {
try {
auto conn = m_connPool->getConn();
const auto physicalLibCatalogue = static_cast<RdbmsPhysicalLibraryCatalogue*>(m_rdbmsCatalogue->PhysicalLibrary().get());
const auto physicalLibraryId = physicalLibCatalogue->getPhysicalLibraryId(conn, physicalLibraryName);
if(!physicalLibraryId) {
throw exception::UserError(std::string("Cannot update logical library ") + name + " because logical library " +
physicalLibraryName + " does not exist");
}
const time_t now = time(nullptr);
const char *const sql =
"UPDATE LOGICAL_LIBRARY SET "
"PHYSICAL_LIBRARY_ID = :PHYSICAL_LIBRARY_ID,"
"LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
"LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
"LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
"WHERE "
"LOGICAL_LIBRARY_NAME = :LOGICAL_LIBRARY_NAME";
auto stmt = conn.createStmt(sql);
stmt.bindUint64(":PHYSICAL_LIBRARY_ID", physicalLibraryId);
stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
stmt.bindUint64(":LAST_UPDATE_TIME", now);
stmt.bindString(":LOGICAL_LIBRARY_NAME", name);
stmt.executeNonQuery();
if(0 == stmt.getNbAffectedRows()) {
throw exception::UserError(std::string("Cannot modify logical library ") + name + " because it does not exist");
}
} catch(exception::UserError &) {
throw;
} catch(exception::Exception &ex) {
ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
throw;
}
}
void RdbmsLogicalLibraryCatalogue::modifyLogicalLibraryDisabledReason(
const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &disabledReason) {
try {
......
......@@ -56,6 +56,9 @@ public:
void modifyLogicalLibraryComment(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &comment) override;
void modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) override;
void modifyLogicalLibraryDisabledReason(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &disabledReason) override;
......
......@@ -59,6 +59,12 @@ void LogicalLibraryCatalogueRetryWrapper::modifyLogicalLibraryComment(
name, comment);}, m_maxTriesToConnect);
}
void LogicalLibraryCatalogueRetryWrapper::modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) {
return retryOnLostConnection(m_log, [&]{return m_catalogue->LogicalLibrary()->modifyLogicalLibraryPhysicalLibrary(admin,
name, physicalLibraryName);}, m_maxTriesToConnect);
}
void LogicalLibraryCatalogueRetryWrapper::modifyLogicalLibraryDisabledReason(
const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &disabledReason) {
return retryOnLostConnection(m_log, [&]{return m_catalogue->LogicalLibrary()->modifyLogicalLibraryDisabledReason(
......
......@@ -59,6 +59,9 @@ public:
void modifyLogicalLibraryComment(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &comment) override;
void modifyLogicalLibraryPhysicalLibrary(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &physicalLibraryName) override;
void modifyLogicalLibraryDisabledReason(const common::dataStructures::SecurityIdentity &admin,
const std::string &name, const std::string &disabledReason) override;
......
......@@ -626,6 +626,7 @@ void AdminCmd::processLogicalLibrary_Ch(xrd::Response& response) {
auto disabled = getOptional(OptionBoolean::DISABLED);
auto comment = getOptional(OptionString::COMMENT);
auto disabledReason = getOptional(OptionString::DISABLED_REASON);
auto physicalLibrary = getOptional(OptionString::PHYSICAL_LIBRARY);
if(disabled) {
m_catalogue.LogicalLibrary()->setLogicalLibraryDisabled(m_cliIdentity, name, disabled.value());
......@@ -640,6 +641,9 @@ void AdminCmd::processLogicalLibrary_Ch(xrd::Response& response) {
if(disabledReason) {
m_catalogue.LogicalLibrary()->modifyLogicalLibraryDisabledReason(m_cliIdentity, name, disabledReason.value());
}
if(physicalLibrary) {
m_catalogue.LogicalLibrary()->modifyLogicalLibraryPhysicalLibrary(m_cliIdentity, name, physicalLibrary.value());
}
response.set_type(xrd::Response::RSP_SUCCESS);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment