Git Product home page Git Product logo

tarscpp's People

Contributors

beyondwuxf avatar cachebyte avatar douwanna avatar dpull avatar etzhangsx avatar franklee0817 avatar jack-tae avatar januaryjl avatar jerrylucky avatar jintengtech avatar julianyang avatar langio avatar lbbniu avatar lirizhong97 avatar miojizzy avatar quellazhang avatar ruanshudong avatar shao198822 avatar shevqko avatar sisisifeikang avatar spacebody avatar tarscloudbot avatar viest avatar westonli avatar wincsb avatar wuxiaofeng1-tal avatar xingyuuchen avatar yaoyaochecknow avatar yuansx avatar zouchengzhuo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tarscpp's Issues

服务使用 TC_Mysql 组件时,构建过程会出现链接错误

错误日志如下,没有链接到 libmysqlclient,原因是 tars-tools.cmakegen_server 中缺少链接语句

/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::TC_Mysql()’中:
tc_mysql.cpp:(.text+0x41):对‘mysql_init’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::TC_Mysql(tars::TC_DBConf const&)’中:
tc_mysql.cpp:(.text+0x112):对‘mysql_init’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::~TC_Mysql()’中:
tc_mysql.cpp:(.text+0x162):对‘mysql_close’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::TC_Mysql(std::string const&, std::string const&, std::string const&, std::string const&, std::string const&, int, int)’中:
tc_mysql.cpp:(.text+0x405):对‘mysql_init’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::disconnect()’中:
tc_mysql.cpp:(.text+0x57d):对‘mysql_close’未定义的引用
tc_mysql.cpp:(.text+0x584):对‘mysql_init’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::escapeString(std::string const&)’中:
tc_mysql.cpp:(.text+0x5ee):对‘mysql_escape_string’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::connect()’中:
tc_mysql.cpp:(.text+0x72b):对‘mysql_options’未定义的引用
tc_mysql.cpp:(.text+0x75c):对‘mysql_real_connect’未定义的引用
tc_mysql.cpp:(.text+0x781):对‘mysql_init’未定义的引用
tc_mysql.cpp:(.text+0x79e):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0x8c5):对‘mysql_error’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::realEscapeString(std::string const&)’中:
tc_mysql.cpp:(.text+0xab3):对‘mysql_real_escape_string’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::execute(std::string const&)’中:
tc_mysql.cpp:(.text+0xb7e):对‘mysql_real_query’未定义的引用
tc_mysql.cpp:(.text+0xba4):对‘mysql_errno’未定义的引用
tc_mysql.cpp:(.text+0xbcf):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0xccc):对‘mysql_real_query’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::queryRecord(std::string const&)’中:
tc_mysql.cpp:(.text+0xf95):对‘mysql_real_query’未定义的引用
tc_mysql.cpp:(.text+0xfa5):对‘mysql_store_result’未定义的引用
tc_mysql.cpp:(.text+0x103b):对‘mysql_fetch_field’未定义的引用
tc_mysql.cpp:(.text+0x10c3):对‘mysql_fetch_row’未定义的引用
tc_mysql.cpp:(.text+0x111f):对‘mysql_fetch_lengths’未定义的引用
tc_mysql.cpp:(.text+0x160f):对‘mysql_free_result’未定义的引用
tc_mysql.cpp:(.text+0x16f9):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0x180c):对‘mysql_errno’未定义的引用
tc_mysql.cpp:(.text+0x1837):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0x1a65):对‘mysql_real_query’未定义的引用
/usr/local/tars/cpp/lib/libtarsutil.a(tc_mysql.cpp.o):在函数‘tars::TC_Mysql::travelRecord(std::string const&, std::function<void (std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)> const&)’中:
tc_mysql.cpp:(.text+0x1f1f):对‘mysql_real_query’未定义的引用
tc_mysql.cpp:(.text+0x1f2f):对‘mysql_store_result’未定义的引用
tc_mysql.cpp:(.text+0x1fcb):对‘mysql_fetch_field’未定义的引用
tc_mysql.cpp:(.text+0x2014):对‘mysql_fetch_row’未定义的引用
tc_mysql.cpp:(.text+0x2064):对‘mysql_fetch_lengths’未定义的引用
tc_mysql.cpp:(.text+0x223f):对‘mysql_errno’未定义的引用
tc_mysql.cpp:(.text+0x226a):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0x2459):对‘mysql_real_query’未定义的引用
tc_mysql.cpp:(.text+0x261f):对‘mysql_error’未定义的引用
tc_mysql.cpp:(.text+0x2705):对‘mysql_free_result’未定义的引用

zombie process,no keep alive msg for 60 seconds--程序僵死

TARS服务器报这个错误:[alarm]zombie process,no keep alive msg for 60 seconds,然后程序被强制重启,间隔时间不定,有时候较长,有时候很短。
请教大家是否出现类似的情况,程序没有core信息,dmesg也没有错误信息,不知道如何定位

QueryEpBase::refreshReg中switch case遗漏break

    if(bSync)
        {
            vector<tars::EndpointF> activeEp;
            vector<tars::EndpointF> inactiveEp;
            int iRet = 0;
            switch(type)
            {
                case E_ALL:
                    {
                        iRet = _queryFPrx->findObjectById4Any(_objName,activeEp,inactiveEp);
                        break;
                    }
                case E_STATION:
                    {
                        iRet = _queryFPrx->findObjectByIdInSameStation(_objName,sName,activeEp,inactiveEp);
                    }
                case E_SET:
                    {
                        iRet = _queryFPrx->findObjectByIdInSameSet(_objName,sName,activeEp,inactiveEp);
                        break;
                    }
                case E_DEFAULT:
                default:
                    {
                        if(ClientConfig::SetOpen || !_invokeSetId.empty())
                        {
                               //指定set调用时,指定set的优先级最高
                            string setId = _invokeSetId.empty()?ClientConfig::SetDivision:_invokeSetId;
                            iRet = _queryFPrx->findObjectByIdInSameSet(_objName,setId,activeEp,inactiveEp);
                        }
                        else
                        {
                            iRet = _queryFPrx->findObjectByIdInSameGroup(_objName,activeEp,inactiveEp);
                        }
                        break;
                    }
            }
            doEndpoints(activeEp, inactiveEp, iRet, true);
        }

case E_STATION:情况下是否遗忘添加break?

单元测试代码编译不通过

TarsCpp/unittest/script 路径下,执行./run_test.sh, 编译不通过,显示如下错误:
/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp: In member function ‘virtual void TupUniPacketTest_encode_and_decode_using_UniPacket_Test::TestBody()’:
/usr/local/qiuxin/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp:177:52: error: variable-sized object ‘szBirthday’ may not be initialized
char szBirthday[info.birthday.size() + 1] = {0};
^
/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp:179:52: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < info.birthday.size(); ++i)
^
/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp:213:65: error: variable-sized object ‘szBirthday’ may not be initialized
char szBirthday[it->second.birthday.size() + 1] = {0};
^
/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp: At global scope:
/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp:14:15: warning: ‘std::string str2hex(const string&)’ defined but not used [-Wunused-function]
static string str2hex(const string& sBuffer)
^
make[2]: *** [CMakeFiles/testcase.dir/usr/local/TarsCpp/unittest/testcode/source/testcase/tup_encode_decode_test.cpp.o] Error 1
make[1]: *** [CMakeFiles/testcase.dir/all] Error 2
make: *** [all] Error 2
Make testcase failed! Please check you code first.

如何判断服务是否上线

通信器获得代理:
Application::getCommunicator()->setProperty("locator", "tars.tarsregistry.QueryObj@tcp -h 172.25.1.10 -p 17890 -t 10000");
Application::getCommunicator()->stringToProxy("MicroXXX.YServer.ZObj", myYPrx);

如何判断myYPrx是否已上线?

尝试使用myYPrx->getEndpoint().empty()来判断,似乎不行,程序直接SIGSEGV退出了

tars版本2.4.3

complice_tars arguments error

TarsCpp/servant/tup/CMakeLists.txt

complice_tars(OUT_DEPENDS_LIST "") 应该改为
complice_tars(OUT_DEPENDS_LIST "" "")

StressServer: No such file or directory

Q

I ran into this error

[TC_File :: copyFile] error: /usr/local/app/tars/tarsnode/tmp/download/BatchPatching/tars.StressServer/StressServer: No such file or directory

My deployment method: docker (stable)

A

See if there is a file for this service in the node's directory?

/ data / app / tars / tarsnode

Q

image.png

A

What Programming language do you use for service?
How do you pack the service?

Q

C ++

Directly compile tarscpp following example TarsStressServer

A

What is the name of your service packaged .tgz file?

It should be the same to the management platform

Q

image.png

A

There must be Tars in front of the service name, corresponding to the .tgz package, and the application name does not matter .

[TC_File :: copyFile] error: /usr/local/app/tars/tarsnode/tmp/download/BatchPatching/tars.StressServer/StressServer: No such file or directory

Q

image.png

By the way, does this pressure test bash script also need to be modified?

A

The application name and service name when deploying the service should correspond to Example,

  • Application Name : Test
  • Service Name: TarsStessServer
  • OBJ Name : StressObj

纯客户端如何使用协程?

我参考ServantHandle::run()里main协程方式的实现写的纯客户端使用协程的代码,不知道对不对,有没有官方的代码示例?

`CoroutineScheduler * g_coroSched = NULL;
const static uint32_t g_coroPoolSz = 1024 * 1024;
const static size_t g_coroStackSz = 128 * 1024;

void doSomething() {
while(true) {
// do something
}
}
static void initCoro() {
g_coroSched = new CoroutineScheduler();
g_coroSched->init(g_coroPoolSz, g_coroStackSz);
g_coroSched->createCoroutine(doSomething);
ServantProxyThreadData * pSptd = ServantProxyThreadData::getData();
pSptd->_sched = g_coroSched;
g_coroSched->run();
}

int main() {
initCoro();
return 0;
}`

管理平台无法发布程序

按照Install.zh.md的安装步骤,安装完成后,登录管理平台,发布一个测试服务EchoServer,但是“设置状态”为Active,当前状态为Off,发布服务其实也是失败的
图片
求助怎么办?

Log level error about debug and info

there exists mistake in function TLOGDEBUG and TLOGINFO:
(1)when use TLOGDEBUG,the log sign is INFO;
(2)when use TLOGINFO,the log sign is DEBUG.

it seems the order of log level is wrong.

怎么编译具体版本的代码

如题,例如想编译 2.4.1 版本的代码

$ mkdir build
$ cd build
$ cmake ..
提示如下错误

CMake Error at servant/CMakeLists.txt:64 (add_subdirectory):
  add_subdirectory given source "protocol/servant" which is not an existing
  directory.


CMake Error at servant/CMakeLists.txt:65 (add_subdirectory):
  add_subdirectory given source "protocol/framework" which is not an existing
  directory.

如果按照编译指引下载代码,
git clone https://github.com/TarsCloud/TarsCpp.git --recursive
这样不是只能编译最新 master 代码?

TC_GZip::compress在输入长度为0时的内存泄漏问题

bool TC_GZip::compress(const char *src, size_t length, vector& buffer);

当length=0时,destLen = sizeof(gz_simple_header);
在memcpy完gz_simple_header后, stream.avail_out=0,deflate返回错误码Z_BUF_ERROR,此时只进行了delete []out; 没有执行deflateEnd(&stream); 导致deflateInit2中分配的内存泄漏。

destLen应该为 sizeof(gz_simple_header) + compressBound(&stream, length);

一致性hash退化问题

_consistentHashWeight.getIndex(hashCode, iIndex);
if(iIndex >= _vRegProxys.size())
{
iIndex = iIndex % _vRegProxys.size();
}
//被hash到的节点在主控是active的才走在流程
if (_vRegProxys[iIndex]->isActiveInReg() && _vRegProxys[iIndex]->checkActive())
{
return _vRegProxys[iIndex];

当一致性哈希取到的节点挂掉时,退化成了取模路由,打破了按一致性哈希路由的承诺。会导致数据节点重新迁移,和一致性哈希承诺的“节点失效时,需要迁移的区间是均匀的”相违背。

编译安装TARS失败,请问是什么原因?

您好,我是参照官方文档:https://tarsphp.gitbook.io/doc/huan-jing-da-jian/platform 安装 TARS。在执行 ./build.sh all 这一步时报错了。

环境:
centos 7.7
php 7.3.9
mysql 8.0.13
swoole 4.4.7

我的步骤与官方文档不同的有两处:
1.因为我已安装过 Mysql,所以官方文档里那一步【安装mysql5.7】我就跳过了。
2.【安装pm2】这一步,nvm 我安装的版本是 0.34.0,【nvm install v8.11.3】我安装的版本是 v10.16.3。

报错信息如下:

Linking CXX executable tars2android
[ 34%] Built target tars2android
Scanning dependencies of target tars2node
[ 35%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/code_generator.cpp.o
[ 35%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/file_util.cpp.o
[ 35%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_js.cpp.o
[ 36%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_js_dts.cpp.o
[ 36%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_proxy.cpp.o
[ 37%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_proxy_dts.cpp.o
[ 37%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_server.cpp.o
[ 38%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_server_dts.cpp.o
[ 38%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/gen_server_imp.cpp.o
[ 39%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/idl_scan.cpp.o
[ 39%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/idl_util.cpp.o
[ 39%] Building CXX object tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/main.cpp.o
Linking CXX executable tars2node
../../util/lib/libtarsutil.a(tc_encoder.cpp.o):在函数‘tars::TC_Encoder::gbk2utf8(char*, int&, char const*, int)’中:
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:39:对‘libiconv_open’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:75:对‘libiconv_close’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:66:对‘libiconv’未定义的引用
../../util/lib/libtarsutil.a(tc_encoder.cpp.o):在函数‘tars::TC_Encoder::gbk2utf8(std::string const&)’中:
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:84:对‘libiconv_open’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:118:对‘libiconv’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:134:对‘libiconv_close’未定义的引用
../../util/lib/libtarsutil.a(tc_encoder.cpp.o):在函数‘tars::TC_Encoder::utf82gbk(char*, int&, char const*, int)’中:
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:203:对‘libiconv_open’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:214:对‘libiconv’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:223:对‘libiconv_close’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:218:对‘libiconv_close’未定义的引用
../../util/lib/libtarsutil.a(tc_encoder.cpp.o):在函数‘tars::TC_Encoder::gbk2utf8(std::string const&, std::vector<std::string, std::allocatorstd::string >&)’中:
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:142:对‘libiconv_open’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:178:对‘libiconv’未定义的引用
/home/wwwroot/TarsFramework/tarscpp/util/src/tc_encoder.cpp:196:对‘libiconv_close’未定义的引用
collect2: 错误:ld 返回 1
make[2]: *** [tarscpp/tools/tars2node/tars2node] 错误 1
make[1]: *** [tarscpp/tools/tars2node/CMakeFiles/tars2node.dir/all] 错误 2
make: *** [all] 错误 2

谢谢您!

服务端节点下线后,客户端并不能及时感知到

k8s上每次发布都会变更服务节点的ip,发现发布后,客户端前面一两次请求会报错(找不到服务端节点)。
看了下,目前路由更新是请求时触发的异步请求,在收到响应前的请求都会出错。
并且如果本地有路由cache的话,新建EndpointManager的时候也会直接用缓存中的错误信息

新手编译测试Client可能遇到的问题的排查办法

https://github.com/TarsCloud/TarsCpp/blob/master/docs/tars_cpp_quickstart.md#54-%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%90%8C%E6%AD%A5%E5%BC%82%E6%AD%A5%E8%B0%83%E7%94%A8%E6%9C%8D%E5%8A%A1

编译客户端的时候,直接在putty上把源码复制上去会出现少复制的问题 导致编译报错。

In file included from /usr/local/tars/cpp/include/servant/Global.h:28:0, from /usr/local/tars/cpp/include/servant/Communicator.h:23, from main.cpp:2: /usr/local/tars/cpp/include/tup/Tars.h: In instantiation of 'void tars::TarsInputStream<ReaderT>::skipField(uint8_t) [with ReaderT = tars::BufferReader; uint8_t = unsigned char]': /usr/local/tars/cpp/include/tup/Tars.h:1125:13: required from 'void tars::TarsInputStream<ReaderT>::read(tars::Int32&, uint8_t, bool) [with ReaderT = tars::BufferReader; tars::Int32 = int; uint8_t = unsigned char]' /usr/local/tars/cpp/include/servant/StatF.h:472:43: required from here /usr/local/tars/cpp/include/tup/Tars.h:942:27: error: '__bswap_32' was not declared in this scope len = ntohl(len); ^ /usr/local/tars/cpp/include/tup/Tars.h: In instantiation of 'void tars::TarsInputStream<ReaderT>::read(tars::Int64&, uint8_t, bool) [with ReaderT = tars::BufferReader; tars::Int64 = long int; uint8_t = unsigned char]': /usr/local/tars/cpp/include/tup/Tars.h:1163:33: required from 'void tars::TarsInputStream<ReaderT>::read(tars::UInt32&, uint8_t, bool) [with ReaderT = tars::BufferReader; tars::UInt32 = unsigned int; uint8_t = unsigned char]' /usr/local/tars/cpp/include/tup/Tars.h:1453:37: required from 'void tars::TarsInputStream<ReaderT>::read(std::map<_K1, _T1, _C1, _A1>&, uint8_t, bool) [with K = tars::StatMicMsgHead; V = tars::StatMicMsgBody; Cmp = std::less<tars::StatMicMsgHead>; Alloc = std::allocator<std::pair<const tars::StatMicMsgHead, tars::StatMicMsgBody> >; ReaderT = tars::BufferReader; uint8_t = unsigned char]' /usr/local/tars/cpp/include/servant/StatF.h:987:46: required from here /usr/local/tars/cpp/include/tup/Tars.h:1188:33: error: '__bswap_32' was not declared in this scope n = (Int32) ntohl(n); ^ In file included from /usr/local/tars/cpp/include/servant/Global.h:40:0, from /usr/local/tars/cpp/include/servant/Communicator.h:23, from main.cpp:2: /usr/local/tars/cpp/include/util/tc_logger.h: In member function 'virtual std::string tars::TarsLogType::get_init_time()': /usr/local/tars/cpp/include/util/tc_logger.h:1257:9: warning: control reaches end of non-void function [-Wreturn-type] } ^ /usr/local/tars/cpp/include/util/tc_logger.h: In member function 'virtual std::string tars::TarsLogType::get_new_time(int ': /usr/local/tars/cpp/include/util/tc_logger.h:1274:9: warning: control reaches end of non-void function [-Wreturn-type] } ^ make: *** [main.o] Error 1
请编译的小伙伴留意这个问题检测下代码是否缺少代码。

`

nclude
#include "servant/Communicator.h"
#include "Hello.h"

`

centos下编译框架源码遇到的iconv链接不到的问题

centos系统若没有自带iconv,编译框架源码会遇到iconv链接不到的问题,需手动安装iconv库,并修改Common.cmake如下:
IF (APPLE)
link_libraries(iconv)
ENDIF(APPLE)
改为
#IF (APPLE)
link_libraries(iconv)
#ENDIF(APPLE)

疑似网络包过大导致内存泄漏

客户端请求的数据超过10M时,服务端报错且内存不断上涨,最终进程导致OOM,服务端报错内容
ERROR|[TARS]recv [10.0.0.1:45678],packet error.
使用pporf工具,已打印出相关svg图,详见附件:
pprof001.svg.zip

通过yum安装cmake3命令,构建应用后执行`make upload`失败,提示cmake命令不存在

控制台输出如下

-- Configuring done
-- Generating done
-- Build files have been written to: /var/lib/jenkins/workspace/tars_cd/HelloServer/build
[ 25%] Built target tars-HelloServer
[100%] Built target HelloServer
[ 20%] Built target tars-HelloServer
[ 80%] Built target HelloServer
[100%] call /var/lib/jenkins/workspace/tars_cd/HelloServer/build/run-tar-HelloServer.cmake
mkdir -p /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer
rm -rf /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer
copy bin/HelloServer /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer/
HelloServer/
HelloServer/HelloServer
[100%] Built target HelloServer-tar
[ 16%] Built target tars-HelloServer
[ 66%] Built target HelloServer
[ 83%] call /var/lib/jenkins/workspace/tars_cd/HelloServer/build/run-tar-HelloServer.cmake
mkdir -p /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer
rm -rf /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer
copy bin/HelloServer /var/lib/jenkins/workspace/tars_cd/HelloServer/build/tmp/HelloServer/
HelloServer/
HelloServer/HelloServer
[ 83%] Built target HelloServer-tar
Scanning dependencies of target HelloServer-upload
[100%] upload TarsCppCIDemo.HelloServer.tgz and publish...
make[3]: cmake: Command not found
make[3]: *** [src/CMakeFiles/HelloServer-upload] Error 127
make[2]: *** [src/CMakeFiles/HelloServer-upload.dir/all] Error 2
make[1]: *** [src/CMakeFiles/HelloServer-upload.dir/rule] Error 2
make: *** [HelloServer-upload] Error 2
Build step 'Execute shell' marked build as failure

TarsCpp的tars-tool.cmake中部分cmake命令写死

AuthF.h不存在

Scanning dependencies of target tarsservant
[ 47%] Building CXX object tarscpp/servant/libservant/CMakeFiles/tarsservant.dir/AdapterProxy.cpp.o
In file included from /home/wincsb/Tars/framework/tarscpp/servant/servant/AdapterProxy.h:23:0,
from /home/wincsb/Tars/framework/tarscpp/servant/libservant/AdapterProxy.cpp:17:
/home/wincsb/Tars/framework/tarscpp/servant/servant/EndpointInfo.h:22:19: fatal error: AuthF.h: No such file or directory
#include "AuthF.h"
^

用 valgrind 检查发现内存泄漏

part of valgrind check report:
DiffVarObjImp is an empty servant I implement. do nothing

==4475==
==4475== 7,717 (3,840 direct, 3,877 indirect) bytes in 4 blocks are definitely lost in loss record 474 of 479
==4475== at 0x4C2A4E3: operator new(unsigned long) (vg_replace_malloc.c:344)
==4475== by 0x44538C: tars::ServantCreation::create(std::string const&) (ServantHelper.h:50)
==4475== by 0x5298A9: tars::ServantHelperManager::create(std::string const&) (in /data/home/cdg/code/git_themis/updateserver_master/build/test/test_master)
==4475== by 0x52456E: tars::ServantHandle::initialize() (in /data/home/cdg/code/git_themis/updateserver_master/build/test/test_master)
==4475== by 0x523A35: tars::ServantHandle::run() (in /data/home/cdg/code/git_themis/updateserver_master/build/test/test_master)
==4475== by 0x5A5DA9: tars::TC_Thread::threadEntry(tars::TC_Thread*) (in /data/home/cdg/code/git_themis/updateserver_master/build/test/test_master)
==4475== by 0x5BF133F: ??? (in /usr/lib64/libstdc++.so.6.0.19)
==4475== by 0x4E3EEB4: start_thread (in /usr/lib64/libpthread-2.17.so)
==4475== by 0x645A8FC: clone (in /usr/lib64/libc-2.17.so)
==4475==

any clues is appreciated

a bug for TC_Common::strto when input unsigned char

TC_Common::strto1 lack specialization for unsigned char, when run the code below, the value of t
will become 0; because the operator >> of istringstream ignores space and other blank character;

string s;
s.push_back(32); // 32 is ascii for space
unsigned char t = 255;
t = TC_Common::strto(s); // now the value of t become 0

A Issue for Dependent Libraries Collection

If you find any dependent libraries in code but never display its open source license in the License file, please comment on this issue, We will update the License file ASAP.
You also can pull request to the License file and remember to describe in detail ; )

Welcome to contribute!

Demo生成问题,使用HelloWorld CPP里面的命令生成的时候,出现了以下问题

[ 50%] Linking CXX executable ../bin/HelloServer
/usr/local/tars/cpp/lib/libtarsutil.a(tc_thread.cpp.o): In function tars::TC_Thread::start()': tc_thread.cpp:(.text+0xb79): undefined reference to pthread_create'
/usr/local/tars/cpp/lib/libtarsservant.a(Application.cpp.o): In function tars::Application::main(tars::TC_Option const&)': Application.cpp:(.text.startup+0x8a3): undefined reference to pthread_create'
Application.cpp:(.text.startup+0x1002): undefined reference to pthread_create' /usr/local/tars/cpp/lib/libtarsutil.a(tc_logger.cpp.o): In function tars::TC_LoggerThreadGroup::start(unsigned long)':
tc_logger.cpp:(.text+0x1e3): undefined reference to pthread_create' /usr/local/tars/cpp/lib/libtarsutil.a(tc_timeprovider.cpp.o): In function tars::TC_TimeProvider::getInstance()':
tc_timeprovider.cpp:(.text+0x132): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
src/CMakeFiles/HelloServer.dir/build.make:122: recipe for target 'bin/HelloServer' failed
make[2]: *** [bin/HelloServer] Error 1
CMakeFiles/Makefile2:223: recipe for target 'src/CMakeFiles/HelloServer.dir/all' failed
make[1]: *** [src/CMakeFiles/HelloServer.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
这似乎是由于生成tars静态库libtarsutil.a的时候没有正确链接lpthread导致?但是我之前的利用源码编译tars框架和tarsweb的时候是完全按照指南做的,没有发现有需要特别链接lphtread的地方

新版本服务发现功能不正常

旧版本(v2.4.3)只需要: comm.stringToProxy("TestApp.HelloServer.HelloObj")即可, 框架会自动寻址后端的HelloServer服务

前几天更新了最新版2.4.11,发现必须要指定ip:port,即comm.stringToProxy("TestApp.HelloServer.HelloObj@tcp -h 10.120.129.226 -p 20001" , prx),才能调用服务

即使部署在框架上,也存在这个问题

tarscpp 2.4.6版本上的hash调用如果采用异步方式调用服务端,将无法根据不同hash值影射到不同服务。

for (int i=1; i<=20; ++i)
prx->tars_hash(i)->async_test();
}

如上示例,如果hash调用采用异步方式调用服务端,服务端开启3个服务副本(k8s部署),最终结果是全部调用到一个服务副本上。
而采用同步方式(prx->tars_hash(i)->test();)则能实现根据不同hash值进行服务影射,3个服务副本都有影射调用。请问最新版本还有此问题吗?

开发文档不完善问题

开发文档不完善

1. 缺少工具类使用文档

常用的tostr, strto, mysql操作 等没有相关文档,也没有提示可以使用,开发者可能会重新实现重复造轮子,降低开发效率。

目前可行的方式是通过阅读TarsCpp/util/include/util/ 下的相关类的头文件的注释了解如何使用

2. 接口定义文件.tars的使用描述不完整

  • 文档分布比较散,TarsCpp部分没有关于tars协议数据类型的使用和自定义类型的定义规范,只有Tars项目下的介绍文档(Introduction.md)提到了

  • 接口定义返回值,返回数据如何定义没有明确说明,踩了一定的坑才知道怎么操作,缺少相关的开发规范

module TestApp
{

struct testInfo {
	1 require string name;
	2 require int    number;
}

interface Hello
{
    int test();
    int testfunction(string in, out string rsp);
};

};

对于需要返回结果的服务,对应的参数的响应参数前需要添加关键字out,文档中没有明确说明。TarsCpp/docs/tars_cpp_quickstart.md文档中提到接口文件的语法和使用参见tars_tup.md,没有给出连接,TarsCpp下没有相关文档,TarsCloud/TarsTup下有tars_tup.md,只对tars协议进行了说明,没有具体说明.tars接口问价语法和规范。

同时接口返回值int Tars::Int32 对应服务调用的状态,如ret=0表示服务调用成功,文档没有明确说明,只在一处地方提到(TarsCpp/docs/tars_cpp_user_guide.md)。

同时对自定义数据类型,.tars文件中可以通过定义struct 来定义,相关的语法和支持类型在开发文档中没有提到,只在TarsCloud/Tars/Introduction.md中的4.1部分提到,没有在开发文档中说明

经过两天的开发摸索,大致了解了tars服务接口的开发规范,仅限于个人理解,希望尽快有相关的开发规范:

  • 接口返回值应使用int类型,即tars::Int32,用于表示服务调用状态。直接返回请求的数据消息也是可以的,但是tars接口协议提供了另一种机制来返回响应消息
  • .tars文件中对返回参数使用了关键字out,这在文档中没有提到,通过对比了多个Demo例子后发现。只有添加了out关键字,相关的参数才会出现在通过.tars文件生成的.h文件的回调函数的参数中。返回参数通过引用传递,在接口实现函数中或者回调函数中进行赋值即可。
  • tars协议支持自定义类型的,需要在.tars 文件中定义,使用struct定义由基本类型组成的复杂类型,可以定义必选和可选参数。支持的基础类型暂时只能参照TarsCloud/Tars/Introduction.md: 4.1

3. 文档缺少对.tars文件生成的.h文件中回调函数的说明

大部分使用都是通过列举Demo代码的方式,但是一般都是简单Demo,缺少很多必要的阐述,比如一些异步调用,调用相关接口方法加前缀async,没有返回数据的参数,需要在重写的回调函数中操作,文档中也没有提及。

Demo problem

在示例:TarsCpp/examples/QuickStartDemo/HelloServer/

make 成功 后尝试启动,提示缺少config.conf:start server with config, for example: ./HelloServer --config=config.conf

并没有找到config.conf的规范,还是我启动的方式有问题?

运行:
/usr/local/tars/cpp/script/create_tars_server.sh TestApp HelloServer Hello
应该生成以下:HelloServer.h HelloServer.cpp Hello.tars HelloImp.h HelloImp.cpp makefile

但实际上,生成的不是Hello系列文件,
生成了:
DemoServantImp.cpp DemoServant.tars DemoServer.h
DemoServantImp.h DemoServer.cpp makefile
而代码中include又是HelloServer.h...等hello文件...

这应该是个bug。

protocol/servant is not an existing

这个目录需要手动创建吗? run log 如下:

[user@centos TarsCpp]$ cmake .
-- Could NOT find Protobuf (missing: Protobuf_INCLUDE_DIR)
CMake Error at servant/CMakeLists.txt:64 (add_subdirectory):
  add_subdirectory given source "protocol/servant" which is not an existing
  directory.


-- Configuring incomplete, errors occurred!
See also "/home/me/TarsCpp/CMakeFiles/CMakeOutput.log".
See also "/home/me/TarsCpp/CMakeFiles/CMakeError.log".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.