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