Hi,
I’m working on performance right now and looking at how confd interacts with an external dB.
then when I create a entry in a list I get the following in the trace log:
TRACE CALL trans init(thandle=15,mode="rw",db=running)
TRACE CALL data get_elem(thandle=15,/x/y{z}/key)
(NOEXISTS)
TRACE CALL trans_lock(thandle=15)
TRACE CALL write_start(thandle=15)
TRACE CALL data create(thandle=15,/x/y{z})
TRACE CALL data set_elem(thandle=15, /x/y{z}/a, 1)
TRACE CALL trans prepare(thandle=15)
TRACE CALL trans commit(thandle=15)
TRACE CALL trans finish(thandle=15)
Which is fine, not much to say about that.
If I now do a edit_config to my running dB and change the a leaf value to 4 via netconf-console I get.
TRACE CALL trans init(thandle=17,mode="rw",db=running)
TRACE CALL data get_elem(thandle=17,/x/y{z}/key)
(z)
TRACE CALL data get_elem(thandle=17,/x/y{z}/a)
(1)
TRACE CALL trans_lock(thandle=17)
TRACE CALL trans init(thandle=18,mode="r",db=running)
TRACE CALL data get_object(thandle=18,/x/y{z})
TRACE CALL trans finish(thandle=18)
TRACE CALL write_start(thandle=17)
TRACE CALL data set_elem(thandle=17, /x/y{z}/a, 4)
TRACE CALL trans prepare(thandle=17)
TRACE CALL trans commit(thandle=17)
TRACE CALL trans finish(thandle=17)
Why do I get the transaction 18? This is very costly, confd has enugh information in transaction 17 to perform the operation.
The real objects in our system are quite large and costly to fetch so the transaction 18 will take more time than the transaction 17 in total.
Why do confd start a new transaction and read the whole object? which just waste time
If this would be a part of the validate phase of the transaction all the read operations should have been on the transaction 17.
Pls explain why we see the transaction 18 and how we can get rid of it.