26 #include <sys/types.h>
30 #include "BuiltInObjectTypeIDs.h"
82 PDB_COUT <<
"Catalog Server registering handlers" << endl;
86 CatalogNodeMetadata_TYPEID,
92 PDB_COUT <<
"CatalogServer handler CatalogNodeMetadata_TYPEID calling "
94 << string(request->getItemKey()) << endl;
104 makeObject<SimpleRequestResult>(res, errMsg);
107 res = sendUsingMe->sendObject(response, errMsg);
108 return make_pair(res, errMsg);
114 CatalogDatabaseMetadata_TYPEID,
121 PDB_COUT <<
"--->CatalogServer handler "
122 "CatalogDatabaseMetadata_TYPEID calling "
123 "addDatabaseMetadata"
127 string itemKey = request->getItemKey().c_str();
128 PDB_COUT <<
" Looking for key " + itemKey << endl;
142 makeObject<SimpleRequestResult>(res, errMsg);
145 res = sendUsingMe->sendObject(response, errMsg);
146 return make_pair(res, errMsg);
151 CatalogSetMetadata_TYPEID,
157 PDB_COUT <<
"--->CatalogServer handler CatalogSetMetadata_TYPEID "
158 "calling addSetMetadata"
162 getFunctionality<CatalogServer>().
addSetMetadata(request, errMsg);
167 makeObject<SimpleRequestResult>(res, errMsg);
170 res = sendUsingMe->sendObject(response, errMsg);
171 return make_pair(res, errMsg);
178 CatalogPrintMetadata_TYPEID,
185 PDB_COUT <<
"--->Testing CatalogPrintMetadata handler with timeStamp "
186 << itemToPrint->getTimeStamp().c_str() << endl;
188 getFunctionality<CatalogServer>().
printCatalog(itemToPrint);
191 bool res = sendUsingMe->sendObject(itemToPrint, errMsg);
192 return make_pair(res, errMsg);
197 CatTypeNameSearch_TYPEID,
201 PDB_COUT <<
"received CatTypeNameSearch message" << endl;
209 request->getObjectTypeName());
211 PDB_COUT <<
"searchForObjectTypeName for " +
212 request->getObjectTypeName() +
" is " +
213 std::to_string(typeID)
218 makeObject<CatTypeSearchResult>(typeID);
222 bool res = sendUsingMe->sendObject(response, errMsg);
223 return make_pair(res, errMsg);
228 CatSharedLibraryRequest_TYPEID,
236 vector<char> *putResultHere =
new vector<char>();
238 int16_t typeID = request->getTypeID();
240 PDB_COUT <<
"CatalogServer to handle CatSharedLibraryRequest to "
241 "get shared library "
243 << std::to_string(typeID) << endl;
247 typeID, (*putResultHere), errMsg);
254 res = sendUsingMe->sendObject(response, errMsg);
256 PDB_COUT <<
"On Catalog Server bytes returned " +
257 std::to_string((*putResultHere).size())
262 (*putResultHere).size()};
264 (*putResultHere).size(), (*putResultHere).size());
265 memmove(response->c_ptr(), (*putResultHere).data(),
266 (*putResultHere).size());
269 res = sendUsingMe->sendObject(response, errMsg);
272 delete putResultHere;
275 return make_pair(res, errMsg);
281 CatSharedLibraryByNameRequest_TYPEID,
286 string typeName = request->getTypeLibraryName();
290 if (typeName.empty() ==
true) {
291 typeId = request->getTypeLibraryId();
299 PDB_COUT <<
"Triggering Handler CatalogServer "
300 "CatSharedLibraryByNameRequest for typeName="
301 << typeName <<
" and typeId=" << std::to_string(typeId)
305 string returnedBytes;
308 PDB_COUT << std::string(
"CatalogServer to handle "
309 "CatSharedLibraryByNameRequest to get shared "
310 "library for typeName=")
311 << typeName << std::string(
" and typeId=")
312 << std::to_string(typeId) << endl;
321 makeObject<CatalogUserTypeMetadata>();
323 PDB_COUT <<
" Invoking getSharedLibrary(typeName) from "
324 "CatalogServer Handler "
325 "b/c this is Manager Catalog "
336 makeObject<CatalogUserTypeMetadata>();
338 notFoundResponse->setObjectId(newItemID);
340 res = sendUsingMe->sendObject(notFoundResponse, errMsg);
346 PDB_COUT <<
"Resolved typeName " << typeName
347 <<
" for typeId=" + std::to_string(typeId) << endl;
352 typeName, response, returnedBytes, errMsg);
354 PDB_COUT <<
" Bytes returned YES isManager: " +
355 std::to_string(returnedBytes.size())
357 PDB_COUT <<
"typeId=" + string(response->getObjectID()) << endl;
358 PDB_COUT <<
"ItemName=" + string(response->getItemName()) << endl;
359 PDB_COUT <<
"ItemKey=" + string(response->getItemKey()) << endl;
363 response->setLibraryBytes(returnedBytes);
365 PDB_COUT <<
"Object Id isManager: " + string(response->getObjectID())
366 <<
" | " <<
string(response->getItemKey())
367 <<
" | " +
string(response->getItemName()) << endl;
370 res = sendUsingMe->sendObject(response, errMsg);
372 PDB_COUT <<
" Sending metadata and bytes to caller!" << endl;
374 res = sendUsingMe->sendObject(response, errMsg);
386 makeObject<CatalogUserTypeMetadata>();
388 PDB_COUT <<
" Connecting to the Remote Catalog Server via "
392 "CatalogClient.getSharedLibraryByName(typeName) from "
393 "CatalogServer b/c this is Local Catalog "
404 dummyObjectFile, response,
405 returnedBytes, errMsg);
407 PDB_COUT <<
" Bytes returned NOT isManager: "
408 << std::to_string(returnedBytes.size()) << endl;
415 typeId, returnedBytes, errMsg);
419 PDB_COUT <<
" before sending response Vtable not fixed!!!!!!"
426 makeObject<CatalogUserTypeMetadata>();
428 notFoundResponse->setObjectId(newItemID);
430 res = sendUsingMe->sendObject(notFoundResponse, errMsg);
434 PDB_COUT <<
" before sending response Vtable fixed!!!!"
441 makeObject<CatalogUserTypeMetadata>();
443 String _retBytes(returnedBytes);
444 char objectIDCharArray[50];
445 sprintf(objectIDCharArray,
"%d", typeId);
446 String newItemID(objectIDCharArray);
447 objectToBeSent->setObjectId(newItemID);
448 objectToBeSent->setLibraryBytes(_retBytes);
449 String newTypeName(typeName);
450 objectToBeSent->setItemName(newTypeName);
451 objectToBeSent->setItemKey(newTypeName);
454 res = sendUsingMe->sendObject(objectToBeSent, errMsg);
463 makeObject<CatalogUserTypeMetadata>();
466 PDB_COUT <<
"Resolved typeName" << typeName
467 <<
" for typeId=" << std::to_string(typeId) << endl;
472 typeName, response, returnedBytes, errMsg);
474 PDB_COUT <<
" Bytes returned No isManager: "
475 << std::to_string(returnedBytes.size()) << endl;
477 response->setLibraryBytes(returnedBytes);
479 PDB_COUT <<
"Object Id isLocal: " << string(response->getObjectID())
480 <<
" | " <<
string(response->getItemKey()) <<
" | "
481 <<
string(response->getItemName()) << endl;
486 res = sendUsingMe->sendObject(response, errMsg);
488 PDB_COUT <<
" Sending metadata and Shared Library to caller!"
490 res = sendUsingMe->sendObject(response, errMsg);
496 return make_pair(res, errMsg);
502 CatSetObjectTypeRequest_TYPEID,
512 int16_t typeID = getFunctionality<CatalogServer>().
getObjectType(
513 request->getDatabaseName(), request->getSetName());
515 PDB_COUT <<
"typeID for Set with dbName="
516 << string(request->getDatabaseName())
517 <<
" and setName=" <<
string(request->getSetName())
518 <<
" is " << std::to_string(typeID) << endl;
523 response = makeObject<CatTypeNameSearchResult>(
526 response = makeObject<CatTypeNameSearchResult>(
527 "",
false,
"could not find requested type");
531 bool res = sendUsingMe->sendObject(response, errMsg);
532 return make_pair(res, errMsg);
537 CatCreateDatabaseRequest_TYPEID,
548 bool res = getFunctionality<CatalogServer>().
addDatabase(
549 request->dbToCreate(), errMsg);
553 makeObject<SimpleRequestResult>(res, errMsg);
556 res = sendUsingMe->sendObject(response, errMsg);
557 return make_pair(res, errMsg);
562 CatCreateSetRequest_TYPEID,
570 auto info = request->whichSet();
573 bool res = getFunctionality<CatalogServer>().
addSet(
574 request->whichType(), info.first, info.second, errMsg);
578 makeObject<SimpleRequestResult>(res, errMsg);
581 res = sendUsingMe->sendObject(response, errMsg);
582 return make_pair(res, errMsg);
587 CatDeleteDatabaseRequest_TYPEID,
599 request->dbToDelete(), errMsg);
603 makeObject<SimpleRequestResult>(res, errMsg);
606 res = sendUsingMe->sendObject(response, errMsg);
607 return make_pair(res, errMsg);
612 CatDeleteSetRequest_TYPEID,
620 auto info = request->whichSet();
623 bool res = getFunctionality<CatalogServer>().
deleteSet(
624 info.first, info.second, errMsg);
628 makeObject<SimpleRequestResult>(res, errMsg);
631 res = sendUsingMe->sendObject(response, errMsg);
632 return make_pair(res, errMsg);
639 CatAddNodeToDatabaseRequest_TYPEID,
650 bool res = getFunctionality<CatalogServer>().
addNodeToDB(
651 request->nodeToAdd(), request->whichDB(), errMsg);
656 makeObject<SimpleRequestResult>(res, errMsg);
659 res = sendUsingMe->sendObject(response, errMsg);
660 return make_pair(res, errMsg);
667 CatAddNodeToSetRequest_TYPEID,
678 bool res = getFunctionality<CatalogServer>().
addNodeToSet(
679 request->nodeToAdd(), request->whichDB(), request->whichSet(),
684 makeObject<SimpleRequestResult>(res, errMsg);
687 res = sendUsingMe->sendObject(response, errMsg);
688 return make_pair(res, errMsg);
695 CatRemoveNodeFromDatabaseRequest_TYPEID,
708 request->nodeToRemove(), request->whichDB(), errMsg);
712 makeObject<SimpleRequestResult>(res, errMsg);
715 res = sendUsingMe->sendObject(response, errMsg);
716 return make_pair(res, errMsg);
723 CatRemoveNodeFromSetRequest_TYPEID,
732 auto info = request->whichSet();
737 request->nodeToRemove(), request->whichDB(),
738 request->whichSet(), errMsg);
742 makeObject<SimpleRequestResult>(res, errMsg);
745 res = sendUsingMe->sendObject(response, errMsg);
746 return make_pair(res, errMsg);
751 CatRegisterType_TYPEID,
754 PDB_COUT <<
"Got a CatRegisterType request" << std::endl;
757 PDB_COUT <<
"Got lockGuard" << std::endl;
762 size_t objectSize = sendUsingMe->getSizeOfNextObject();
763 PDB_COUT <<
"Got objectSize=" << objectSize << std::endl;
766 void *memory = malloc(objectSize + 2048);
768 sendUsingMe->getNextObject<
Vector<char>>(memory, res, errMsg);
769 PDB_COUT <<
"Received all data" << std::endl;
771 string soFile(myFile->c_ptr(), objectSize);
772 PDB_COUT <<
"Create a large string on stack" << std::endl;
779 makeObject<SimpleRequestResult>(res, errMsg);
782 res = sendUsingMe->sendObject(response, errMsg);
783 return make_pair(res, errMsg);
788 CatalogCloseSQLiteDBHandler_TYPEID,
794 PDB_COUT <<
"--->Testing CatalogCloseSQLiteDBHandler handler " << endl;
801 makeObject<SimpleRequestResult>(
true, errMsg);
804 bool res = sendUsingMe->sendObject(response, errMsg);
805 return make_pair(res, errMsg);
812 PDB_COUT <<
"searchForObjectTypeName with typeIdentifier ="
813 << std::to_string(typeIdentifier) << endl;
830 vector<char> &putResultHere,
831 std::string &errMsg) {
835 errMsg =
"CatalogServer::getSharedLibrary(): Error: didn't know the "
836 "identifier you sent me";
842 std::string whichFile =
844 std::ifstream in(whichFile, std::ifstream::ate | std::ifstream::binary);
845 size_t fileLen = in.tellg();
848 stat(whichFile.c_str(), &st);
849 fileLen = st.st_size;
850 int filedesc = open(whichFile.c_str(), O_RDONLY);
851 putResultHere.resize(fileLen);
854 read(filedesc, putResultHere.data(), fileLen);
864 string &returnedBytes, std::string &errMsg) {
866 PDB_COUT <<
" Catalog Server->inside get getSharedLibraryByName id for type "
872 string id =
pdbCatalog->itemName2ItemId(metadataCategory, typeName);
877 string typeOfObject =
"data_types";
879 if (
pdbCatalog->retrievesDynamicLibrary(typeName, typeOfObject, itemMetadata,
880 returnedBytes, errMsg) ==
true) {
882 PDB_COUT <<
"Metadata returned at get SharedLibrary Id: "
883 << string(itemMetadata->getItemId()) << endl;
884 PDB_COUT <<
"Metadata returned at get SharedLibrary Key: "
885 << string(itemMetadata->getItemKey()) << endl;
886 PDB_COUT <<
"Bytes after string " << std::to_string(returnedBytes.size())
890 PDB_COUT <<
"Item with key " << typeName <<
" was not found! " << endl;
897 std::string setName) {
898 if (
setTypes.count(make_pair(databaseName, setName)) == 0)
901 return setTypes[make_pair(databaseName, setName)];
907 string &soFile,
string &errMsg) {
912 int filedesc = open(tempFile.c_str(), O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
913 size_t sizeWritten = write(filedesc, soFile.data(), soFile.size());
914 PDB_COUT <<
"addObjectType: sizeWritten=" << sizeWritten << std::endl;
918 void *so_handle =
nullptr;
919 so_handle = dlopen(tempFile.c_str(), RTLD_LOCAL | RTLD_LAZY);
921 const char *dlsym_error = dlerror();
922 errMsg =
"Cannot process shared library. " + string(dlsym_error) +
'\n';
923 std::cout <<
"CatalogServer: " << errMsg << std::endl;
930 const char *dlsym_error;
931 std::string getName =
"getObjectTypeName";
932 typedef char *getObjectTypeNameFunc();
933 getObjectTypeNameFunc *myFunc =
934 (getObjectTypeNameFunc *)dlsym(so_handle, getName.c_str());
936 PDB_COUT <<
"open function: " << getName << endl;
939 if ((dlsym_error = dlerror())) {
941 "Error, can't load function getObjectTypeName in the shared library. " +
942 string(dlsym_error) +
'\n';
949 string typeName(myFunc());
952 PDB_COUT <<
"typeName returned from SO file: " << typeName << endl;
956 int result = rename(tempFile.c_str(), newName.c_str());
958 PDB_COUT <<
"Successfully renaming file " << newName << endl;
960 PDB_COUT <<
"Renaming temp file failed " << newName << endl;
966 PDB_COUT <<
"Fixing vtable ptr for type " << typeName
967 <<
" with metadata retrieved from remote Catalog Server." << endl;
974 if (typeIDFromManagerCatalog == -1)
977 typeCode = typeIDFromManagerCatalog;
979 PDB_COUT <<
"Id Assigned to type " << typeName <<
" was "
980 << std::to_string(typeCode) << endl;
985 vector<string> typeNames;
986 vector<int> typeCodes;
989 typeNames.push_back(pair.first);
990 typeCodes.push_back(pair.second);
995 makeObject<CatalogUserTypeMetadata>();
997 PDB_COUT <<
"before calling registerUserDefinedObject with typeCode="
1003 typeCode, objectMetadata, std::string(soFile.begin(), soFile.end()),
1005 "data_types", errMsg);
1014 std::string &errMsg) {
1017 string setUniqueId = databaseName +
"." + setName;
1018 PDB_COUT <<
"Deleting set " << setUniqueId << endl;
1022 errMsg =
"Database does not exist.\n";
1028 errMsg =
"Set doesn't exist " + databaseName +
"." + setName;
1034 string _setName(databaseName +
"." + setName);
1037 String dbName(databaseName);
1043 metadataObject->setItemId(setId);
1044 metadataObject->setItemKey(setKeyCatalog);
1045 metadataObject->setItemName(setNameCatalog);
1046 metadataObject->setDBName(dbName);
1049 pdbCatalog->deleteMetadataInCatalog(metadataObject, catalogType, errMsg);
1053 makeObject<CatalogDatabaseMetadata>();
1056 makeObject<Vector<CatalogDatabaseMetadata>>();
1061 if (
pdbCatalog->getMetadataFromCatalog(
false, databaseName, databaseItems,
1062 errMsg, catalogType) ==
false)
1065 for (
int i = 0; i < (*databaseItems).size(); i++) {
1066 if ((*databaseItems)[i].getItemKey().c_str() == databaseName)
1067 *dbMetadataObject = (*databaseItems)[i];
1071 (*dbMetadataObject).deleteSet(setNameCatalog);
1074 if (!
pdbCatalog->updateMetadataInCatalog(dbMetadataObject, catalogType,
1084 map<string, pair<bool, string>> updateResults;
1087 makeObject<CatDeleteSetRequest>(databaseName, setName);
1093 for (
auto &
item : updateResults) {
1095 << ((
item.second.first ==
true)
1096 ?
" updated correctly!"
1097 :
" couldn't be updated due to error: ")
1098 <<
item.second.second << endl;
1102 map<string, pair<bool, string>> updateSetResults;
1108 for (
auto &
item : updateSetResults) {
1110 << ((
item.second.first ==
true)
1111 ?
"updated correctly!"
1112 :
"couldn't be updated due to error: ")
1113 <<
item.second.second << endl;
1115 PDB_COUT <<
"******************* deleteSet step completed!!!!!!!" << endl;
1117 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1118 "registered locally!"
1127 std::string setName, std::string &errMsg) {
1131 errMsg =
"Database does not exist.\n";
1136 string setUniqueId = databaseName +
"." + setName;
1138 errMsg =
"Set already exists.\n";
1143 if (typeIdentifier >= 8192 &&
allTypeCodes.count(typeIdentifier) == 0) {
1144 errMsg =
"Type code does not exist.\n";
1145 PDB_COUT << errMsg <<
"TypeId=" << std::to_string(typeIdentifier) << endl;
1149 PDB_COUT <<
"...... Calling CatalogServer :: addSet" << endl;
1152 setTypes[make_pair(databaseName, setName)] = typeIdentifier;
1156 PDB_COUT <<
"Got typeName=" << typeNameStr << endl;
1158 if (typeNameStr ==
"") {
1159 errMsg =
"TypeName doesn not exist";
1163 String typeName(typeNameStr);
1165 PDB_COUT <<
"TypeID for Set with dbName=" << databaseName
1166 <<
" and setName=" << setName <<
" is "
1167 << std::to_string(typeIdentifier) << endl;
1173 string dbId =
pdbCatalog->itemName2ItemId(catalogType, databaseName);
1178 string typeId = std::to_string(typeIdentifier);
1183 String dbName(databaseName);
1186 metadataObject->setItemKey(setKeyCatalog);
1187 metadataObject->setItemName(setNameCatalog);
1193 metadataObject->setDBId(_dbId);
1194 metadataObject->setDBName(dbName);
1196 String _typeId =
String(std::to_string(typeIdentifier));
1198 metadataObject->setTypeId(_typeId);
1199 metadataObject->setTypeName(typeName);
1206 pdbCatalog->addMetadataToCatalog(metadataObject, catalogType,
1209 pdbCatalog->updateMetadataInCatalog(metadataObject, catalogType, errMsg);
1215 makeObject<CatalogDatabaseMetadata>();
1219 makeObject<Vector<CatalogDatabaseMetadata>>();
1221 if (
pdbCatalog->getMetadataFromCatalog(
false, databaseName, databaseItems,
1222 errMsg, catalogType) ==
false)
1225 for (
int i = 0; i < (*databaseItems).size(); i++) {
1226 if ((*databaseItems)[i].getItemKey().c_str() == databaseName)
1227 *dbMetadataObject = (*databaseItems)[i];
1230 (*dbMetadataObject).addSet(setNameCatalog);
1231 (*dbMetadataObject).addType(typeName);
1236 if (
pdbCatalog->updateMetadataInCatalog(dbMetadataObject, catalogType,
1238 PDB_COUT <<
"DB Update Set metadata OK" << endl;
1240 PDB_COUT <<
"DB Update metadata Set Error: " << errMsg << endl;
1252 map<string, pair<bool, string>> updateResults;
1258 for (
auto &
item : updateResults) {
1259 PDB_COUT <<
"Set Metadata broadcasted to node IP: "
1260 <<
item.first + ((
item.second.first ==
true)
1261 ?
" updated correctly!"
1262 :
" couldn't be updated due to error: ")
1263 <<
item.second.second << endl;
1267 map<string, pair<bool, string>> updateSetResults;
1273 for (
auto &
item : updateSetResults) {
1274 PDB_COUT <<
"DB Metadata broadcasted to node IP: "
1275 <<
item.first + ((
item.second.first ==
true)
1276 ?
" updated correctly!"
1277 :
" couldn't be updated due to error: ")
1278 <<
item.second.second << endl;
1280 PDB_COUT <<
"******************* addSet step completed!!!!!!!" << endl;
1282 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1283 "registered locally!"
1294 errMsg =
"Database name already exists.\n";
1298 PDB_COUT <<
"...... Calling CatalogServer :: addDatabase" << endl;
1302 makeObject<CatalogDatabaseMetadata>();
1307 metadataObject->setItemName(dbName);
1311 pdbCatalog->addMetadataToCatalog(metadataObject, catalogType,
1314 pdbCatalog->updateMetadataInCatalog(metadataObject, catalogType, errMsg);
1323 map<string, pair<bool, string>> updateResults;
1327 for (
auto &
item : updateResults) {
1328 PDB_COUT <<
"DB metadata broadcasted to node IP: "
1329 <<
item.first + ((
item.second.first ==
true)
1330 ?
" updated correctly!"
1331 :
" couldn't be updated due to error: ")
1332 <<
item.second.second << endl;
1334 PDB_COUT <<
"******************* addDatabase step completed!!!!!!!" << endl;
1336 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1337 "registered locally!"
1346 std::string &errMsg) {
1350 errMsg =
"Database does not exist.\n";
1356 makeObject<CatalogDatabaseMetadata>();
1358 makeObject<Vector<CatalogDatabaseMetadata>>();
1360 if (
pdbCatalog->getMetadataFromCatalog(
false, databaseName, vectorResultItems,
1361 errMsg, catalogType) ==
false) {
1362 errMsg =
"Database does not exist.\n";
1366 if ((*vectorResultItems).size() == 0) {
1367 errMsg =
"Database does not exist.\n";
1371 *dbMetadataObject = (*vectorResultItems)[0];
1374 for (
int i = 0; i < dbMetadataObject->getListOfSets()->size(); i++) {
1375 if (!
deleteSet(databaseName, (*dbMetadataObject->getListOfSets())[i],
1377 errMsg =
"Failed to delete set ";
1378 errMsg += (*dbMetadataObject->getListOfSets())[i].c_str();
1387 map<string, pair<bool, string>> updateResults;
1391 makeObject<CatDeleteDatabaseRequest>(databaseName);
1394 for (
auto &
item : updateResults) {
1396 PDB_COUT <<
"DB metadata broadcasted to node IP: " <<
item.first
1397 << ((
item.second.first ==
true)
1398 ?
" deleted correctly!"
1399 :
" couldn't be deleted due to error: ")
1400 <<
item.second.second << endl;
1403 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1404 "registered locally!"
1409 return pdbCatalog->deleteMetadataInCatalog(dbMetadataObject, catalogType,
1418 bool isManagerCatalogServer,
string managerIPValue,
1419 int managerPortValue) {
1420 PDBLoggerPtr catalogLogger = make_shared<PDBLogger>(
"catalogLogger");
1428 make_shared<pdb::PDBLogger>(
"clientCatalogToServerLog"));
1432 _setTypes = makeObject<Vector<CatalogSetMetadata>>();
1433 _allDatabases = makeObject<Vector<CatalogDatabaseMetadata>>();
1434 _udfsValues = makeObject<Vector<CatalogUserTypeMetadata>>();
1439 PDB_COUT <<
"Catalog Server ctor is Manager Catalog= "
1440 << std::to_string(this->isManagerCatalogServer) << endl;
1451 PDB_COUT <<
"Loading catalog metadata." << endl;
1454 string emptyString(
"");
1459 false, emptyString, _udfsValues, errMsg,
1464 for (
int i = 0; i < (*_udfsValues).size(); i++) {
1465 string _typeName = (*_udfsValues)[i].getItemKey().c_str();
1466 int16_t _typeId = (int16_t)atoi((*_udfsValues)[i].getObjectID().c_str());
1475 false, emptyString, _allDatabases, errMsg,
1480 for (
int i = 0; i < (*_allDatabases).size(); i++) {
1481 string _dbName = (*_allDatabases)[i].getItemKey().c_str();
1482 for (
int j = 0; j < (*(*_allDatabases)[i].getListOfSets()).size(); j++) {
1483 string _setName = (*(*_allDatabases)[i].getListOfSets())[j].c_str();
1484 string _typeName = (*(*_allDatabases)[i].getListOfTypes())[j].c_str();
1486 PDB_COUT <<
"Database " << _dbName <<
" has set " << _setName
1487 <<
" and type " << _typeName << endl;
1490 PDB_COUT <<
"Adding type= " << _typeName <<
" db= " << _dbName
1491 <<
" _set=" << _setName <<
" typeId= "
1492 << string(
pdbCatalog->getUserDefinedTypesList()[_typeName]
1496 setTypes[make_pair(_dbName, _setName)] =
1497 (int16_t)std::atoi(
pdbCatalog->getUserDefinedTypesList()[_typeName]
1511 for (
int i = 0; i < (*_allNodesInCluster).size(); i++) {
1512 string _nodeAddress = (*_allNodesInCluster)[i].getItemId().c_str();
1513 string _nodeIP = (*_allNodesInCluster)[i].getNodeIP().c_str();
1514 int _nodePort = (*_allNodesInCluster)[i].getNodePort();
1515 string _nodeName = (*_allNodesInCluster)[i].getItemName().c_str();
1516 string _nodeType = (*_allNodesInCluster)[i].getNodeType().c_str();
1517 int status = (*_allNodesInCluster)[i].getNodeStatus();
1519 PDB_COUT << _nodeAddress <<
" | " << _nodeIP <<
" | "
1520 << std::to_string(_nodePort) <<
" | " << _nodeName <<
" | "
1521 << _nodeType <<
" | " << std::to_string(status) << endl;
1526 PDB_COUT <<
"Catalog Metadata successfully loaded!" << endl;
1534 string itemKey = metadataToPrint->getItemName().c_str();
1535 string categoryToPrint = metadataToPrint->getCategoryToPrint().c_str();
1536 string timeStamp = metadataToPrint->getTimeStamp().c_str();
1538 string resultToPrint;
1541 if (categoryToPrint.compare(
"all") == 0) {
1542 pdbCatalog->listNodesInCluster(resultToPrint, errorMsg);
1543 pdbCatalog->listRegisteredDatabases(resultToPrint, errorMsg);
1544 pdbCatalog->listUserDefinedTypes(resultToPrint, errorMsg);
1547 if (categoryToPrint.compare(
"databases") == 0)
1548 pdbCatalog->listRegisteredDatabases(resultToPrint, errorMsg);
1550 if (categoryToPrint.compare(
"sets") == 0)
1551 pdbCatalog->listRegisteredSetsForADatabase(resultToPrint, itemKey,
1554 if (categoryToPrint.compare(
"nodes") == 0)
1555 pdbCatalog->listNodesInCluster(resultToPrint, errorMsg);
1557 if (categoryToPrint.compare(
"udts") == 0)
1558 pdbCatalog->listUserDefinedTypes(resultToPrint, errorMsg);
1561 metadataToPrint->setMetadataToPrint(resultToPrint);
1567 std::string &errMsg) {
1569 string _nodeIP = nodeMetadata->getNodeIP().c_str();
1570 string nodeAddress = _nodeIP +
":" + to_string(nodeMetadata->getNodePort());
1574 errMsg =
"NodeAddress " + nodeAddress +
" is already registered.\n";
1583 makeObject<CatalogNodeMetadata>();
1585 *metadataObject = *nodeMetadata;
1587 pdbCatalog->addMetadataToCatalog(metadataObject,
1588 metadataCategory, errMsg);
1590 PDB_COUT <<
"Node metadata was properly registered in the Catalog!" << endl;
1598 string dbName = dbMetadata->getItemName().c_str();
1602 errMsg =
"Db name: " + dbName +
" is already registered.\n";
1608 makeObject<CatalogDatabaseMetadata>();
1610 *metadataObject = *dbMetadata;
1612 pdbCatalog->addMetadataToCatalog(metadataObject,
1613 metadataCategory, errMsg);
1620 map<string, pair<bool, string>> updateResults;
1624 for (
auto &
item : updateResults) {
1626 << ((
item.second.first ==
true)
1627 ?
" updated correctly!"
1628 :
" couldn't be updated due to error: ")
1629 <<
item.second.second << endl;
1632 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1633 "registered locally!"
1644 string dbName = dbMetadata->getItemName().c_str();
1648 makeObject<CatalogDatabaseMetadata>();
1649 *metadataObject = *dbMetadata;
1651 pdbCatalog->updateMetadataInCatalog(metadataObject, metadataCategory, errMsg);
1658 map<string, pair<bool, string>> updateResults;
1662 for (
auto &
item : updateResults) {
1664 <<
item.first + ((
item.second.first ==
true)
1665 ?
" updated correctly!"
1666 :
" couldn't be updated due to error: ")
1667 <<
item.second.second << endl;
1670 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1671 "registered locally!"
1680 std::string &errMsg) {
1682 string setName = string(setMetadata->getItemName().c_str());
1684 string dbName = string(setMetadata->getDBName().c_str());
1686 int16_t typeId = (int16_t)atoi((*setMetadata).getObjectTypeId().c_str());
1691 "Set name: " + dbName +
"." + setName +
" is already registered.\n";
1695 PDB_COUT <<
"inserting set-----------------> dbName= " << dbName
1696 <<
" setName " << setName <<
" id " << std::to_string(typeId)
1698 setTypes.insert(make_pair(make_pair(dbName, setName), typeId));
1703 *metadataObject = *setMetadata;
1705 PDB_COUT <<
"Adding set metadata for set " << setName << endl;
1706 pdbCatalog->addMetadataToCatalog(metadataObject,
1707 metadataCategory, errMsg);
1714 map<string, pair<bool, string>> updateResults;
1718 for (
auto &
item : updateResults) {
1720 <<
item.first + ((
item.second.first ==
true)
1721 ?
" updated correctly!"
1722 :
" couldn't be updated due to error: ")
1723 <<
item.second.second << endl;
1726 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1727 "registered locally!"
1735 std::string setName, std::string &errMsg) {
1738 errMsg =
"Database does not exist.\n";
1744 errMsg =
"Set does not exists.\n";
1748 PDB_COUT <<
"...... Calling CatalogServer :: addNodeToSet" << endl;
1753 makeObject<CatalogDatabaseMetadata>();
1756 makeObject<Vector<CatalogDatabaseMetadata>>();
1758 if (
pdbCatalog->getMetadataFromCatalog(
false, databaseName, databaseItems,
1759 errMsg, catalogType) ==
false)
1762 for (
int i = 0; i < (*databaseItems).size(); i++) {
1763 if ((*databaseItems)[i].getItemKey().c_str() == databaseName)
1764 *dbMetadataObject = (*databaseItems)[i];
1767 String setNameCatalog(setName);
1771 (*dbMetadataObject).addSetToMap(setNameCatalog, nodeID);
1778 PDB_COUT <<
".......... Invoking updateMetadataInCatalog key: "
1779 << databaseName << endl;
1780 if (
pdbCatalog->updateMetadataInCatalog(dbMetadataObject, catalogType,
1782 PDB_COUT <<
"DB Update Set metadata OK" << endl;
1784 PDB_COUT <<
"DB Update metadata Set Error: " << errMsg << endl;
1795 PDB_COUT <<
"About to broadcast addition of node to set in the cluster: "
1799 map<string, pair<bool, string>> updateSetResults;
1802 PDB_COUT <<
" Broadcasting DB updated Ok. " << endl;
1804 PDB_COUT <<
" Error broadcasting DB update." << endl;
1806 for (
auto &
item : updateSetResults) {
1808 <<
item.first + ((
item.second.first ==
true)
1809 ?
" updated correctly!"
1810 :
" couldn't be updated due to error: ")
1811 <<
item.second.second << endl;
1814 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1815 "registered locally!"
1824 std::string &errMsg) {
1827 errMsg =
"Database does not exist.\n";
1831 PDB_COUT <<
"...... Calling CatalogServer :: addNodeToSet" << endl;
1836 makeObject<CatalogDatabaseMetadata>();
1839 makeObject<Vector<CatalogDatabaseMetadata>>();
1841 if (
pdbCatalog->getMetadataFromCatalog(
false, databaseName, databaseItems,
1842 errMsg, catalogType) ==
false)
1845 for (
int i = 0; i < (*databaseItems).size(); i++) {
1846 if ((*databaseItems)[i].getItemKey().c_str() == databaseName)
1847 *dbMetadataObject = (*databaseItems)[i];
1851 String dbName(databaseName);
1852 (*dbMetadataObject).addNodeToMap(nodeID, dbName);
1859 PDB_COUT <<
".......... Invoking updateMetadataInCatalog key: " +
1862 if (
pdbCatalog->updateMetadataInCatalog(dbMetadataObject, catalogType,
1864 PDB_COUT <<
"DB Update Set metadata OK" << endl;
1866 PDB_COUT <<
"DB Update metadata Set Error: " << errMsg << endl;
1878 PDB_COUT <<
"About to broadcast addition of node to set in the cluster: "
1882 map<string, pair<bool, string>> updateSetResults;
1887 PDB_COUT <<
" Broadcasting DB updated Ok. " << endl;
1889 PDB_COUT <<
" Error broadcasting DB update." << endl;
1891 for (
auto &
item : updateSetResults) {
1893 <<
item.first + ((
item.second.first ==
true)
1894 ?
" updated correctly!"
1895 :
" couldn't be updated due to error: ")
1896 <<
item.second.second << endl;
1900 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1901 "registered locally!"
1910 std::string databaseName,
1911 std::string setName,
1912 std::string &errMsg) {
1913 string setUniqueId = databaseName +
"." + setName;
1917 errMsg =
"Database does not exist.\n";
1924 errMsg =
"Set doesn't exist.\n";
1931 makeObject<CatalogDatabaseMetadata>();
1934 makeObject<Vector<CatalogDatabaseMetadata>>();
1936 if (!
pdbCatalog->getMetadataFromCatalog(
false, databaseName, databaseItems,
1937 errMsg, catalogType)) {
1942 if (databaseItems->size() != 1) {
1943 errMsg =
"Could not find database " + databaseName;
1948 *dbMetadataObject = (*databaseItems)[0];
1950 dbMetadataObject->removeNodeFromSet(nodeIP, setName);
1953 if (
pdbCatalog->updateMetadataInCatalog(dbMetadataObject, catalogType,
1955 PDB_COUT <<
"DB Update Set metadata OK" << endl;
1957 PDB_COUT <<
"DB Update metadata Set Error: " << errMsg << endl;
1966 map<string, pair<bool, string>> updateResults;
1972 for (
auto &
item : updateResults) {
1974 << ((
item.second.first ==
true)
1975 ?
" updated correctly!"
1976 :
" couldn't be updated due to error: ")
1977 <<
item.second.second << endl;
1981 map<string, pair<bool, string>> updateSetResults;
1987 for (
auto &
item : updateSetResults) {
1988 PDB_COUT <<
"DB Metadata broadcasted to Node IP: "
1989 <<
item.first + ((
item.second.first ==
true)
1990 ?
" updated correctly!"
1991 :
" couldn't be updated due to error: ")
1992 <<
item.second.second << endl;
1995 PDB_COUT <<
"This is not Manager Catalog Node, thus metadata was only "
1996 "registered locally!"
2004 std::string databaseName,
2005 std::string &errMsg) {
2006 errMsg =
"Remove node from db not implemented";
2011 template <
class Type>
2014 map<
string, pair<bool, string>> &broadcastResults,
string &errMsg) {
2016 PDBLoggerPtr catalogLogger = make_shared<PDBLogger>(
"distCatalogLogger");
2019 string nodeAddress = string(
item.second.getNodeIP().c_str()) +
":" +
2020 to_string(
item.second.getNodePort());
2021 string nodeIP =
item.second.getNodeIP().c_str();
2022 int nodePort =
item.second.getNodePort();
2028 if (
string(
item.second.getNodeType().c_str()).compare(
"manager") != 0) {
2035 broadcastResults.insert(make_pair(nodeIP, make_pair(res, errMsg)));
2045 template <
class Type>
2046 bool CatalogServer::broadcastCatalogDelete(
2048 map<
string, pair<bool, string>> &broadcastResults,
string &errMsg) {
2050 PDBLoggerPtr catalogLogger = make_shared<PDBLogger>(
"distCatalogLogger");
2054 string nodeAddress = string(
item.second.getNodeIP().c_str()) +
":" +
2055 to_string(
item.second.getNodePort());
2056 string nodeIP =
item.second.getNodeIP().c_str();
2057 int nodePort =
item.second.getNodePort();
2063 if (
string(
item.second.getNodeType().c_str()).compare(
"manager") != 0) {
2069 broadcastResults.insert(make_pair(nodeIP, make_pair(res, errMsg)));
2072 PDB_COUT <<
"Don't broadcast to " + nodeAddress +
2073 " because it has the manager catalog."
2086 return pdbCatalog->keyIsFound(catalogType, dbName, result);
2093 string setUniqueId = dbName +
"." + setName;
2094 return pdbCatalog->keyIsFound(catalogType, setUniqueId, result);
2101 PDB_COUT <<
"searching to register node " << nodeIP << endl;
2103 return pdbCatalog->keyIsFound(catalogType, nodeIP, result);
2119 map<
string, pair<bool, string>> &broadcastResults,
2125 map<
string, pair<bool, string>> &broadcastResults,
2131 map<
string, pair<bool, string>> &broadcastResults,
int16_t addObjectType(int16_t typeID, string &soFile, string &errMsg)
void registerHandlers(PDBServer &forMe) override
bool deleteDatabase(string databaseName, string &errMsg)
bool deleteSet(std::string databaseName, std::string setName, std::string &errMsg)
bool addSet(int16_t typeIdentifier, string databaseName, string setName, string &errMsg)
Handle< Vector< CatalogSetMetadata > > _setTypes
map< int16_t, string > allTypeCodes
bool broadcastCatalogDelete(Handle< Type > metadataToSend, map< string, pair< bool, string >> &broadcastResults, string &errMsg)
bool isManagerCatalogServer
bool addSetMetadata(Handle< CatalogSetMetadata > &setMetadata, std::string &errMsg)
map< pair< string, string >, int16_t > setTypes
bool addDatabaseMetadata(Handle< CatalogDatabaseMetadata > &dbMetadata, std::string &errMsg)
PDBCatalogPtr getCatalog()
vector< string > allNodesInCluster
bool getSharedLibrary(int16_t identifier, vector< char > &putResultHere, std::string &errMsg)
bool deleteGenericMetadata(pdb::Handle< Type > metadataItem, std::string &errMsg)
bool broadcastCatalogUpdate(Handle< Type > metadataToSend, map< string, pair< bool, string >> &broadcastResults, string &errMsg)
bool addNodeMetadata(Handle< CatalogNodeMetadata > &nodeMetadata, std::string &errMsg)
std::string catalogDirectory
int16_t searchForObjectTypeName(std::string objectTypeName)
bool getSharedLibraryByTypeName(std::string typeName, Handle< CatalogUserTypeMetadata > &typeMetadata, string &sharedLibraryBytes, std::string &errMsg)
bool removeNodeFromSet(std::string nodeIP, std::string databaseName, std::string setName, std::string &errMsg)
std::shared_ptr< PDBCommunicator > PDBCommunicatorPtr
Handle< Vector< CatalogNodeMetadata > > _allNodesInCluster
bool addNodeToSet(std::string nodeIP, std::string databaseName, std::string setName, std::string &errMsg)
PDBLoggerPtr catServerLogger
bool getSharedLibraryByTypeName(int16_t identifier, std::string &typeName, std::string sharedLibraryFileName, Handle< CatalogUserTypeMetadata > &typeMetadata, string &sharedLibraryBytes, std::string &errMsg)
bool updateDatabaseMetadata(Handle< CatalogDatabaseMetadata > &dbMetadata, std::string &errMsg)
shared_ptr< PDBCatalog > PDBCatalogPtr
void registerHandler(int16_t typeID, PDBCommWorkPtr handledBy)
bool isDatabaseRegistered(string dbName)
void setIsManagerCatalogServer(bool isManagerCatalogServerIn)
map< string, int16_t > allTypeNames
static int16_t lookupBuiltInType(std::string objectTypeName)
std::shared_ptr< PDBLogger > PDBLoggerPtr
bool removeNodeFromDB(std::string nodeIP, std::string databaseName, std::string &errMsg)
int16_t searchForObjectTypeName(string objectTypeName)
Handle< Vector< CatalogUserTypeMetadata > > _udfsValues
bool registerGenericMetadata(pdb::Handle< Type > metadataItem, std::string &errMsg)
bool addDatabase(string databaseName, string &errMsg)
pthread_mutex_t workingMutex
bool isNodeRegistered(string nodeIP)
bool isSetRegistered(string dbName, string setName)
Handle< Vector< CatalogDatabaseMetadata > > _allDatabases
CatalogClient catalogClientConnectionToManagerCatalogServer
int16_t getObjectType(string databaseName, string setName)
CatalogServer(std::string catalogDirectory, bool isManagerCatalogServer, std::string managerIP, int managerPort)
bool addNodeToDB(std::string nodeIP, std::string databaseName, std::string &errMsg)
bool getIsManagerCatalogServer()