19 #ifndef CATALOG_CLIENT_CC
20 #define CATALOG_CLIENT_CC
27 #include <sys/types.h>
56 bool pointsToCatalogManagerIn) {
99 std::string &errMsg) {
104 std::ifstream in(fileContainingSharedLib,
105 std::ifstream::ate | std::ifstream::binary);
107 errMsg =
"The file " + fileContainingSharedLib +
108 " doesn't exist or cannot be opened.\n";
112 size_t fileLen = in.tellg();
114 PDB_COUT <<
"file " << fileContainingSharedLib << endl;
115 PDB_COUT <<
"size " << fileLen << endl;
116 PDB_COUT <<
"Registering type " << fileContainingSharedLib << std::endl;
122 makeObject<Vector<char>>(fileLen, fileLen);
125 int filedesc = open(fileContainingSharedLib.c_str(), O_RDONLY);
126 read(filedesc, putResultHere->c_ptr(), fileLen);
133 if (result !=
nullptr) {
134 if (!result->getRes().first) {
135 errMsg =
"Error registering type: " + result->getRes().second;
136 myLogger->error(
"Error registering type: " +
137 result->getRes().second);
143 "Error registering type: got null pointer on return message.\n";
144 myLogger->error(
"Error registering type: got null pointer on "
145 "return message.\n");
157 return simpleRequest<ShutDown, SimpleRequestResult, bool>(
160 if (result !=
nullptr) {
161 if (!result->getRes().first) {
162 errMsg =
"Error shutting down server: " + result->getRes().second;
163 myLogger->error(
"Error shutting down server: " +
164 result->getRes().second);
169 errMsg =
"Error getting type name: got nothing back from catalog";
188 PDB_COUT <<
"searchForObjectTypeName for " << objectTypeName << std::endl;
189 return simpleRequest<CatTypeNameSearch, CatTypeSearchResult, int16_t>(
192 if (result !=
nullptr) {
193 PDB_COUT <<
"searchForObjectTypeName: getTypeId="
194 << result->getTypeID() << std::endl;
195 return result->getTypeID();
197 PDB_COUT <<
"searchForObjectTypeName: error in getting typeId"
207 std::string sharedLibraryFileName) {
210 PDB_COUT <<
"CatalogClient: getSharedLibrary for id=" << identifier
213 makeObject<CatalogUserTypeMetadata>();
214 string sharedLibraryBytes;
218 string typeNameToSearch =
"";
221 identifier, typeNameToSearch, sharedLibraryFileName, tempMetadataObject,
222 sharedLibraryBytes, errMsg);
224 PDB_COUT <<
"CatalogClient: deleted putResultHere" << std::endl;
230 int16_t identifier, std::string &typeNameToSearch,
231 std::string sharedLibraryFileName,
233 std::string &errMsg) {
235 PDB_COUT <<
"inside CatalogClient getSharedLibraryByTypeName for type="
236 << typeNameToSearch <<
" and id=" << identifier << std::endl;
243 PDB_COUT <<
"In CatalogClient- Handling CatSharedLibraryByNameRequest "
247 if (result ==
nullptr) {
248 std::cout <<
"FATAL ERROR: can't connect to remote server to fetch "
251 << identifier << std::endl;
256 int16_t returnedTypeId = std::atoi((result->getObjectID()).c_str());
257 PDB_COUT <<
"Cat Client - Object Id returned " << returnedTypeId
260 if (returnedTypeId == -1) {
261 errMsg =
"Error getting shared library: type not found in Manager "
263 PDB_COUT <<
"Error getting shared library: type not found in Manager "
269 PDB_COUT <<
"Cat Client - Finally bytes returned "
270 << result->getLibraryBytes().size() << endl;
272 if (result->getLibraryBytes().size() == 0) {
273 errMsg =
"Error getting shared library, no data returned.\n";
274 PDB_COUT <<
"Error getting shared library, no data returned.\n"
280 typeNameToSearch = std::string((*result).getItemName());
281 sharedLibraryBytes = string(result->getLibraryBytes().c_str(),
282 result->getLibraryBytes().size());
284 PDB_COUT <<
" Metadata in Catalog Client " << (*result).getObjectID()
285 <<
" | " << (*result).getItemKey() <<
" | "
286 << (*result).getItemName() << endl;
288 PDB_COUT <<
"copying bytes received in CatClient # bytes "
289 << sharedLibraryBytes.size() << endl;
292 int filedesc = open(sharedLibraryFileName.c_str(), O_CREAT | O_WRONLY,
294 PDB_COUT <<
"Writing file " << sharedLibraryFileName.c_str() <<
"\n";
295 write(filedesc, sharedLibraryBytes.c_str(), sharedLibraryBytes.size());
298 PDB_COUT <<
"objectFile is written by CatalogClient" << std::endl;
301 identifier, typeNameToSearch);
307 std::string &errMsg) {
313 if (result !=
nullptr) {
314 auto success = result->wasSuccessful();
315 if (!success.first) {
316 errMsg =
"Error getting type name: " + success.second;
317 myLogger->error(
"Error getting type name: " + success.second);
319 return result->getTypeName();
321 errMsg =
"Error getting type name: got nothing back from catalog";
322 return std::string(
"");
324 databaseName, setName);
329 std::string setName, std::string &errMsg) {
330 PDB_COUT <<
"CatalogClient: to create set..." << std::endl;
331 return simpleRequest<CatCreateSetRequest, SimpleRequestResult, bool>(
334 PDB_COUT <<
"CatalogClient: received response for creating set"
336 if (result !=
nullptr) {
337 if (!result->getRes().first) {
338 errMsg =
"Error creating set: " + result->getRes().second;
339 std::cout <<
"errMsg" << std::endl;
340 myLogger->error(
"Error creating set: " + result->getRes().second);
343 PDB_COUT <<
"CatalogClient: created set" << std::endl;
346 errMsg =
"Error getting type name: got nothing back from catalog";
347 std::cout << errMsg << std::endl;
350 databaseName, setName, typeID);
355 std::string &errMsg) {
357 return simpleRequest<CatCreateDatabaseRequest, SimpleRequestResult, bool>(
360 if (result !=
nullptr) {
361 if (!result->getRes().first) {
362 errMsg =
"Error creating database: " + result->getRes().second;
363 myLogger->error(
"Error creating database: " +
364 result->getRes().second);
369 errMsg =
"Error getting type name: got nothing back from catalog";
378 std::string &errMsg) {
380 return simpleRequest<CatDeleteSetRequest, SimpleRequestResult, bool>(
383 if (result !=
nullptr) {
384 if (!result->getRes().first) {
385 errMsg =
"Error deleting set: " + result->getRes().second;
386 myLogger->error(
"Error deleting set: " + result->getRes().second);
391 errMsg =
"Error getting type name: got nothing back from catalog";
394 databaseName, setName);
400 std::string &errMsg) {
402 return simpleRequest<CatDeleteDatabaseRequest, SimpleRequestResult, bool>(
405 if (result !=
nullptr) {
406 if (!result->getRes().first) {
407 errMsg =
"Error deleting database: " + result->getRes().second;
408 myLogger->error(
"Error deleting database: " +
409 result->getRes().second);
414 errMsg =
"Error getting type name: got nothing back from catalog";
423 std::string setName, std::string &errMsg) {
425 return simpleRequest<CatAddNodeToSetRequest, SimpleRequestResult, bool>(
428 if (result !=
nullptr) {
429 if (!result->getRes().first) {
430 errMsg =
"Error creating set: " + result->getRes().second;
431 myLogger->error(
"Error creating set: " + result->getRes().second);
436 errMsg =
"Error getting type name: got nothing back from catalog";
439 databaseName, setName, nodeIP);
445 std::string &errMsg) {
447 return simpleRequest<CatAddNodeToDatabaseRequest, SimpleRequestResult, bool>(
450 if (result !=
nullptr) {
451 if (!result->getRes().first) {
452 errMsg =
"Error creating database: " + result->getRes().second;
453 myLogger->error(
"Error creating database: " +
454 result->getRes().second);
459 errMsg =
"Error getting type name: got nothing back from catalog";
462 databaseName, nodeIP);
468 std::string databaseName,
470 std::string &errMsg) {
472 return simpleRequest<CatRemoveNodeFromSetRequest, SimpleRequestResult, bool>(
475 if (result !=
nullptr) {
476 if (!result->getRes().first) {
477 errMsg =
"Error deleting set: " + result->getRes().second;
478 myLogger->error(
"Error deleting set: " + result->getRes().second);
483 errMsg =
"Error getting type name: got nothing back from catalog";
486 databaseName, setName, nodeIP);
492 std::string databaseName,
493 std::string &errMsg) {
499 if (result !=
nullptr) {
500 if (!result->getRes().first) {
501 errMsg =
"Error deleting database: " + result->getRes().second;
502 myLogger->error(
"Error deleting database: " +
503 result->getRes().second);
508 errMsg =
"Error getting type name: got nothing back from catalog";
511 databaseName, nodeIP);
516 std::string &errMsg) {
517 PDB_COUT <<
"inside registerDatabaseMetadata" << endl;
519 return simpleRequest<CatalogDatabaseMetadata, SimpleRequestResult, bool>(
522 if (result !=
nullptr) {
523 if (!result->getRes().first) {
524 errMsg =
"Error registering database metadata: " +
525 result->getRes().second;
526 myLogger->error(
"Error registering database metadata: " +
527 result->getRes().second);
532 errMsg =
"Error getting type name: got nothing back from catalog";
541 PDB_COUT <<
"registerNodeMetadata for item: " << (*nodeData) << endl;
543 return simpleRequest<CatalogNodeMetadata, SimpleRequestResult, bool>(
546 if (result !=
nullptr) {
547 if (!result->getRes().first) {
549 "Error registering node metadata: " + result->getRes().second;
550 myLogger->error(
"Error registering node metadata: " +
551 result->getRes().second);
556 errMsg =
"Error registering node metadata in the catalog";
567 PDB_COUT <<
"itemToSearch " << itemToSearch->getItemName().c_str() << endl;
568 PDB_COUT <<
"from TimeStamp " << itemToSearch->getTimeStamp().c_str() << endl;
570 return simpleRequest<pdb::CatalogPrintMetadata, CatalogPrintMetadata, string>(
573 if (result !=
nullptr) {
574 string res = result->getMetadataToPrint();
577 errMsg =
"Error printing catalog metadata.";
586 std::string &errMsg) {
589 pdb::makeObject<CatalogPrintMetadata>(
"",
"0", categoryToPrint);
591 return simpleRequest<pdb::CatalogPrintMetadata, CatalogPrintMetadata, string>(
594 if (result !=
nullptr) {
595 string resultToPrint = result->getMetadataToPrint();
596 return resultToPrint;
598 errMsg =
"Error printing catalog metadata.";
606 string category =
"databases";
611 std::string &errMsg) {
613 string category =
"sets";
619 string category =
"nodes";
625 string category =
"udts";
631 string category =
"all";
637 return simpleRequest<CatalogCloseSQLiteDBHandler, SimpleRequestResult, bool>(
640 if (result !=
nullptr) {
641 if (!result->getRes().first) {
643 "Error printing catalog metadata: " + result->getRes().second;
644 myLogger->error(
"Error printing catalog metadata: " +
645 result->getRes().second);
650 errMsg =
"Error printing catalog metadata.";
657 template <
class Type>
659 std::string &errMsg) {
661 return simpleRequest<Type, SimpleRequestResult, bool>(
664 if (result !=
nullptr) {
665 if (!result->getRes().first) {
667 "Error registering node metadata: " + result->getRes().second;
668 myLogger->error(
"Error registering node metadata: " +
669 result->getRes().second);
674 errMsg =
"Error registering node metadata in the catalog";
682 template <
class Type>
684 std::string &errMsg) {
686 return simpleRequest<Type, SimpleRequestResult, bool>(
689 if (result !=
nullptr) {
690 if (!result->getRes().first) {
691 errMsg =
"Error removing node metadata: " + result->getRes().second;
692 myLogger->error(
"Error removing node metadata: " +
693 result->getRes().second);
698 errMsg =
"Error removing node metadata in the catalog";
bool registerType(std::string fileContainingSharedLib, std::string &errMsg)
string listNodesInCluster(std::string &errMsg)
string listRegisteredSetsForADatabase(std::string databaseName, std::string &errMsg)
string listAllRegisteredMetadata(std::string &errMsg)
bool registerDatabaseMetadata(std::string databaseName, std::string &errMsg)
void setPointsToManagerCatalog(bool pointsToManager)
bool deleteSet(std::string databaseName, std::string setName, std::string &errMsg)
virtual void registerHandlers(PDBServer &forMe) override
bool removeNodeFromSet(std::string nodeIP, std::string databaseName, std::string setName, std::string &errMsg)
bool deleteGenericMetadata(pdb::Handle< Type > metadataItem, std::string &errMsg)
std::string getObjectType(std::string databaseName, std::string setName, std::string &errMsg)
int16_t searchForObjectTypeName(std::string objectTypeName)
bool addNodeToSet(std::string nodeIP, std::string databaseName, std::string setName, std::string &errMsg)
bool getSharedLibraryByTypeName(int16_t identifier, std::string &typeName, std::string sharedLibraryFileName, Handle< CatalogUserTypeMetadata > &typeMetadata, string &sharedLibraryBytes, std::string &errMsg)
bool shutDownServer(std::string &errMsg)
bool deleteDatabase(std::string databaseName, std::string &errMsg)
static CatalogClient * getCatalogClient()
string listUserDefinedTypes(std::string &errMsg)
bool getPointsToManagerCatalog()
bool createSet(std::string databaseName, std::string setName, std::string &errMsg)
bool addNodeToDB(std::string nodeIP, std::string databaseName, std::string &errMsg)
pthread_mutex_t workingMutex
static void setCatalogClient(CatalogClient *catalog)
bool registerNodeMetadata(pdb::Handle< pdb::CatalogNodeMetadata > nodeData, std::string &errMsg)
std::shared_ptr< PDBLogger > PDBLoggerPtr
bool closeCatalogSQLite(std::string &errMsg)
bool registerGenericMetadata(pdb::Handle< Type > metadataItem, std::string &errMsg)
bool createDatabase(std::string databaseName, std::string &errMsg)
ReturnType simpleSendDataRequest(PDBLoggerPtr myLogger, int port, std::string address, ReturnType onErr, size_t bytesForRequest, function< ReturnType(Handle< ResponseType >)> processResponse, Handle< Vector< DataType >> dataToSend, RequestTypeParams &&...args)
string listRegisteredDatabases(std::string &errMsg)
string printCatalogMetadata(pdb::Handle< pdb::CatalogPrintMetadata > itemToSearch, std::string &errMsg)
ReturnType simpleRequest(PDBLoggerPtr myLogger, int port, std::string address, ReturnType onErr, size_t bytesForRequest, function< ReturnType(Handle< ResponseType >)> processResponse, RequestTypeParams &&...args)
bool removeNodeFromDB(std::string nodeIP, std::string databaseName, std::string &errMsg)
bool getSharedLibrary(int16_t identifier, std::string sharedLibraryFileName)
bool pointsToCatalogManager