Skip to content
Snippets Groups Projects
Commit 13f4b638 authored by Eric Cano's avatar Eric Cano
Browse files

Further implemented function to access storage classes in OStoreDB.

parent 17fdd3ca
Branches
Tags
No related merge requests found
......@@ -296,12 +296,14 @@ std::vector<std::string> cta::objectstore::RootEntry::getArchiveRoutes(const std
}
auto cta::objectstore::RootEntry::dumpStorageClasses() -> std::list<StorageClassDump> {
checkPayloadReadable();
std::list<StorageClassDump> ret;
auto & scl = m_payload.storageclasses();
for (auto i=scl.begin(); i != scl.end(); i++) {
ret.push_back(StorageClassDump());
ret.back().copyCount = i->copycount();
ret.back().storageClass = i->name();
ret.back().log.deserialize(i->log());
auto & arl = i->routes();
for (auto j=arl.begin(); j!= arl.end(); j++) {
ret.back().routes.push_back(StorageClassDump::ArchiveRouteDump());
......@@ -314,6 +316,32 @@ auto cta::objectstore::RootEntry::dumpStorageClasses() -> std::list<StorageClass
return ret;
}
auto cta::objectstore::RootEntry::dumpStorageClass(const std::string& name)
-> StorageClassDump {
checkPayloadReadable();
auto & scl = m_payload.storageclasses();
for (auto i=scl.begin(); i != scl.end(); i++) {
if (i->name() == name) {
StorageClassDump ret;
ret.copyCount = i->copycount();
ret.storageClass = i->name();
auto & arl = i->routes();
for (auto j=arl.begin(); j!= arl.end(); j++) {
ret.routes.push_back(StorageClassDump::ArchiveRouteDump());
auto &r = ret.routes.back();
r.copyNumber = j->copynb();
r.tapePool = j->tapepool();
r.log.deserialize(j->log());
}
return ret;
}
}
std::stringstream err;
err << "In RootEntry::dumpStorageClass: no such storage class: "
<< name;
throw NoSuchStorageClass(err.str());
}
// =============================================================================
// ========== Libraries manipulations ==========================================
// =============================================================================
......
......@@ -104,8 +104,10 @@ public:
std::string storageClass;
uint16_t copyCount;
std::list<ArchiveRouteDump> routes;
CreationLog log;
};
std::list<StorageClassDump> dumpStorageClasses();
StorageClassDump dumpStorageClass(const std::string & name);
// Manipulations of libraries ================================================
void addLibrary(const std::string & library, const CreationLog & log);
......
......@@ -134,11 +134,26 @@ void OStoreDB::assertIsAdminOnAdminHost(const SecurityIdentity& id) const {
void OStoreDB::createStorageClass(const SecurityIdentity& requester,
const std::string& name, const uint16_t nbCopies, const std::string& comment) {
throw exception::Exception("Not Implemented");
RootEntry re(m_objectStore);
ScopedExclusiveLock rel(re);
re.fetch();
objectstore::CreationLog cl(requester.getUser().getUid(),
requester.getUser().getGid(), requester.getHost(),
time(NULL), comment);
re.addStorageClass(name, nbCopies, cl);
re.commit();
}
StorageClass OStoreDB::getStorageClass(const std::string& name) const {
throw exception::Exception("Not Implemented");
RootEntry re(m_objectStore);
ScopedSharedLock rel(re);
re.fetch();
auto sc = re.dumpStorageClass(name);
return cta::StorageClass(name,
sc.copyCount,
cta::UserIdentity(sc.log.uid, sc.log.gid),
sc.log.comment,
sc.log.time);
}
std::list<StorageClass> OStoreDB::getStorageClasses() const {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment