Hi ,
I am trying to using the maapi API to perform the SET and GET operation using the MAAPI API,
when i performed/executed this operation in 1 thread it works fine , but when i try to execute this operation using multiple thread (lets say using 10 thread), i am getting error "User seesion already exists on sock"
Please let me know how to using MAAPI APIs in multiple threads
Pasted sample code and error log.
Regards,
Sunil
Below are the Error Log: -
,{#Bin<aTRACE MAAPI_START_USER_SESSION 55,44dmiTRACE MAAPI_START_USER_SESSION maapi,n>,
25-Apr-2017::11:26:15.001 25031/b7863b70/7 SEND {
25-Apr-2017::11:26:15.001 25031/b6461b70/7 SEND op=100 isrel=0 th=-1 {#Bin<admin>,{{66,55,44,33},0},maapi,1,false,[#Bin<admin>],{undefined,undefined,undefined,#Bin<pldConfig_object.c:1(2)....>}}
op=100 isrel=0 th=-1 {#Bin<admin>,{{66,55,44,33},0},maapi,1,false,[#Bin<admin>],{undefined,undefined,undefined,#Bin<pldConfig_object.c:1(2)....>}}
,33},0{66,55,44,33},0},maapi,1,false,[#Bin<admin>],{undefined,undefined,undefined,#Bin<pldConfig_object.c:1(2)....>}}
1,},maapi,false,1,false,[#Bin<admin>],{undefined,undefined,[#Bin<admin>],{undefined,undefined,#Bin<pldConfig_objeundefined,ct.undefined,c:1#Bin<pld(2)....>}Conf}
ig_object.c:1(2)....>}}
INTERNAL ERROR: Unexpected data on socket! 100 50
INTERNAL ERROR: Unexpected data on socket! 100 1869488243
--> CONFD_ERR
--> CONFD_ERR
TRACE MAAPI_START_TRANS TRACE MAAPI_START_TRANS
25-Apr-2017::11:26:15.003 25031/b6461b70/7 SEND op=140 isrel=0 th=-1 {2,2,0,0,0,{
25-Apr-2017::11:26:15.003 25031/b4affb70/7 SEND op=140 isrel=0 th=-1 undefined,undefined,undefined,#Bin<pldConfig_object.c:1(2)....>}}
DEBUG item already exists - User session already exists on sock
--> CONFD_ERR
Sample Code :-
static long long * readCellConf(int *numgets)
{
inet_aton("127.0.0.1", &in);
addr.sin_addr.s_addr = in.s_addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(4565);
if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0 )
confd_fatal("Failed to open socket\n");
if (maapi_connect(sock, (struct sockaddr*)&addr,
sizeof (struct sockaddr_in)) < 0)
confd_fatal("Failed to confd_connect() to confd \n");
ip.af = AF_INET;
inet_aton("66.55.44.33", &ip.ip.v4);
**maapi_start_user_session(sock, user, context, groups, 1, &ip, CONFD_PROTO_TCP);**
** tid = maapi_start_trans(sock, dbname, CONFD_READ_WRITE);**
** maapi_set_namespace(sock, tid, samsung5g_access_acpf_call__ns);**
maapi_create(sock, tid, "/managed-element/fg-nodeb-function/fg-cell/fg-cell-entries/{%d}", create_list);
maapi_init_cursor(sock, tid, &mc, "/managed-element/fg-nodeb-function/fg-cell/fg-cell-entries/");
if (maapi_set_elem2(sock, tid, "11", "/managed-element/fg-nodeb-function/fg-cell/fg-cell-entries/{%d}/cell-identity",set_elem)
!= CONFD_OK) {
}
OK(maapi_get_next(&mc));
OK(maapi_get_u_int32_elem(sock, tid, &cellNum, "/managed-element/fg-nodeb-function/fg-cell/fg-cell-entries/{%x}/cell-num", &mc.keys[0]));
*start_time = mstime();
printf("start-time : readCellConf = %lld\n", *start_time);
for (i=0; i< *numgets; i++)
{
OK(maapi_get_u_int32_elem(sock, tid, &cellId, "/managed-element/fg-nodeb-function/fg-cell/fg-cell-entries/{%x}/cell-identity",&mc.keys[0]));
}
}
int main(int argc, char **argv)
{
<<<<<< Calling readCellConf() function by creating thread >>>>>>>>>>>>>
for (i = 0; i< 3;i++)
{
gResPerSec = 0;
trigger_time = 5+time(NULL);
for(loop = 0; loop < mythread[i]; loop++)
{
**s = pthread_create(&tread_id[loop],&attr, &readCellConf, &mygets[i]);**
}
for(loop = 0; loop < mythread[i]; loop++)
{
s = pthread_join(tread_id[loop],&res);
}
}
s = pthread_attr_destroy(&attr);
if (s != 0)
printf("pthread_attr_destroy failed s = %d\n",s);
return CONFD_OK;