From ad8ee0872802ba5d0194458bf215a6cc89f4d0d0 Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期一, 15 四月 2019 15:30:38 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/1.3nsq' into 1.3nsq --- syncDBTool/ErlangDbTool.cpp | 53 +++++++++++++++++++++++++++++------------------------ 1 files changed, 29 insertions(+), 24 deletions(-) diff --git a/syncDBTool/ErlangDbTool.cpp b/syncDBTool/ErlangDbTool.cpp index b3cdeea..173fd83 100755 --- a/syncDBTool/ErlangDbTool.cpp +++ b/syncDBTool/ErlangDbTool.cpp @@ -71,6 +71,7 @@ return true; } +// 妫�娴嬭繑鍥炵殑鏁版嵁鐨勬暟鎹被鍨� static int ErlangTool::checkETERMType(ETERM *elemen) { if (elemen == NULL) { return -1; @@ -187,9 +188,10 @@ g_syncDbFile.setDatabaseName(str_SyncDbFile.c_str()); g_syncDbFile.open(); + // c erlang init erl_init(NULL, 0); + struct in_addr addr; - //#todo addr.s_addr = inet_addr("127.0.0.1"); m_pName.append(std::to_string((int) getpid())); @@ -198,6 +200,8 @@ t_cNodeName.append("@127.0.0.1"); m_cNodeName.swap(t_cNodeName); //m_pName + //int erl_connect_init(number, cookie, creation)int erl_connect_xinit(host, alive, node, addr, cookie, creation) + // https://cloud.tencent.com/developer/section/1123179 if (erl_connect_xinit(const_cast<char *>(m_pName.c_str()), const_cast<char *>(m_pName.c_str()), const_cast<char *>(m_cNodeName.c_str()), &addr, const_cast<char *>(m_cookie.c_str()), 0) == -1) { @@ -214,16 +218,20 @@ ERR("m_nodeName is null "); return 3; } + // 鍒ゆ柇鑺傜偣鏄惁鍚姩 m_ret = pingNode(m_nodeName, m_cookie); if (!m_ret) { if (dir_file_exists(m_path, true)) { + // 鍚姩erlang鑺傜偣鐨刡ash鍛戒护 std::string cmd = std::string("cd " + m_path + " && erl -name " + m_nodeName + " -setcookie " + m_cookie + " -mnesia dir '\"" + m_path + "\"' -detached -noshell");// >>log std::cout << cmd << std::endl; system(cmd.c_str()); std::cout << m_ret << std::endl; + // 鍒ゆ柇鑺傜偣鏄惁鍚姩鎴愬姛 m_ret = waitNode(); +// erl_close_connection(m_fd); resetConn(); return m_ret; } else { @@ -264,7 +272,7 @@ } ErlMessage emsg; /* Incoming message */ - //hanshu canshu + // 鎷兼帴鍑芥暟鍙傛暟 ETERM *arrlist[5]; arrlist[0] = erl_mk_atom(m_nodeName.c_str()); arrlist[1] = erl_mk_atom(FatherNodeName.c_str()); @@ -282,6 +290,8 @@ //erl_close_connection(m_fd); // m_mutex.unlock(); if (ret == ERL_MSG) { + // 娑堟伅瑙f瀽 + // 娑堟伅浣撲负閾捐〃缁撴瀯 std::map<std::string, std::string> t_results; ETERM *key, *value; ETERM *tuplep[6]; @@ -313,7 +323,7 @@ INFO("item is " << item.first << " " << item.second); } } - }//ret == ERL_MSG end + } //ret == ERL_MSG end else { ERR(" ret is " << ret); @@ -329,18 +339,14 @@ // m_mutex.lock(); m_ret = resetConn(); if (!m_ret) { - //#todo error message - std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << m_ret << " " << m_fd << std::endl; + ERR(" error " << m_ret << " " << m_fd); return false; } int ret = -1; ErlMessage emsg; /* Incoming message */ - //hanshu canshu -// ETERM *arrlist[1]; -// arrlist[0] = erl_mk_atom(m_nodeName.c_str()); + ETERM *list = erl_mk_empty_list();// (arrlist, 0); -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; ret = erl_rpc_to(m_fd, "syncDB", "removeNode", list); if (ret == ERL_TICK) { ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); @@ -364,7 +370,7 @@ break; } default: - printf("error add case todo \n\r"); + ERR("error add case todo \n\r"); } auto it = t_results.find("atomic"); if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { @@ -471,9 +477,7 @@ map_DevDataCache devDataCache; int ret = -1; ErlMessage emsg; /* Incoming message */ - //hanshu canshu -// ETERM *arrlist[0]; -// arrlist[0] = erl_mk_atom(m_nodeName.c_str()); + ETERM *list = erl_mk_empty_list();//erl_mk_list(arrlist, 0); ret = erl_rpc_to(m_fd, "syncDB", "findAllNode", list); @@ -534,7 +538,7 @@ erlangFreeEterm(3, key, value, tuplep[j]); } // printf("\none list end\n\n\n\n"); - // #todo this is have a bug + // #todo this is have a bug 鍐呭瓨娉勯湶?鎴栬�呭湴鍧�绌洪棿瓒婄晫? // device_info.create_by = ""; devDataCache.insert(std::make_pair(device_info.uuid, device_info)); erlangFreeEterm(1, tail_tuple); @@ -1686,13 +1690,14 @@ bool ErlangTool::ErlangDbTool::resetConn() { //#todo if (m_pName.size() <= 0) { + // 鏍规嵁褰撳墠鏃堕棿璁剧疆绉嶅瓙,绉掔骇 srand(time(0)); + // 鐢熸垚闅忔満鏁� m_loop = rand() % 1000; int ret = -1; erl_init(NULL, 0); -// m_loop %= 10; -// m_loop++; + // 鏍规嵁闅忔満鏁扮敓鎴恈鑺傜偣 ret = erl_connect_init(m_loop, const_cast<char *>(m_cookie.c_str()), 0); DBG("node name is " << m_loop); if (-1 == ret) { @@ -1700,26 +1705,22 @@ return false; } -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; + // 鍏抽棴涓婃閾炬帴鐨勬枃浠舵弿杩扮 #TODO 绗竴娆″垱寤鸿妭鐐规湁姒傜巼鍑虹幇鐭椂闂村唴鏃犳硶鏌ヨ鐨刡ug erl_close_connection(m_fd); -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; m_fd = erl_connect(const_cast<char *>(m_nodeName.c_str())); -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << m_fd << std::endl; if (0 > m_fd) { // erl_err_quit("erl_connect"); return false; } return true; } else { + // 璁剧疆浜� mPName erl_close_connection(m_fd); m_fd = erl_connect(const_cast<char *>(m_nodeName.c_str())); if (0 > m_fd) { -// erl_err_quit("erl_connect"); -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " error " << fd << std::endl; ERR("m_fd is " << m_fd << " m_nodeName is" << m_nodeName); return false; } -// std::cout << __FILE__ << __FUNCTION__ <<__LINE__ << " " << fd << std::endl; INFO("m_fd is " << m_fd << " m_nodeName is" << m_nodeName); return true; } @@ -1738,15 +1739,17 @@ loop++; } } - std::cout << "start waitNode" << std::endl; + INFO("start waitNode"); return m_ret; } void ErlangTool::ErlangDbTool::test(pthread_cond_t *t_pthcon, pthread_mutex_t *t_pthmut) { bool ret = setCNodeName(); { + // 鐩戝惉socket鐨勭嚎绋� std::thread th1([&] { int res; + // 澶栭儴浼犲叆鐨勪俊鍙峰拰閿� pthread_cond_t *t_pthCon = t_pthcon; pthread_mutex_t *t_pthMut = t_pthmut; @@ -1786,7 +1789,8 @@ } else if (got == ERL_ERROR) { if ((fd = erl_accept(listen, &conn)) == ERL_ERROR) erl_err_quit("erl_accept"); - INFO("Connected to " << conn.nodename); + else + INFO("Connected to " << conn.nodename); } else { if (emsg.type == ERL_REG_SEND) { @@ -1803,6 +1807,7 @@ pthread_cond_signal(t_pthCon); pthread_mutex_unlock(t_pthMut); //call back func + //#TODO 娑堟伅瑙f瀽 } else { ERR("message not is update"); } -- Gitblit v1.8.0