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

Further implemented function to access storage classes in OStoreDB.

parent 0b284c0f
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment