Added more details and included yangtools-dev group in the mailing list.
-------------------------------------------------------------------------------------------------------

Hi There,

In boron release, I'm seeing issue with the mandatory substatement not
having an effect in case of rpc, whereas an error has been reported in case
of RESTCONF.

container cloud-details {
  presence true;
    leaf host-ip {
        type inet-types:ipv4-address;
        mandatory true;
        description "Host IP address";
    }
    leaf cloud-login {
        type string;
        mandatory true;
        default "admin";
        description "cloud controller login username";
    }

    leaf cloud-password {
        type string;
        mandatory true;
        default "admin";
        description "cloud controller login password";
    }
}

For e.g. I have the sample yang model defined above.

*In case of rpc*, the generated url from the defined rpc was
"/operations/eo-client-config:create-cloud-details", in this case if I do
not input "host-ip" there was no error reported however the cloud-details
gets created with cloud-login and cloud-password default values in the data
store, but I was expecting an error should be reported instead.

*In case of restconf*, the generated url from the defined data model was
"/config/controller:controller/eo-client-config:cloud-details/", in this
case if I do not input "host-ip", an error has been reported in the
karaf.log file.

Please let me know if I'm missing something to get this working for rpc as
well.

*Transcripts from karaf.log:*

2016-12-02 21:21:58,256 | ERROR | ult-dispatcher-3 |
LocalThreePhaseCommitCohort      | 169 -
org.opendaylight.controller.sal-distributed-datastore
- 1.4.0.Boron | Failed to prepare transaction
member-1-datastore-config-fe-0-txn-9
on backend
java.lang.IllegalArgumentException: Node (http://www.sample.com/ns/
<http://www.sample.com/ns/cloud-config?revision=2016-10-21)cloud-details>
eo-client-config?revision=2016-10-21)cloud-details
<http://www.sample.com/ns/cloud-config?revision=2016-10-21)cloud-details>
is missing mandatory descendant /(http://www.sample.com/ns/
<http://www.sample.com/ns/cloud-config?revision=2016-10-21>eo-client-config
?revision=2016-10-21
<http://www.sample.com/ns/cloud-config?revision=2016-10-21>)*host-ip*
        at com.google.common.base.Preconditions.checkArgument(Precondit
ions.java:145)[41:com.google.guava:18.0.0]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Mandat
oryLeafEnforcer$Strict.enforceOnTreeNode(MandatoryLeafEnforc
er.java:60)[57:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Presen
ceContainerModificationStrategy.verifyStructure(PresenceCont
ainerModificationStrategy.java:33)[57:org.opendaylight.
yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Abstra
ctNodeContainerModificationStrategy.verifyStructure(Abstract
NodeContainerModificationStrategy.java:55)[57:org.opendaylig
ht.yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Abstra
ctNodeContainerModificationStrategy.verifyStructure(Abstract
NodeContainerModificationStrategy.java:55)[57:org.opendaylig
ht.yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Presen
ceContainerModificationStrategy.verifyStructure(PresenceCont
ainerModificationStrategy.java:35)[57:org.opendaylight.
yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Modifi
edNode.seal(ModifiedNode.java:290)[57:org.opendaylight.
yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.Abstra
ctReadyIterator.process(AbstractReadyIterator.java:46)[57:
org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
        at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemo
ryDataTreeModification.ready(InMemoryDataTreeModification.ja
va:281)[57:org.opendaylight.yangtools.yang-data-impl:1.0.0.Boron]
        .............
        .............
        .............

2016-12-02 21:21:58,256 | WARN  | CommitFutures-5  | RestconfImpl
          | 243 - org.opendaylight.netconf.sal-rest-connector - 1.4.0.Boron
| Error creating data
config/controller:controller/eo-client-config:cloud-details/
TransactionCommitFailedException{message=canCommit encountered an
unexpected failure, errorList=[RpcError [message=canCommit encountered an
unexpected failure, severity=ERROR, errorType=APPLICATION,
tag=operation-failed, applicationTag=null, info=null,
cause=java.lang.IllegalArgumentException: Node (
http://www.sample.com/ns/eo-client-config?revision=2016-10-21)cloud-details
is missing mandatory descendant /(
http://www.sample.com/ns/eo-client-config?revision=2016-10-21)host-ip]]}
        at
org.opendaylight.controller.md.sal.dom.broker.impl.TransactionCommitFailedExceptionMapper.newWithCause(TransactionCommitFailedExceptionMapper.java:37)[138:org.opendaylight.controller.sal-broker-impl:1.4.0.Boron]
        at
org.opendaylight.controller.md.sal.dom.broker.impl.TransactionCommitFailedExceptionMapper.newWithCause(TransactionCommitFailedExceptionMapper.java:18)[138:org.opendaylight.controller.sal-broker-impl:1.4.0.Boron]
        at
org.opendaylight.yangtools.util.concurrent.ExceptionMapper.apply(ExceptionMapper.java:103)[44:org.opendaylight.yangtools.util:1.0.0.Boron]
        at
org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker.handleException(ConcurrentDOMDataBroker.java:220)[169:org.opendaylight.controller.sal-distributed-datastore:1.4.0.Boron]
        at
org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker.access$000(ConcurrentDOMDataBroker.java:49)[169:org.opendaylight.controller.sal-distributed-datastore:1.4.0.Boron]
        at
org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker$1.onFailure(ConcurrentDOMDataBroker.java:128)[169:org.opendaylight.controller.sal-distributed-datastore:1.4.0.Boron]
        at
com.google.common.util.concurrent.Futures$6.run(Futures.java:1310)[41:com.google.guava:18.0.0]
        at
com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[41:com.google.guava:18.0.0]
        at
com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[41:com.google.guava:18.0.0]
        at
com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[41:com.google.guava:18.0.0]
        at
com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202)[41:com.google.guava:18.0.0]
        at
com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:68)[41:com.google.guava:18.0.0]
        at
org.opendaylight.controller.cluster.datastore.SingleCommitCohortProxy$1.onComplete(SingleCommitCohortProxy.java:58)[169:org.opendaylight.controller.sal-distributed-datastore:1.4.0.Boron]
        at
akka.dispatch.OnComplete.internal(Future.scala:258)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.OnComplete.internal(Future.scala:256)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.japi$CallbackBridge.apply(Future.scala:186)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.japi$CallbackBridge.apply(Future.scala:183)[152:com.typesafe.akka.actor:2.4.7]
        at
scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        at
akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91)[152:com.typesafe.akka.actor:2.4.7]
        at
scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        at
akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)[152:com.typesafe.akka.actor:2.4.7]
        at
akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:409)[152:com.typesafe.akka.actor:2.4.7]
        at
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        at
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        at
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]
        at
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[148:org.scala-lang.scala-library:2.11.8.v20160304-115712-1706a37eb8]


Thanks,
Senthil Jayakumar
_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to