/src/mongosDaemon.cpp

https://github.com/deltaforge/nebu-app-mongo · C++ · 81 lines · 60 code · 19 blank · 2 comment · 4 complexity · e5075e5f8fad59aaa3ee8c294c81d922 MD5 · raw file

  1. #include "mongoAdapter.h"
  2. #include "mongocfgDaemon.h"
  3. #include "mongodDaemon.h"
  4. #include "mongosDaemon.h"
  5. #include "replicaSet.h"
  6. #include "nebu-app-framework/commandRunner.h"
  7. #include "log4cxx/logger.h"
  8. #include "mongo/bson/bson.h"
  9. #include <sstream>
  10. // Using declarations - mongo-cxx-driver
  11. using mongo::BSONArrayBuilder;
  12. using mongo::BSONObj;
  13. // Using declarations - standard library
  14. using std::set;
  15. using std::shared_ptr;
  16. using std::string;
  17. using std::stringstream;
  18. static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("nebu.mongo.MongocfgDaemon"));
  19. namespace nebu
  20. {
  21. namespace app
  22. {
  23. namespace mongo
  24. {
  25. bool MongosDaemon::launch()
  26. {
  27. stringstream ss;
  28. ss << "scripts/launch-router.sh" <<
  29. " '" << this->getHostname() << "'" <<
  30. " '" << this->getPortNo() << "'" <<
  31. " '" << this->getConfigServers() << "'";
  32. int result = NEBU_RUNCOMMAND(ss.str());
  33. if (result == 0) {
  34. this->launched = true;
  35. LOG4CXX_DEBUG(logger, "Launch Successfull: " << this->getHostname());
  36. }
  37. return this->launched;
  38. }
  39. void MongosDaemon::setConfigServers(set<shared_ptr<MongocfgDaemon>> cfgServers)
  40. {
  41. stringstream configServers;
  42. for (set<shared_ptr<MongocfgDaemon>>::iterator cfg = cfgServers.begin();
  43. cfg != cfgServers.end();
  44. cfg++)
  45. {
  46. configServers << (*cfg)->getHostPortPair() << ",";
  47. }
  48. string configServerList = configServers.str();
  49. configServerList.erase(configServerList.end() - 1);
  50. this->setConfigServers(configServerList);
  51. }
  52. bool MongosDaemon::registerReplicaSet(shared_ptr<ReplicaSet> replicaSet)
  53. {
  54. stringstream shardID;
  55. shardID << replicaSet->getName() << "/" << (*replicaSet->getDataServers().begin())->getHostPortPair();
  56. BSONObj shardingCommand = BSON("addShard" << shardID.str());
  57. BSONObj result = MongoAdapter::getInstance()->executeCommand(this->getHostPortPair(), "admin", shardingCommand);
  58. return (result["ok"].Number() > 0);
  59. }
  60. }
  61. }
  62. }