Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This page will serve as a reference for how to use the A&AI DSL API and commonly used DSL queries.

Before You Start!

It's important that you engage the AAI team before running any adhoc DSL queries. The current process is to have the AAI team vet the DSL queries to make sure the traversal used is optimal and does not cause performance issues in A&AI. As edge rules and schema may change, it is important for clients to communicate the DSL queries that they use. It's important that, at the very least, we know who is using which queries so we can be cautious of changes in the future. And we can help you find the best way to get the data you need.


Table of Contents


Getting Started with the DSL API

To execute a DSL query, a client will perform a PUT on the dsl endpoint and include a payload that includes the dsl query to be run. The version dictates which release's REST API version the output will be based on.An AID for these custom queries is available on our AID page.


PUT /aai/v$/dsl?format={format}

...

  1. Start Node in the DSL Query should include filtered properties that are keys or indexed properties. These come from a special property in oxm (DslStartNodeProperties). The below will error out
    1. cloud-region*
    2. pserver('prov-status','PROV')
    3. ERR.5.4.6149 : DSL Error  while processing the query :Non indexed keys sent. Valid keys for cloud-region cloud-owner,cloud-region-id,cloud-type
  2. There should be atleast one return node type specified. If the user does not specify a "*" or store('x') on any node type it errors out
    1. generic-vnf('vnf-type','SW')('equipment-role','UCPE') > service-instance > service-subscription
    2. ERR.5.4.6152: No nodes marked for output
  3. Check if a valid edge exists between the node types specified and labels
    1. ERR.5.4.6107: No EdgeRule found for passed nodeTypes: cloud-region, l-interface
    2. ERR.5.4.6107: No rules found for EdgeRuleQuery with filter params node type: cloud-region, node type: complex, label: org.onap.relationships.inventory.Belongs, type: TREE, isPrivate: false
  4. Check for redundant edges to prevent the possibility of loops to occur from a DSL query.
    A > B, B > C, C > A
    1. ERR.5.4.6151: Validation error :Loop Validation failed
  5. Check if the dsl has a max type of vertices returned or traversed - if beyond that then the client should use CQ
    1. ERR.5.4.6151: Validation error :NodeCount Validation failed"
  6. Syntax Errors are caught at the grammar level
    1. ERR.5.4.6153: DSL Syntax Error while processing the query 
  7. Lower Timeouts for DSL Queries
    1. DSL Queries have a lower timeout than custom queries or any other APIs in resources or traversal to prevent the client from running adhoc queries
  8. aa


Best Practices

  1. Verify if the DSL traversal is optimal. Run .profile() on the underlying gremlin query
  2. If available always use keys or unique indexes in the start node or any node in the query
  3. Frequently used DSL queries should be encouraged to be converted to custom-queries since the start-node in a custom query has a URI
  4. Run the format=count and verify if the traversal can be reversed to get the optimal query

...