huli 4 vuotta sitten
vanhempi
commit
4186d86690

+ 1 - 1
error_code/error_code.h

@@ -302,7 +302,7 @@ enum Error_code
 
     // 数据库操作
     DB_ERROR_BASE                                   = 0x20020000,
-    DB_INIT_FAILED,
+    DB_INIT_FAILED,									//数据库初始化失败
     DB_CONNECT_FAILED,                              //数据库连接失败
     DB_INSERT_FAILED,                               //数据库插入失败
     DB_DELETE_FAILED,                               //数据库删除失败

+ 21 - 3
parkspace_allocation/database_controller.cpp

@@ -25,6 +25,9 @@ Error_manager Database_controller::database_controller_init(std::string ip, int
     }
     if(m_mysql_driver == nullptr)
     {
+    	//胡力 直接修改状态
+		m_database_controller_status = E_FAULT;
+
         mb_initialized = false;
         return DB_INIT_FAILED;
     }
@@ -344,21 +347,29 @@ Error_manager Database_controller::check_status()
 // 补充连接
 Error_manager Database_controller::fill_up_pool(int add_num)
 {
+	//胡力 检查  m_conn_pool_size 的计数, 是0直接报错!!!!
+
+
     std::lock_guard<std::mutex> lck(m_conn_mutex);
     // 填充连接池
     int retry_count = 3;
-    int added_num = 0;
+    int added_num = 0;  //胡力  不要这个计数  直接使用  m_db_conn_pool.size()
+
+    //胡力 建议修改如下
+//    while (m_db_conn_pool.size() < add_num || retry_count > 0)
+
     while (m_db_conn_pool.size() < m_conn_pool_size && added_num<add_num)
     {
         try
         {
             // 三次创建连接失败则暂时释放锁
-            if (retry_count <= 0)
+            if (retry_count <= 0) //胡力 放到while 里面一起判断!!!
             {
                 mb_connected = false;
                 break;
             }
 
+            //胡力  数据库连接的指针   建议改名 tp_sql_connnect
             boost::shared_ptr<sql::Connection> t_conn_ptr(m_mysql_driver->connect(m_db_param.connect_string, m_db_param.username, m_db_param.pass));
 
             if (t_conn_ptr != nullptr && t_conn_ptr->isValid())
@@ -370,7 +381,7 @@ Error_manager Database_controller::fill_up_pool(int add_num)
             {
                 retry_count--;
             }
-            
+
         }
         catch (sql::SQLException &e)
         {
@@ -381,11 +392,18 @@ Error_manager Database_controller::fill_up_pool(int add_num)
             retry_count--;
         }
     }
+
+    //huli 不用解锁     std::lock_guard<std::mutex> lck(m_conn_mutex); 会自动解锁
     m_conn_mutex.unlock();
+
+
+    //胡力 直接判断 retry_count <= 0  修改 m_database_controller_status
     if(mb_connected)
     {
         return SUCCESS;
     }else{
         return DB_CONNECT_FAILED;
     }
+
+    //胡力 如果报错 队列中部分成功要回收处理    需要讨论!!!!!!!!!!!!!!!!!!
 }

+ 23 - 4
parkspace_allocation/database_controller.h

@@ -30,7 +30,12 @@
 
 
 
-#define DB_UPDATE_INTERVAL_MILLI 20000 
+#define DB_UPDATE_INTERVAL_MILLI 20000
+
+//胡力  数据库连接线路的默认个数		默认5个
+#define DB_CONNECT_QUEUE_SIZE 		5
+
+
 
 class Database_controller : public Singleton<Database_controller>
 {
@@ -45,13 +50,23 @@ public:
         std::string db_name;
     } db_param;
 
+	//huli 新增数据库的状态
+	enum Database_controller_status
+	{
+	    E_UNKNOWN               = 0,    //默认未知
+	    E_READY               	= 1,    //正常待机
+		E_DISCONNECT			= 2,	//断连
+	    E_FAULT					= 3,	//故障
+	};
+
+
     // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
     Database_controller(const Database_controller &) = delete;
     Database_controller &operator=(const Database_controller &) = delete;
     ~Database_controller() = default;
 
     //初始化
-    Error_manager database_controller_init(std::string ip, int port, std::string username, std::string pass, std::string db_name, int conn_size=5);
+    Error_manager database_controller_init(std::string ip, int port, std::string username, std::string pass, std::string db_name, int conn_size=DB_CONNECT_QUEUE_SIZE);
     //反初始化
     Error_manager database_controller_uninit();
     //数据库连接状态
@@ -73,10 +88,14 @@ private:
     void database_status_update();
     // 检查连接状态
     Error_manager check_status();
-    // 补充连接
+    // 补充连接, 创建 数据库连接的通路
     Error_manager fill_up_pool(int add_num);
 
 private:
+
+	//huli 新增数据库的状态
+	Database_controller_status			m_database_controller_status;
+
     //mysql驱动句柄
     sql::Driver * m_mysql_driver;
     //连接状态
@@ -87,7 +106,7 @@ private:
     std::atomic_bool mb_exit;
     //连接池访问锁
     std::mutex m_conn_mutex;
-    //数据库连接
+    //数据库连接通路的集合
     std::queue< boost::shared_ptr< sql::Connection> > m_db_conn_pool;
     //守护线程
     std::thread *mp_guard_thread;