tarscloud / tarscpp Goto Github PK
View Code? Open in Web Editor NEWC++ language framework rpc source code implementation
License: BSD 3-Clause "New" or "Revised" License
C++ language framework rpc source code implementation
License: BSD 3-Clause "New" or "Revised" License
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
tars2cpp生产的代码有错,生产的代码含STATUS_GRID_KEY,应该是STATUS_DYED_KEY。
for (int i=1; i<=20; ++i)
prx->tars_hash(i)->async_test();
}
如上示例,如果hash调用采用异步方式调用服务端,服务端开启3个服务副本(k8s部署),最终结果是全部调用到一个服务副本上。
而采用同步方式(prx->tars_hash(i)->test();)则能实现根据不同hash值进行服务影射,3个服务副本都有影射调用。请问最新版本还有此问题吗?
xxx.tars文件中2个enum类型含有相同的成员,生成的xxx.h文件编译会报错:"error: redeclaration of xxx"
生成文件后需要手工改enum的命名空间。
https://github.com/TarsCloud/TarsCpp/blob/master/servant/libservant/ServantProxy.cpp#L793
这里是成功了才设置szhost,为什么不无论成功失败都设置呢?
如果确实不能设置,请问如何获取到连接超时的对端ip呢?
TarsCpp/servant/servant/AppProtocol.h
Line 185 in 711a5ed
在示例: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。
常用的tostr, strto, mysql操作
等没有相关文档,也没有提示可以使用,开发者可能会重新实现重复造轮子,降低开发效率。
目前可行的方式是通过阅读TarsCpp/util/include/util/
下的相关类的头文件的注释了解如何使用
文档分布比较散,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
文件中定义,使用struct定义由基本类型组成的复杂类型,可以定义必选和可选参数。支持的基础类型暂时只能参照TarsCloud/Tars/Introduction.md: 4.1
.tars
文件生成的.h
文件中回调函数的说明 大部分使用都是通过列举Demo代码的方式,但是一般都是简单Demo,缺少很多必要的阐述,比如一些异步调用,调用相关接口方法加前缀async
,没有返回数据的参数,需要在重写的回调函数中操作,文档中也没有提及。
TarsCpp/util/include/util/tc_epoll_server.h
Line 544 in 8a8145e
控制台输出如下
-- 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
命令写死
can support windows, android, ios ,arm?
您好,我是参照官方文档: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
谢谢您!
rt
TARS服务器报这个错误:[alarm]zombie process,no keep alive msg for 60 seconds,然后程序被强制重启,间隔时间不定,有时候较长,有时候很短。
请教大家是否出现类似的情况,程序没有core信息,dmesg也没有错误信息,不知道如何定位
通信器获得代理:
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
while循环体内通过字符数组暂存文件内容时,覆盖了\0结尾,导致读出来的文件中间会有多出的乱码
已经使用docker部署了tars,但是应该如何创立服务。使用/usr/local/tars/cpp/script/cmake_tars_server.sh,里面没有这个sh文档。
编译客户端的时候,直接在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"
`
如题。
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"
^
tars2cs生成出来的文件,使用的是Wup.tars
而TUP协议里面使用的是Tup.tars。
这个估计是遗漏了,可以修改一下。
错误日志如下,没有链接到 libmysqlclient
,原因是 tars-tools.cmake
的 gen_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’未定义的引用
我参考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;
}`
rt
[ 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的地方
如题,不配置这个参数,服务可以正常启动,没有任何报错信息,但会导致无法处理外界请求。看起来是handlethread配置出问题了。
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
中文版readme最后一个链接点击会跳到
“https://github.com/TarsCloud/Tars.git下的Install.md” 这个错误链接
而不是“https://github.com/TarsCloud/Tars.git”
TarsCpp/servant/tup/CMakeLists.txt
complice_tars(OUT_DEPENDS_LIST "") 应该改为
complice_tars(OUT_DEPENDS_LIST "" "")
提示为系统内部错误,用pm2 log 0来看好像有一条报错,13001
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);
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.
TarsCpp/servant/libservant/EndpointManager.cpp
Lines 1050 to 1060 in 59a569b
当一致性哈希取到的节点挂掉时,退化成了取模路由,打破了按一致性哈希路由的承诺。会导致数据节点重新迁移,和一致性哈希承诺的“节点失效时,需要迁移的区间是均匀的”相违背。
tars2cpp有生成对协程的支持,默认生成协程回调,但是pb2tarscpp,却没有生成对协程回调的支持,这个基于什么样的考虑呢?
如题
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?
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)
See if there is a file for this service in the node's directory?
/ data / app / tars / tarsnode
What Programming language do you use for service?
How do you pack the service?
C ++
Directly compile tarscpp
following example TarsStressServer
What is the name of your service packaged .tgz file?
It should be the same to the management platform
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
By the way, does this pressure test bash script also need to be modified?
The application name and service name when deploying the service should correspond to Example,
k8s上每次发布都会变更服务节点的ip,发现发布后,客户端前面一两次请求会报错(找不到服务端节点)。
看了下,目前路由更新是请求时触发的异步请求,在收到响应前的请求都会出错。
并且如果本地有路由cache的话,新建EndpointManager的时候也会直接用缓存中的错误信息
旧版本(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),才能调用服务
即使部署在框架上,也存在这个问题
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.
麻烦尽快合入protocol @ 4c74f49这个提交,当前编译不通过
centos系统若没有自带iconv,编译框架源码会遇到iconv链接不到的问题,需手动安装iconv库,并修改Common.cmake如下:
IF (APPLE)
link_libraries(iconv)
ENDIF(APPLE)
改为
#IF (APPLE)
link_libraries(iconv)
#ENDIF(APPLE)
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!
客户端请求的数据超过10M时,服务端报错且内存不断上涨,最终进程导致OOM,服务端报错内容
ERROR|[TARS]recv [10.0.0.1:45678],packet error.
使用pporf工具,已打印出相关svg图,详见附件:
pprof001.svg.zip
这个目录需要手动创建吗? 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".
如题,例如想编译 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 代码?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.