hwc_init_state.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "hwc_init_state.h"
  2. // local
  3. #include "daemon.h"
  4. // common
  5. #include "config/dbconfig.h"
  6. #include "table/table_def_manager.h"
  7. // connector
  8. #include "mysql_operation.h"
  9. InitState::InitState(HwcStateManager* p_hwc_state_manager)
  10. : HwcStateBase()
  11. {
  12. p_hwc_state_manager_ = p_hwc_state_manager;
  13. }
  14. InitState::~InitState()
  15. { }
  16. void InitState::Enter()
  17. {
  18. log4cplus_info(LOG_KEY_WORD "enter into init state...");
  19. DaemonBase::DaemonStart(CComm::backend);
  20. assert(p_hwc_state_manager_);
  21. if (CComm::registor.Init()) {
  22. log4cplus_error("init dump controller file error.");
  23. p_hwc_state_manager_->ChangeState(E_HWC_STATE_FAULT);
  24. return;
  25. }
  26. // 锁住hwc的日志目录
  27. if (CComm::uniq_lock()) {
  28. log4cplus_error("another process already running, exit");
  29. p_hwc_state_manager_->ChangeState(E_HWC_STATE_FAULT);
  30. return;
  31. }
  32. }
  33. void InitState::Exit()
  34. {
  35. log4cplus_error(LOG_KEY_WORD "exit init state");
  36. }
  37. void InitState::HandleEvent()
  38. {
  39. // 解析yaml配置文件
  40. log4cplus_debug("dtc conf file:%s " , CComm::dtc_conf);
  41. DTCConfig* p_dtc_config = new DTCConfig();
  42. if (p_dtc_config->load_yaml_file(CComm::dtc_conf, false) == -1)
  43. return -1;
  44. DbConfig* p_db_Config = DbConfig::Load(p_dtc_config , 1);
  45. if (p_db_Config == NULL)
  46. return -1;
  47. DTCTableDefinition* p_dtc_tab_def = p_db_Config->build_table_definition();
  48. TableDefinitionManager::instance()->set_cur_table_def(p_dtc_tab_def , 0);
  49. // 初始化mysql process
  50. // 暂时不按key选择机器,冷数据库对外为一台访问配置
  51. CComm::mysql_process_.do_init(0 , p_db_Config, p_dtc_tab_def, 0);
  52. // 绑定yaml文件解析器至StateManager
  53. p_hwc_state_manager_->BindDBConfigParser(p_db_Config);
  54. // 跳转至下一个状态
  55. p_hwc_state_manager_->ChangeState(E_HWC_STATE_REGISTER);
  56. }