Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/782#discussion_r130627191
  
    --- Diff: 
rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/ApplicationApi.java ---
    @@ -110,15 +112,32 @@ public Response createFromYaml(
                         required = true)
                 String yaml);
     
    +    @Beta
    +    @PUT
    +    @Path("/{application}")
    +    @Consumes({"application/x-yaml",
    +            // see http://stackoverflow.com/questions/332129/yaml-mime-type
    +            "text/yaml", "text/x-yaml", "application/yaml"})
    +    @ApiOperation(
    +            value = "[BETA] Create and start a new application from YAML, 
with the given id",
    +            response = org.apache.brooklyn.rest.domain.TaskSummary.class
    +    )
    +    @ApiResponses(value = {
    +            @ApiResponse(code = 404, message = "Undefined entity or 
location"),
    +            @ApiResponse(code = 409, message = "Application already 
registered")
    --- End diff --
    
    @m4rkmckenna This works for me. I ran `mvn clean install -o -DskipTests` 
for all brooklyn projects, then I unpacked and ran 
`brooklyn-dist/karaf/apache-brooklyn/target/apache-brooklyn-0.12.0-SNAPSHOT.tar.gz`,
 and then tried to deploy with the same id twice:
    
    ```
    curl -v -X PUT -u admin:password -H "Content-Type: application/x-yaml" 
http://localhost:8081/v1/applications/thisismyid --data-binary 
@/Users/aledsage/amp-cluster/app.yaml
    
    *   Trying ::1...
    * TCP_NODELAY set
    * Connected to localhost (::1) port 8081 (#0)
    * Server auth using Basic with user 'admin'
    > PUT /v1/applications/thisismyid HTTP/1.1
    > Host: localhost:8081
    > Authorization: Basic YWRtaW46cGFzc3dvcmQ=
    > User-Agent: curl/7.51.0
    > Accept: */*
    > Content-Type: application/x-yaml
    > Content-Length: 69
    > 
    * upload completely sent off: 69 out of 69 bytes
    < HTTP/1.1 409 Conflict
    < Date: Tue, 01 Aug 2017 14:38:34 GMT
    < Content-Type: application/json
    < Cache-Control: no-cache, no-store
    < Pragma: no-cache
    < Expires: 0
    < Transfer-Encoding: chunked
    < Server: Jetty(9.2.19.v20160908)
    < 
    {"message":"Error launching blueprint, id already exists: 
IdAlreadyExistsException: call to manage entity 
BasicApplicationImpl{id=thisismyid} 
(ManagementTransitionMode[NONEXISTENT->MANAGED_PRIMARY]) but different entity 
BasicApplicationImpl{id=thisismyid} already known under that id 'thisismyid' at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager@4a88c541","details":"org.apache.brooklyn.core.mgmt.internal.IdAlreadyExistsException:
 call to manage entity BasicApplicationImpl{id=thisismyid} 
(ManagementTransitionMode[NONEXISTENT->MANAGED_PRIMARY]) but different entity 
BasicApplicationImpl{id=thisismyid} already known under that id 'thisismyid' at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager@4a88c541\n\tat 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manageNonRecursive(LocalEntityManager.java:701)\n\tat
 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.access$300(LocalEntityManager.java:84)\n\tat
 org.apache.brooklyn.core.mgmt.internal.LocalEn
 tityManager$2.apply(LocalEntityManager.java:419)\n\tat 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager$2.apply(LocalEntityManager.java:374)\n\tat
 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.recursively(LocalEntityManager.java:645)\n\tat
 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manageRecursive(LocalEntityManager.java:439)\n\tat
 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manage(LocalEntityManager.java:333)\n\tat
 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.createEntity(LocalEntityManager.java:177)\n\tat
 
org.apache.brooklyn.core.mgmt.EntityManagementUtils.createUnstarted(EntityManagementUtils.java:94)\n\tat
 
org.apache.brooklyn.rest.resources.ApplicationResource.launch(ApplicationResource.java:312)\n\tat
 
org.apache.brooklyn.rest.resources.ApplicationResource.createFromYaml(ApplicationResource.java:299)\n\tat
 
org.apache.brooklyn.rest.resources.ApplicationResource.createFromYamlWithAppId(ApplicationResource.java:251)\n\t
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat
 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat
 java.lang.reflect.Method.invoke(Method.java:498)\n\tat 
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)\n\tat
 
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)\n\tat
 org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:189)\n\tat 
org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)\n\tat 
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)\n\tat
 
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)\n\tat
 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)\n\tat
 org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationO
 bserver.java:121)\n\tat 
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:262)\n\tat
 
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)\n\tat
 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)\n\tat
 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)\n\tat
 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)\n\tat
 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:299)\n\tat
 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:235)\n\tat
 javax.servlet.http.HttpServlet.service(HttpServlet.java:710)\n\tat 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:274)\n\tat
 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)\n\tat 
org.eclipse.jetty.servlet.ServletHandler.doHandle(
 ServletHandler.java:587)\n\tat 
org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(Http*
 Curl_http_done: called premature == 0
    * Connection #0 to host localhost left intact
    ServiceServletHandler.java:71)\n\tat 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\tat
 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)\n\tat
 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\n\tat
 
org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:287)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\n\tat 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\n\tat
 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat
 
org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)\n\tat
 org.eclipse.jetty.server.handler.HandlerWrapper.ha
 ndle(HandlerWrapper.java:97)\n\tat 
org.eclipse.jetty.server.Server.handle(Server.java:499)\n\tat 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)\n\tat 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)\n\tat
 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\n\tat
 java.lang.Thread.run(Thread.java:745)\n","error":409}
    ```
    
    It's not pretty, with the full stacktrace being included, but it does give 
the 409 response and does include the exception's message.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to