If I understand correctly this isn't quite what Duncan/Aled are asking for though? Which is not a "request id" but an idempotency token for an application. It would need to work long term, not just cached for a short time, and it would need to work across e.g. HA failover, so it wouldn't be just a matter of caching it on the server.
For what it's worth, I'd have said this is a good use for tags but maybe for ease of reading it's better to have it as a config key as Aled does. As to how to supply the value I agree it should just be on the "deploy" operation. On Tue, 25 Jul 2017 at 19:56 Alex Heneveld <alex.henev...@cloudsoftcorp.com> wrote: > Aled- > > Should this be applicable to all POST/DELETE calls? Imagine an > `X-caller-request-uid` and a filter which caches them server side for a > short period of time, blocking duplicates. > > Solves an overlapping set of problems. Your way deals with a > "deploy-if-not-present" much later in time. > > --A > > On 25 July 2017 at 17:44, Aled Sage <aled.s...@gmail.com> wrote: > > > Hi all, > > > > I've been exploring adding support for `&deploymentUid=...` - please see > > my work-in-progress PR [1]. > > > > Do people think that is a better or worse direction than supporting > > `&appId=...` (which would likely be simpler code, but exposes the > Brooklyn > > internals more). > > > > For `&appId=...`, we could either revert [2] (so we could set the id in > > the EntitySpec), or we could inject it via a different (i.e. add a new) > > internal way so that it isn't exposedon our Java api classes. > > > > Thoughts? > > > > Aled > > > > [1] https://github.com/apache/brooklyn-server/pull/778 > > > > [2] https://github.com/apache/brooklyn-server/pull/687/commits/5 > > 5eb11fa91e9091447d56bb45116ccc3dc6009df > > > > > > > > On 07/07/2017 18:28, Aled Sage wrote: > > > >> Hi, > >> > >> Taking a step back to justify why this kind of thing is really > >> important... > >> > >> This has come up because we want to call Brooklyn in a robust way from > >> another system, and to handle a whole load of failure scenarios (e.g. > that > >> Brooklyn is temporarily down, connection fails at some point during the > >> communication, the client in the other system goes down and another > >> instance tries to pick up where it left off, etc). > >> > >> Those kind of thing becomes much easier if you can make certain > >> assumptions such as an API call being idempotent, or it guaranteeing to > >> fail with a given error if that exact request has already been accepted. > >> > >> --- > >> > >> I much prefer the semantics of the call failing (with a meaningful > error) > >> if the app already exists - that will make retry a lot easier to do > safely. > >> > >> As for config keys on the app, in Duncan's use-case he'd much prefer to > >> not mess with the user's YAML (e.g. to inject another config key before > >> passing it to Brooklyn). It would be simpler in his case to supply in > the > >> url `?appId=...` or `?deploymentId=...`. > >> > >> For using `deploymentId`, we could but that feels like more work. We'd > >> want create a lookup of applications indexed by `deploymentId` as well > as > >> `appId`, and to fail if it already exists. Also, what if someone also > >> defines a config key called `deploymentId` - would that be forbidden? Or > >> would we name-space the config key with > `org.apache.brooklyn.deploymentId`? > >> Even with those concerns, I could be persuaded of the > >> `org.apache.brooklyn.deploymentId` approach. > >> > >> For "/application's ID is not meant to be user-supplied/", that has > >> historically been the case but why should we stick to that? What > matters is > >> that the appId is definitely unique. That will be checked when creating > the > >> application entity. We could also include a regex check on the supplied > id > >> to make sure it looks reasonable (in case someone is already relying on > app > >> ids in weird ways like for filename generations, which would lead to a > risk > >> of script injection). > >> > >> Aled > >> > >> > >> On 07/07/2017 17:38, Svetoslav Neykov wrote: > >> > >>> Hi Duncan, > >>> > >>> I've solved this problem before by adding a caller generated config key > >>> on the app (now it's also possible to tag them), then iterating over > the > >>> deployed apps, looking for the key. > >>> > >>> An alternative which I'd like to mention is creating an async deploy > >>> operation which immediately returns an ID generated by Brooklyn. > There's > >>> still a window where the client connection could fail though, however > small > >>> it is, so it doesn't fully solve your use case. > >>> > >>> Your use case sounds reasonable so agree a solution to it would be nice > >>> to have. > >>> > >>> Svet. > >>> > >>> > >>> On 7.07.2017 г., at 18:33, Duncan Grant < > duncan.gr...@cloudsoftcorp.com> > >>>> wrote: > >>>> > >>>> I'd like to propose adding an appId parameter to the deploy endpoint. > >>>> This > >>>> would be optional and would presumably reject any attempt to start a > >>>> second > >>>> app with the same id. If set the appId would obviously be used in > >>>> place of > >>>> the generated id. > >>>> > >>>> This proposal would be of use in scripting deployments in a > distributed > >>>> environment where deployment is not the first step in a number of > >>>> asynchronous jobs and would give us a way of "connecting" those jobs > up. > >>>> Hopefully it will help a lot in making things more robust for > end-users. > >>>> Currently, if the client’s connection to the Brooklyn server fails > while > >>>> waiting for a response, it’s impossible to tell if the app was > >>>> provisioned > >>>> (e.g. how can you tell the difference between a likely-looking app, > and > >>>> another one deployed with an identical blueprint?). This would make it > >>>> safe > >>>> to either retry the deploy request, or to query for the app with the > >>>> expected id to see if it exists. > >>>> > >>>> Initially I'm hoping to use this in a downstream project but I think > >>>> this > >>>> would be useful to others. > >>>> > >>>> If no one has objections I'll aim to implement this over the next > >>>> couple of > >>>> weeks. On the other hand I'm totally open to suggestions of a better > >>>> approach. > >>>> > >>>> Thanks > >>>> > >>>> Duncan Grant > >>>> > >>> > >> > >> > > >