Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
How to Create multiple versions of an Application:
POST

Uploading and listing artifact:

In order to create applications with versions, the artifact jars (which contains CDAP application) needs to be uploaded first. Once an artifact is uploaded, an application can be created from it by optionally providing a configuration.

Uploading artifact

Code Block
languagebash
POST /v3/namespaces/<namespace-id>/artifacts/<artifact-id> --data-binary @path/to/file-1.1.0.jar

You can view the information about artifacts deployed using the listing endpoint.  


Listing artifacts

Code Block
languagebash
GET /v3/namespaces/<namespace-id>/artifacts 


Creating applications from artifacts:

REST call to create application from artifact

Code Block
languagebash
POST /v3/namespaces/<namespace-id>/apps/<app-id>/versions/<version-id>/create

Body:
 -d { "artifact": {
 
 "name": "WordCount",
 
 "version": "3.5.1",
 
 "scope": "user"},
 
 "config": {"stream": "purchaseStream"}
 
 }

...

version-id: Needs to be composed only of alphanumeric, -, _ and . 

          Note:          i)

  • If a version-id is not specified during application creation, '-SNAPSHOT' is used as the application version

...

  •  

...

  • If a version-id ends with '-SNAPSHOT', then that version is mutable and it can be updated using the update app endpoint (more details below). 

 

...

Starting/

...

Stopping programs of a particular version of an Application:

Code Block
languagebash
POST /v3/namespaces/<namespace-id>/apps/<app-id>/versions/<version-id>/services/<service-id>/start

...

 
 
POST /v3/namespaces/<namespace-id>/apps/<app-id>/versions/<version-id>/services/<service-id>/stop

Note: We don't support concurrent runs of the same Flow and Worker across multiple versions. That is, flow F1 in v2 of app MyApp can't be started when flow F1 in v1 of app MyApp is running.

...


Deleting a version of an Application:

Code Block
languagebash
DELETE /v3/namespaces/<namespace-id>/apps/<app-id>/versions/<version-id> 

Note: No program of this version should be running.

 

Service Routing: 

1. Deterministic routing - call methods of a service of a specific version (service of that version should be running)

Code Block
languagebash
GET|POST|PUT|DELETE /v3/namespaces/<namespace-id>/apps/<app-id>/versions/<version-id>/services/<service-id>/methods/<method-name>


  Note: Deterministic routing through version-id in the REST API works only in SDK. In distributed mode, as a workaround, the routeconfig can be used to set 100% routing to a version that is desired. This will be fixed in 3.6 (CDAP-7331).

         

2. Configuration based Routing – configuration based routing will be used when the method call is made to non-versioned API:

Code Block
languagebash
 GET|POST|PUT|DELETE /v3/namespaces/<namespace-id>/apps/<app-id>/services/<service-id>/methods/<method-name>


 Say, if the configuration is : { "v1" : 30, "v2" : 30, "v3" : 40 } : 30% of requests are routed to version v1, 30% requests are routed to version v2, 40% requests are routed to v3


Setting up route configs for Config based routing

Updating route config:

Code Block
languagebash
PUT /v3/namespaces/<namespace-id>/apps/<app-id>/services/<service-id>/routeconfig -d '{ "v1" : 30, "v2" : 30, "v3" : 40 }'

Note: The route %s should always integers and should sum to 100. Otherwise the config will not be accepted.

View/Get Route Config:

Code Block
themeEmacs
languagebash
GET /v3/namespaces/<namespace-id>/apps/<app-id>/services/<service-id>/routeconfig


Delete Route Config:

Code Block
languagebash
DELETE /v3/namespaces/<namespace-id>/apps/<app-id>/services/<service-id>/routeconfig


Note: If a route config is not present, a random endpoint will be chosen among all the versions.