14
14
#include <lauxlib.h>
15
15
#include "polaris/polaris_api.h"
16
16
17
- #define ERR_CODE_ARGS_COUNT 1001 // 传入参数个数有误
18
- #define ERR_CODE_POLARIS_API_INIT 1002 // 北极星api初始化失败
19
- #define ERR_CODE_GET_POLARIS_API 1003 // 获取北极星api错误
20
- #define ERR_CODE_GET_SERVICE_NAMESPACE 1004 // 解析传入参数-命名空间-失败
21
- #define ERR_CODE_GET_SERVICE_NAME 1005 // 解析传入参数-服务名-失败
22
- #define ERR_CODE_GET_ONE_INSTANCE_REQ_NEW 1006 // 创建获取单个服务实例请求对象失败
23
- #define ERR_CODE_GET_ONE_INSTANCE 1007 // 获取单个服务实例失败
24
- #define ERR_CODE_GET_LOG_DIR 1008 // 解析传入参数-日志路径-失败
25
- #define ERR_CODE_GET_INSTANCE_ID 1009 // 解析传入参数-服务实例ID-失败
26
- #define ERR_CODE_POLARIS_SERVICE_CALL_RESULT_NEW 1010 // 创建服务实例调用结果上报对象失败
27
- #define ERR_CODE_CALL_RET_TIMEOUT 1011 // 获取单个服务实例超时
28
- #define ERR_CODE_GET_CONFIG_FILE 1012 // 解析传入参数-sdk配置文件路径-失败
17
+ #define ERR_CODE_ARGS_COUNT 1001 // 传入参数个数有误
18
+ #define ERR_CODE_POLARIS_API_INIT 1002 // 北极星api初始化失败
19
+ #define ERR_CODE_GET_POLARIS_API 1003 // 获取北极星api错误
20
+ #define ERR_CODE_GET_SERVICE_NAMESPACE 1004 // 解析传入参数-命名空间-失败
21
+ #define ERR_CODE_GET_SERVICE_NAME 1005 // 解析传入参数-服务名-失败
22
+ #define ERR_CODE_GET_ONE_INSTANCE_REQ_NEW 1006 // 创建获取单个服务实例请求对象失败
23
+ #define ERR_CODE_GET_ONE_INSTANCE 1007 // 获取单个服务实例失败
24
+ #define ERR_CODE_GET_LOG_DIR 1008 // 解析传入参数-日志路径-失败
25
+ #define ERR_CODE_GET_INSTANCE_ID 1009 // 解析传入参数-服务实例ID-失败
26
+ #define ERR_CODE_POLARIS_SERVICE_CALL_RESULT_NEW 1010 // 创建服务实例调用结果上报对象失败
27
+ #define ERR_CODE_CALL_RET_TIMEOUT 1011 // 获取单个服务实例超时
28
+ #define ERR_CODE_GET_CONFIG_FILE 1012 // 解析传入参数-sdk配置文件路径-失败
29
29
30
30
static polaris_api * polaris_api_ptr = NULL ;
31
31
@@ -70,7 +70,7 @@ void fill_ok_result(lua_State *l)
70
70
}
71
71
72
72
/* 从栈上解析metadata table数据并设置 */
73
- void set_metadata_from_stack (lua_State * l , int index , polaris_get_one_instance_req * get_one_instance_req )
73
+ void set_metadata_from_stack (lua_State * l , int index , polaris_get_one_instance_req * get_one_instance_req )
74
74
{
75
75
luaL_checktype (l , index , LUA_TTABLE );
76
76
@@ -80,12 +80,12 @@ void set_metadata_from_stack(lua_State *l, int index, polaris_get_one_instance_r
80
80
{
81
81
lua_pushvalue (l , -2 );
82
82
83
- const char * key = lua_tostring (l , -1 );
84
- const char * value = lua_tostring (l , -2 );
83
+ const char * key = lua_tostring (l , -1 );
84
+ const char * value = lua_tostring (l , -2 );
85
85
printf ("%s => %s\n" , key , value );
86
86
87
87
/* 设置 metadata */
88
- polaris_get_one_instance_req_add_metadata (get_one_instance_req , key , value );
88
+ polaris_get_one_instance_req_add_src_service_metadata (get_one_instance_req , key , value );
89
89
lua_pop (l , 2 );
90
90
}
91
91
}
@@ -141,6 +141,8 @@ static int polaris_api_init(lua_State *l)
141
141
* 1 string 命名空间
142
142
* 2 string 服务名
143
143
* 3 table metadata kv (可选参数)
144
+ * 4 string 主调服务命名空间 (可选参数,传了metadata则必填)
145
+ * 5 string 主调服务名 (可选参数,传了metadata则必填)
144
146
*
145
147
* 传出参数:
146
148
* 1 integer result
@@ -200,10 +202,22 @@ static int polaris_get_one_node(lua_State *l)
200
202
}
201
203
202
204
/* 检查传入参数是否有metadata并在获取实例 */
203
- if (lua_gettop (l ) >= 3 )
205
+ if (lua_gettop (l ) >= 5 )
204
206
{
207
+ /* 获取主调命名空间 */
208
+ const char * source_namespace = lua_tostring (l , 4 );
209
+ if (source_namespace == NULL )
210
+ {
211
+ return report_error (l , ERR_CODE_GET_SERVICE_NAMESPACE , "get source service_namespace failed" );
212
+ }
213
+ /* 获取主调服务名 */
214
+ const char * source_service_name = lua_tostring (l , 5 );
215
+ if (source_service_name == NULL )
216
+ {
217
+ return report_error (l , ERR_CODE_GET_SERVICE_NAMESPACE , "get source_service_name failed" );
218
+ }
205
219
/* 设置源服务用于匹配规则路由 */
206
- polaris_get_one_instance_req_set_src_service (get_one_instance_req , service_namespace , service_name );
220
+ polaris_get_one_instance_req_set_src_service_key (get_one_instance_req , source_namespace , source_service_name );
207
221
208
222
/* 填充匹配规则 */
209
223
set_metadata_from_stack (l , 3 , get_one_instance_req );
@@ -213,7 +227,8 @@ static int polaris_get_one_node(lua_State *l)
213
227
214
228
/* 获取实例 */
215
229
ret = polaris_api_get_one_instance (polaris_api_ptr , get_one_instance_req , & instance );
216
- if (ret != 0 ) {
230
+ if (ret != 0 )
231
+ {
217
232
/* 转换一下错误码 */
218
233
if (ret == POLARIS_CALL_RET_TIMEOUT )
219
234
{
@@ -382,27 +397,31 @@ int polaris_service_call_report(lua_State *l)
382
397
return 2 ;
383
398
}
384
399
400
+ static int polaris_get_quota (lua_State * l )
401
+ {
402
+ }
403
+
385
404
/* 导出函数列表 */
386
405
static luaL_Reg polariswrapper_libs [] =
387
- {
388
- /* 初始化polaris_api */
389
- {"polaris_api_init" , polaris_api_init },
390
- /* 获取一个服务实例(如当前进程已经初始化polaris_api则复用,否则生成一个polaris_api) */
391
- {"polaris_get_one_node" , polaris_get_one_node },
392
- /* 设置北极星日志路径&级别 */
393
- {"polaris_log_settings" , polaris_log_settings },
394
- /* 服务实例调用结果上报(如当前进程已经初始化polaris_api则复用,否则生成一个polaris_api) */
395
- {"polaris_service_call_report" , polaris_service_call_report },
396
-
397
- { NULL , NULL }
398
- };
406
+ {
407
+ /* 初始化polaris_api */
408
+ {"polaris_api_init" , polaris_api_init },
409
+ /* 获取一个服务实例(如当前进程已经初始化polaris_api则复用,否则生成一个polaris_api) */
410
+ {"polaris_get_one_node" , polaris_get_one_node },
411
+ /* 设置北极星日志路径&级别 */
412
+ {"polaris_log_settings" , polaris_log_settings },
413
+ /* 服务实例调用结果上报(如当前进程已经初始化polaris_api则复用,否则生成一个polaris_api) */
414
+ {"polaris_service_call_report" , polaris_service_call_report },
415
+ // 限流申请访问配额
416
+ { "polaris_get_quota" , polaris_get_quota },
417
+ { NULL , NULL } };
399
418
400
419
/**
401
420
* 该C库的唯一入口函数 其函数签名等同于上面的注册函数
402
421
*/
403
- int luaopen_polariswrapper (lua_State * l )
422
+ int luaopen_polariswrapper (lua_State * l )
404
423
{
405
- const char * lib_name = "polariswrapper" ;
424
+ const char * lib_name = "polariswrapper" ;
406
425
luaL_register (l , lib_name , polariswrapper_libs );
407
426
return 1 ;
408
- }
427
+ }
0 commit comments