I have the following yang data model, this model should be modified by MAAPI instead of CLI or other north bound interfaces.
container static {
tailf:hidden sec;
leaf ip {type string;}
leaf port {type string;}
}
In my daemon I also subscribe the path ‘/static’, I want that when ip or port is changed, the subscribe will notify me. But when I call the maapi to set it’s value, it is suspend in read() function, look at the following log and call stack.
gdb ./demo
....
TRACE Connected (cdb) to ConfD
TRACE CDB_WAIT_START --> CONFD_OK
-- trigger point count = 1
-- trigger point val[0] = 6
TRACE CDB_TRIGGER_SUBS TRACE CDB_SUBSCRIPTION_EVENT --> 6
TRACE CDB_NEW_SESSION --> CONFD_OK
TRACE Established new CDB session to ConfD
TRACE CDB_SET_NAMESPACE --> CONFD_OK
TRACE CDB_SUB_ITERATE 6
-- VALUE_SET on /static/ip with (oldv) Empty -> (newv) 1457428381
-- VALUE_SET on /static/port with (oldv) Empty -> (newv) 1457428381
TRACE CDB_END_SESSION --> CONFD_OK
TRACE CDB_SYNC_SUB CDB_DONE_PRIORITY --> CONFD_OK
TRACE MAAPI_START_USER_SESSION --> CONFD_OK
-- *** Leave trigger thread: 139810245179136, exiting ...
--> CONFD_OK
TRACE MAAPI_START_TRANS --> CONFD_OK
TRACE MAAPI_SET_NAMESPACE --> CONFD_OK
TRACE MAAPI_SET_ELEM2 /static/ip --> CONFD_OK
TRACE MAAPI_SET_ELEM2 /static/port --> CONFD_OK
TRACE MAAPI_APPLY_TRANS
Ctrl+C
(gdb) bt
#0 0x00007ffff754125d in read () from /lib64/libpthread.so.0
#1 0x00007ffff69c26a7 in read_fill (fd=20, buf=0x7fffffffd8c0 "\031", len=4) at confd_internal.c:859
#2 0x00007ffff69c6c6a in term_read (socket=socket@entry=20, ret=ret@entry=0x7fffffffd99c, cdbop=cdbop@entry=143) at confd_internal.c:1111
#3 0x00007ffff69c76b4 in op_request_term (sock=sock@entry=20, op=op@entry=143, thandle=thandle@entry=42, isrel=isrel@entry=0, arg=arg@entry=0x6bf370, status=status@entry=0x7fffffffd99c)
at confd_internal.c:2760
#4 0x00007ffff69ed731 in intcall (sock=sock@entry=20, op=op@entry=143, thandle=thandle@entry=42, req=0x6bf370) at maapi.c:52
#5 0x00007ffff69f33be in maapi_apply_trans_flags (sock=20, tid=42, keepopen=<optimized out>, flags=0) at maapi.c:1550
....
When my daemon is suspend in TRACE MAAPI_APPLY_TRANS , I use gdb to get the call stack, and found it is waiting for reading some data, but when I cancel subscribe the ‘/static’ path, it is ok.
TRACE MAAPI_START_USER_SESSION --> CONFD_OK
TRACE MAAPI_START_TRANS --> CONFD_OK
TRACE MAAPI_SET_NAMESPACE --> CONFD_OK
TRACE MAAPI_SET_ELEM2 /static/ip --> CONFD_OK
TRACE MAAPI_SET_ELEM2 /static/port --> CONFD_OK
TRACE MAAPI_APPLY_TRANS --> CONFD_OK
TRACE MAAPI_STOP_TRANS --> CONFD_OK
TRACE MAAPI_END_USER_SESSION --> CONFD_OK
Here is my maapi code flow:
maapi_start_user_session();
maapi_start_trans();
maapi_set_elem2();
maapi_apply_trans();
maapi_finish_trans();
maapi_end_session();