32 vector<string>* dataTypePaths,
42 sets =
new map<SetID, SetPtr>();
43 pthread_mutex_init(&
setLock,
nullptr);
48 if (this->
metaPath.compare(
"") != 0) {
49 this->conf->createDir(this->
metaPath);
51 for (i = 0; i < this->
dataPaths->size(); i++) {
53 this->conf->createDir(dataPath);
65 if (
sets !=
nullptr) {
86 sprintf(buffer,
"%s/%d_%s", typePath.c_str(),
setId, setName.c_str());
87 return string(buffer);
93 if (this->
sets->find(setId) != this->
sets->end()) {
94 this->
logger->writeLn(
"UserType: set exists.");
100 vector<string> dataFilePaths;
102 for (i = 0; i < this->
dataPaths->size(); i++) {
105 file = make_shared<PartitionedFile>(this->
nodeId,
114 SetPtr set = make_shared<UserSet>(
117 this->logger->writeLn(
"UserType: Out of Memory.");
120 this->logger->writeLn(
"UserType: set added.");
122 this->
sets->insert(pair<SetID, SetPtr>(setId, set));
123 pthread_mutex_unlock(&
setLock);
132 map<SetID, SetPtr>::iterator setIter;
133 if ((setIter = this->
sets->find(setId)) != this->
sets->end()) {
134 this->
logger->writeLn(
"UserType: removing input buffer for set:");
135 this->
logger->writeInt(setId);
136 this->
logger->writeLn(
"\n");
137 setIter->second->getFile()->clear();
139 this->
sets->erase(setIter);
140 pthread_mutex_unlock(&
setLock);
141 this->
logger->writeLn(
"UserType: set is removed.");
145 this->
logger->writeLn(
"UserType: set doesn't exist.");
151 map<SetID, SetPtr>::iterator setIter;
152 if ((setIter =
sets->find(setId)) !=
sets->end()) {
153 return setIter->second;
159 using namespace boost::filesystem;
166 if (exists(metaTypeDir)) {
167 if (is_directory(metaTypeDir)) {
168 vector<path> metaSetFiles;
170 directory_iterator(metaTypeDir), directory_iterator(), back_inserter(metaSetFiles));
171 vector<path>::iterator iter;
176 for (iter = metaSetFiles.begin(); iter != metaSetFiles.end(); iter++) {
177 if (is_regular_file(*iter)) {
179 path = std::string(iter->c_str());
180 dirName = path.substr(path.find_last_of(
'/') + 1, path.length() - 1);
182 name = dirName.substr(dirName.find(
'_') + 1, dirName.length() - 1);
184 setId = stoul(dirName.substr(0, dirName.find(
'_')));
187 if (this->sets->find(setId) != this->sets->end()) {
188 this->logger->writeLn(
"UserType: set exists.");
194 this->nodeId, this->dbId, this->id, setId, path, this->logger);
196 partitionedFile->buildMetaDataFromMetaPartition(
nullptr);
197 partitionedFile->initializeDataFiles();
198 partitionedFile->openData();
200 SetPtr set = make_shared<UserSet>(partitionedFile->getPageSize(),
212 this->logger->error(
"Fatal Error: UserType: out of memory.");
215 this->sets->insert(pair<SetID, SetPtr>(setId, set));
217 this->logger->writeLn(
"UserType: set added.");
void setId(UserTypeID id)
int addSet(string setName, SetID setId, size_t pageSize=DEFAULT_PAGE_SIZE)
UserType(NodeID nodeId, DatabaseID dbId, UserTypeID id, string name, ConfigurationPtr conf, pdb::PDBLoggerPtr logger, SharedMemPtr shm, string metaTypePath, vector< string > *dataTypePaths, PageCachePtr cache, PageCircularBufferPtr flushBuffer)
shared_ptr< PageCache > PageCachePtr
map< SetID, SetPtr > * sets
SetPtr getSet(SetID setId)
vector< string > * dataPaths
bool initializeFromTypeDir(path typeDir)
shared_ptr< PartitionedFile > PartitionedFilePtr
shared_ptr< SharedMem > SharedMemPtr
bool initializeFromMetaTypeDir(path metaTypeDir)
void setName(string name)
shared_ptr< Configuration > ConfigurationPtr
std::shared_ptr< PDBLogger > PDBLoggerPtr
int removeSet(SetID setId)
string encodePath(string typePath, SetID setId, string setName)
shared_ptr< UserSet > SetPtr
PageCircularBufferPtr flushBuffer
shared_ptr< PageCircularBuffer > PageCircularBufferPtr