How does NETCONF Confirmed Commit work with ConfD?

As RFC 6241 describes, a confirmed <commit> operation will be reverted by ConfD if a confirming commit is not issued within the timeout period (by default 600 seconds = 10 minutes).

Bellow is a quick demo of the onfirmed commit using the ConfD example $CONFD_DIR/examples.confd/validate/c_dependency

Terminal window 1

We use netconf-console in interactive mode, so that the NETCONF session is not closed between NETCONF transactions. If we close the session the we need to set the persistent parameter so that the confirmed commit survive when we close the session. Here we keep the session open.

$ netconf-console -i

* Enter a NETCONF operation, end with an empty line
  <edit-config>
    <target>
      <candidate/>
    </target>
    <test-option>set</test-option>
    <config>
      <mtest xmlns="http://tail-f.com/ns/example/mtest"
             xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
             nc:operation="merge">
        <a_number>70</a_number>
        <b_number>14</b_number>
      </mtest>
    </config>
  </edit-config>

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
  <ok/>
</rpc-reply>

Terminal window 2

$ tail -f -n 100 devel.log
<DEBUG> 27-Nov-2015::13:07:49.695 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8: entering validate phase for candidate...
<DEBUG> 27-Nov-2015::13:07:49.695 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8:   validate: grabbing transaction lock...
<DEBUG> 27-Nov-2015::13:07:49.695 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8:  ok
<DEBUG> 27-Nov-2015::13:07:49.695 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8:   validate: run transforms and transaction hooks...
<DEBUG> 27-Nov-2015::13:07:49.695 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8:  ok
<DEBUG> 27-Nov-2015::13:07:49.696 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8: entering write phase for candidate...
<DEBUG> 27-Nov-2015::13:07:49.696 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8: entering prepare phase for candidate...
<DEBUG> 27-Nov-2015::13:07:49.696 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=8: entering commit phase for candidate...

$ confd_load -d -d -F p -P /mtest
TRACE Connected (maapi) to ConfD
starting user session ctxt=system user=system groups=[system]
TRACE MAAPI_START_USER_SESSION  --> CONFD_OK
TRACE MAAPI_START_TRANS  --> CONFD_OK
TRACE MAAPI_SAVE_CONFIG  --> CONFD_OK
TRACE Connected (stream) to ConfD
<config xmlns="http://tail-f.com/ns/config/1.0">
TRACE MAAPI_SAVE_CONFIG_RESULT  --> CONFD_OK
</config>
TRACE MAAPI_END_USER_SESSION  --> CONFD_OK

Terminal window 1

Now we do a confirmed commit. I.e. the transaction will be rolled back if we don’t confirm it before the timeout. Since we below don’t specify the timeout, the default timeout is 600s.
Just like for an ordinary commit, validation points are triggered, candidate is written to running, and subscription points are triggered.

* Enter a NETCONF operation, end with an empty line
  <commit>
    <confirmed/>
  </commit>

******* VP1 - validate_a() - Called when a_number or b_number is modified.  Always called with a_number's value
******* VP2 - validate_c() - Called for every db change
TRACE CDB_SUBSCRIPTION_EVENT --> 6
****Subscriber triggered 
TRACE CDB_SYNC_SUB CDB_DONE_PRIORITY --> CONFD_OK
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
  <ok/>
</rpc-reply>

Terminal window 2

$ tail -f -n 100 devel.log
<DEBUG> 27-Nov-2015::13:08:18.630 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6: entering validate phase for running...
<DEBUG> 27-Nov-2015::13:08:18.630 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: grabbing transaction lock...
<DEBUG> 27-Nov-2015::13:08:18.630 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:  ok
<DEBUG> 27-Nov-2015::13:08:18.630 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: creating rollback file...
<DEBUG> 27-Nov-2015::13:08:18.657 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:  ok
<DEBUG> 27-Nov-2015::13:08:18.657 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: run transforms and transaction hooks...
<DEBUG> 27-Nov-2015::13:08:18.657 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:  ok
<DEBUG> 27-Nov-2015::13:08:18.657 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: pre validate...
<DEBUG> 27-Nov-2015::13:08:18.657 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:  ok
<DEBUG> 27-Nov-2015::13:08:18.658 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: run validation over the change set...
<DEBUG> 27-Nov-2015::13:08:18.658 COHULT-M-C1N7 confd[86231]: devel-c new_usess db request daemon id: 0
<DEBUG> 27-Nov-2015::13:08:18.658 COHULT-M-C1N7 confd[86231]: devel-c db reply daemon id: 0
<DEBUG> 27-Nov-2015::13:08:18.658 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   mydaemon: validate
<DEBUG> 27-Nov-2015::13:08:18.658 COHULT-M-C1N7 confd[86231]: devel-c new_validate request daemon id: 0 thandle: 6
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: devel-c new_validate succeeded daemon id: 0 session id: 6 worker id: 4
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   mydaemon: validate: vp1
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: devel-c validate request for path /mtest:mtest/a_number
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: devel-c validate succeeded for path /mtest:mtest/a_number
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: validation over the change set done
<DEBUG> 27-Nov-2015::13:08:18.659 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: run dependency-triggered validation...
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   mydaemon: validate: vp2
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: devel-c validate request for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: devel-c validate succeeded for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   validate: dependency-triggered validation done
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6: entering write phase for running...
<DEBUG> 27-Nov-2015::13:08:18.660 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   cdb: write_start
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6: entering prepare phase for running...
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   cdb: prepare
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: devel-c close_validate request daemon id: 0 session id: 6
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: devel-c close_validate succeeded daemon id: 0 session id: 6
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6: entering commit phase for running...
<DEBUG> 27-Nov-2015::13:08:18.661 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   cdb: commit
<DEBUG> 27-Nov-2015::13:08:18.662 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   cdb: delivering commit subscription notifications at prio 3
<DEBUG> 27-Nov-2015::13:08:18.662 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=6:   cdb: all commit subscription notifications acknowledged


$ confd_load -d -d -F p -P /mtest
TRACE Connected (maapi) to ConfD
starting user session ctxt=system user=system groups=[system]
TRACE MAAPI_START_USER_SESSION  --> CONFD_OK
TRACE MAAPI_START_TRANS  --> CONFD_OK
TRACE MAAPI_SAVE_CONFIG  --> CONFD_OK
TRACE Connected (stream) to ConfD
<config xmlns="http://tail-f.com/ns/config/1.0">
  <mtest xmlns="http://tail-f.com/ns/example/mtest">
    <a_number>70</a_number>
    <b_number>14</b_number>
  </mtest>
TRACE MAAPI_SAVE_CONFIG_RESULT  --> CONFD_OK
</config>
TRACE MAAPI_END_USER_SESSION  --> CONFD_OK

Terminal window 1

Now we confirm the commit by issuing a NETCONF <commit> before the timeout expires.

* Enter a NETCONF operation, end with an empty line
  <commit/>

******* VP2 - validate_c() - Called for every db change
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
  <ok/>
</rpc-reply>

Terminal window 2

$ tail -f -n 100 devel.log
<DEBUG> 27-Nov-2015::13:09:20.967 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13: entering validate phase for running...
<DEBUG> 27-Nov-2015::13:09:20.967 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: grabbing transaction lock...
<DEBUG> 27-Nov-2015::13:09:20.967 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:  ok
<DEBUG> 27-Nov-2015::13:09:20.967 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: creating rollback file...
<DEBUG> 27-Nov-2015::13:09:20.986 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:  ok
<DEBUG> 27-Nov-2015::13:09:20.986 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: run transforms and transaction hooks...
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:  ok
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: pre validate...
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:  ok
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: run validation over the change set...
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: validation over the change set done
<DEBUG> 27-Nov-2015::13:09:20.987 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: run dependency-triggered validation...
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   mydaemon: validate
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: devel-c new_validate request daemon id: 0 thandle: 13
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: devel-c new_validate succeeded daemon id: 0 session id: 13 worker id: 4
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   mydaemon: validate: vp2
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: devel-c validate request for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: devel-c validate succeeded for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:09:20.988 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   validate: dependency-triggered validation done
<DEBUG> 27-Nov-2015::13:09:20.989 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13: entering write phase for running...
<DEBUG> 27-Nov-2015::13:09:20.989 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=13:   cdb: write_start
<DEBUG> 27-Nov-2015::13:09:20.989 COHULT-M-C1N7 confd[86231]: devel-c close_validate request daemon id: 0 session id: 13
<DEBUG> 27-Nov-2015::13:09:20.989 COHULT-M-C1N7 confd[86231]: devel-c close_validate succeeded daemon id: 0 session id: 13


$ confd_load -d -d -F p -P /mtest
TRACE Connected (maapi) to ConfD
starting user session ctxt=system user=system groups=[system]
TRACE MAAPI_START_USER_SESSION  --> CONFD_OK
TRACE MAAPI_START_TRANS  --> CONFD_OK
TRACE MAAPI_SAVE_CONFIG  --> CONFD_OK
TRACE Connected (stream) to ConfD
<config xmlns="http://tail-f.com/ns/config/1.0">
  <mtest xmlns="http://tail-f.com/ns/example/mtest">
    <a_number>70</a_number>
    <b_number>14</b_number>
  </mtest>
TRACE MAAPI_SAVE_CONFIG_RESULT  --> CONFD_OK
</config>
TRACE MAAPI_END_USER_SESSION  --> CONFD_OK

Terminal window 1

Let’s enter a different configuration with a short timeout this time.

* Enter a NETCONF operation, end with an empty line
  <edit-config>
    <target>
      <candidate/>
    </target>
    <config>
      <mtest xmlns="http://tail-f.com/ns/example/mtest"
             xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
             nc:operation="merge">
        <d_number>70</d_number>
      </mtest>
    </config>
  </edit-config>

******* VP2 - validate_c() - Called for every db change
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
  <ok/>
</rpc-reply>

Terminal window 2

$ tail -f -n 100 devel.log
<DEBUG> 27-Nov-2015::13:10:46.129 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21: entering validate phase for candidate...
<DEBUG> 27-Nov-2015::13:10:46.129 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: grabbing transaction lock...
<DEBUG> 27-Nov-2015::13:10:46.129 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:  ok
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: run transforms and transaction hooks...
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:  ok
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: pre validate...
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:  ok
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: run validation over the change set...
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: validation over the change set done
<DEBUG> 27-Nov-2015::13:10:46.130 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: run dependency-triggered validation...
<DEBUG> 27-Nov-2015::13:10:46.131 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   mydaemon: validate
<DEBUG> 27-Nov-2015::13:10:46.131 COHULT-M-C1N7 confd[86231]: devel-c new_validate request daemon id: 0 thandle: 21
<DEBUG> 27-Nov-2015::13:10:46.131 COHULT-M-C1N7 confd[86231]: devel-c new_validate succeeded daemon id: 0 session id: 21 worker id: 4
<DEBUG> 27-Nov-2015::13:10:46.131 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   mydaemon: validate: vp2
<DEBUG> 27-Nov-2015::13:10:46.131 COHULT-M-C1N7 confd[86231]: devel-c validate request for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:10:46.132 COHULT-M-C1N7 confd[86231]: devel-c validate succeeded for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:10:46.132 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21:   validate: dependency-triggered validation done
<DEBUG> 27-Nov-2015::13:10:46.132 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21: entering write phase for candidate...
<DEBUG> 27-Nov-2015::13:10:46.133 COHULT-M-C1N7 confd[86231]: devel-c close_validate request daemon id: 0 session id: 21
<DEBUG> 27-Nov-2015::13:10:46.133 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21: entering prepare phase for candidate...
<DEBUG> 27-Nov-2015::13:10:46.134 COHULT-M-C1N7 confd[86231]: devel-c close_validate succeeded daemon id: 0 session id: 21
<DEBUG> 27-Nov-2015::13:10:46.134 COHULT-M-C1N7 confd[86231]: confd commit progress db=candidate usid=11 thandle=21: entering commit phase for candidate…


$ confd_load -d -d -F p -P /mtest
TRACE Connected (maapi) to ConfD
starting user session ctxt=system user=system groups=[system]
TRACE MAAPI_START_USER_SESSION  --> CONFD_OK
TRACE MAAPI_START_TRANS  --> CONFD_OK
TRACE MAAPI_SAVE_CONFIG  --> CONFD_OK
TRACE Connected (stream) to ConfD
<config xmlns="http://tail-f.com/ns/config/1.0">
  <mtest xmlns="http://tail-f.com/ns/example/mtest">
    <a_number>70</a_number>
    <b_number>14</b_number>
  </mtest>
TRACE MAAPI_SAVE_CONFIG_RESULT  --> CONFD_OK
</config>
TRACE MAAPI_END_USER_SESSION  --> CONFD_OK

Terminal window 1

We now do a confirmed commit with confirm-timeout set to 1s. Here you can see that the validation and subscriber triggers, then another subscription trigger is issued 1s after. The last subscription trigger is the rollback due to the confirm-timeout.

* Enter a NETCONF operation, end with an empty line
  <commit>
    <confirmed/>
    <confirm-timeout>1</confirm-timeout>
  </commit>

******* VP2 - validate_c() - Called for every db change
TRACE CDB_SUBSCRIPTION_EVENT --> 6
****Subscriber triggered 
TRACE CDB_SYNC_SUB CDB_DONE_PRIORITY --> CONFD_OK
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
  <ok/>
</rpc-reply>

* Enter a NETCONF operation, end with an empty line
TRACE CDB_SUBSCRIPTION_EVENT --> 6
****Subscriber triggered 
TRACE CDB_SYNC_SUB CDB_DONE_PRIORITY --> CONFD_OK

Terminal window 2

$ tail -f -n 100 devel.log
<DEBUG> 27-Nov-2015::13:11:10.790 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19: entering validate phase for running...
<DEBUG> 27-Nov-2015::13:11:10.791 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: grabbing transaction lock...
<DEBUG> 27-Nov-2015::13:11:10.791 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:  ok
<DEBUG> 27-Nov-2015::13:11:10.791 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: creating rollback file...
<DEBUG> 27-Nov-2015::13:11:10.807 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:  ok
<DEBUG> 27-Nov-2015::13:11:10.807 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: run transforms and transaction hooks...
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:  ok
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: pre validate...
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:  ok
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: run validation over the change set...
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: validation over the change set done
<DEBUG> 27-Nov-2015::13:11:10.808 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: run dependency-triggered validation...
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   mydaemon: validate
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: devel-c new_validate request daemon id: 0 thandle: 19
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: devel-c new_validate succeeded daemon id: 0 session id: 19 worker id: 4
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   mydaemon: validate: vp2
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: devel-c validate request for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:11:10.809 COHULT-M-C1N7 confd[86231]: devel-c validate succeeded for path /mtest:mtest/c_number
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   validate: dependency-triggered validation done
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19: entering write phase for running...
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   cdb: write_start
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19: entering prepare phase for running...
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   cdb: prepare
<DEBUG> 27-Nov-2015::13:11:10.810 COHULT-M-C1N7 confd[86231]: devel-c close_validate request daemon id: 0 session id: 19
<DEBUG> 27-Nov-2015::13:11:10.811 COHULT-M-C1N7 confd[86231]: devel-c close_validate succeeded daemon id: 0 session id: 19
<DEBUG> 27-Nov-2015::13:11:10.811 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19: entering commit phase for running...
<DEBUG> 27-Nov-2015::13:11:10.811 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   cdb: commit
<DEBUG> 27-Nov-2015::13:11:10.811 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   cdb: delivering commit subscription notifications at prio 3
<DEBUG> 27-Nov-2015::13:11:10.812 COHULT-M-C1N7 confd[86231]: confd commit progress db=running usid=10 thandle=19:   cdb: all commit subscription notifications acknowledged
<DEBUG> 27-Nov-2015::13:11:11.839 COHULT-M-C1N7 confd[86231]: devel-cdb progress: delivering commit subscription notifications at prio 3
<DEBUG> 27-Nov-2015::13:11:11.840 COHULT-M-C1N7 confd[86231]: devel-cdb progress: all commit subscription notifications acknowledged


$ confd_load -d -d -F p -P /mtest
TRACE Connected (maapi) to ConfD
starting user session ctxt=system user=system groups=[system]
TRACE MAAPI_START_USER_SESSION  --> CONFD_OK
TRACE MAAPI_START_TRANS  --> CONFD_OK
TRACE MAAPI_SAVE_CONFIG  --> CONFD_OK
TRACE Connected (stream) to ConfD
<config xmlns="http://tail-f.com/ns/config/1.0">
  <mtest xmlns="http://tail-f.com/ns/example/mtest">
    <a_number>70</a_number>
    <b_number>14</b_number>
  </mtest>
TRACE MAAPI_SAVE_CONFIG_RESULT  --> CONFD_OK
</config>
TRACE MAAPI_END_USER_SESSION  --> CONFD_OK