Skip to content
Snippets Groups Projects
Commit 09efee05 authored by Steven Murray's avatar Steven Murray
Browse files

Added method to create, delete and get storage classes to MockSchedulerDatabase

parent 269f04e3
Branches
Tags v0.0-81
No related merge requests found
......@@ -356,7 +356,26 @@ std::list<cta::AdminHost> cta::MockSchedulerDatabase::getAdminHosts(
void cta::MockSchedulerDatabase::createStorageClass(
const SecurityIdentity &requester, const std::string &name,
const uint16_t nbCopies, const std::string &comment) {
//m_db.insertStorageClass(requester, name, nbCopies, comment);
char *zErrMsg = 0;
std::ostringstream query;
query << "INSERT INTO STORAGECLASS(NAME, NBCOPIES, UID, GID, CREATIONTIME,"
" COMMENT) VALUES('" << name << "'," << (int)nbCopies << "," <<
requester.user.getUid() << "," << requester.user.getGid() << "," <<
(int)time(NULL) << ",'" << comment << "');";
if(SQLITE_OK != sqlite3_exec(m_dbHandle, query.str().c_str(), 0, 0,
&zErrMsg)) {
std::ostringstream message;
message << __FUNCTION__ << " - SQLite error: " << zErrMsg;
sqlite3_free(zErrMsg);
throw(exception::Exception(message.str()));
}
const int nbRowsModified = sqlite3_changes(m_dbHandle);
if(0 > nbRowsModified) {
std::ostringstream message;
message << "Storage class " << name << " already exists";
throw(exception::Exception(message.str()));
}
}
//------------------------------------------------------------------------------
......@@ -365,8 +384,23 @@ void cta::MockSchedulerDatabase::createStorageClass(
void cta::MockSchedulerDatabase::deleteStorageClass(
const SecurityIdentity &requester,
const std::string &name) {
//m_ns.assertStorageClassIsNotInUse(requester, name, "/");
//m_db.deleteStorageClass(requester, name);
char *zErrMsg = 0;
std::ostringstream query;
query << "DELETE FROM STORAGECLASS WHERE NAME='" << name << "';";
if(SQLITE_OK != sqlite3_exec(m_dbHandle, query.str().c_str(), 0, 0,
&zErrMsg)) {
std::ostringstream message;
message << __FUNCTION__ << " - SQLite error: " << zErrMsg;
sqlite3_free(zErrMsg);
throw(exception::Exception(message.str()));
}
const int nbRowsModified = sqlite3_changes(m_dbHandle);
if(0 > nbRowsModified) {
std::ostringstream message;
message << "Storage class " << name << " does not exist";
throw(exception::Exception(message.str()));
}
}
//------------------------------------------------------------------------------
......@@ -374,8 +408,33 @@ void cta::MockSchedulerDatabase::deleteStorageClass(
//------------------------------------------------------------------------------
std::list<cta::StorageClass> cta::MockSchedulerDatabase::getStorageClasses(
const SecurityIdentity &requester) const {
//return m_db.selectAllStorageClasses(requester);
return std::list<cta::StorageClass>();
char *zErrMsg = 0;
std::ostringstream query;
std::list<cta::StorageClass> classes;
query << "SELECT NAME, NBCOPIES, UID, GID, CREATIONTIME, COMMENT FROM"
" STORAGECLASS ORDER BY NAME;";
sqlite3_stmt *statement;
int rc = sqlite3_prepare(m_dbHandle, query.str().c_str(), -1, &statement, 0 );
if(rc!=SQLITE_OK){
std::ostringstream message;
message << __FUNCTION__ << " - SQLite error: " << zErrMsg;
sqlite3_free(zErrMsg);
sqlite3_finalize(statement);
throw(exception::Exception(message.str()));
}
while(sqlite3_step(statement)==SQLITE_ROW) {
SqliteColumnNameToIndex idx(statement);
classes.push_back(cta::StorageClass(
std::string((char *)sqlite3_column_text(statement,idx("NAME"))),
sqlite3_column_int(statement,idx("NBCOPIES")),
cta::UserIdentity(sqlite3_column_int(statement,idx("UID")),
sqlite3_column_int(statement,idx("GID"))),
std::string((char *)sqlite3_column_text(statement,idx("COMMENT"))),
time_t(sqlite3_column_int(statement,idx("CREATIONTIME")))
));
}
sqlite3_finalize(statement);
return classes;
}
//------------------------------------------------------------------------------
......
......@@ -151,6 +151,8 @@ void Scheduler::createStorageClass(
const std::string &name,
const uint16_t nbCopies,
const std::string &comment) {
// IMPORTANT
// KEEP NS AND DB IN SYNC
}
//------------------------------------------------------------------------------
......@@ -159,6 +161,9 @@ void Scheduler::createStorageClass(
void Scheduler::deleteStorageClass(
const SecurityIdentity &requester,
const std::string &name) {
//IMPORTANT
//m_ns.assertStorageClassIsNotInUse(requester, name, "/");
//m_db.deleteStorageClass(requester, name);
}
//------------------------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment