- From: Magnus Feuer <mfeuer1@jaguarlandrover.com>
- Date: Wed, 12 Feb 2020 19:32:55 +0000
- To: gandersson <gandersson@genivi.org>
- CC: public-automotive <public-automotive@w3.org>
- Message-ID: <DB7PR04MB4697FF896E18ED842A5CD583F91B0@DB7PR04MB4697.eurprd04.prod.outlook.com>
Gunnar, I do like FrancaIDL. Our main, non-technical issue is that the Eclipse / Java plugin environment used for tooling is completely outside the tooling we (and, if I may speculate, others) use in their automated CI/CD tool chain. That, eventually, leads to hiring and resource issues that I would rather avoid. The upside of using a YAML-based service definition format, semantically equivalent to FrancaIDL, is the vast amount of skill, python libraries and tools available to process such files. Looking for a path forward, do you know if there, in addition to the rudimentary python support out there today, are plans for FrancaIDL tooling that is easier to deploy in an automated / cloud environment? /Magnus F. ------------------- System Architect Manager Jaguar Land Rover Email: mfeuer1@jaguarlandrover.com<mailto:mfeuer1@jaguarlandrover.com> Mobile: +1 949 294 7871 [https://ci3.googleusercontent.com/proxy/OfaGrHPlawsuQPtTYPlu2XkJRCrzJtHOGv2OSrFHsvJ6km-xYenAYwOsmmC-X18PrWn7LzA6AM--8oIU05Ifg6GD=s0-d-e1-ft#http://www.jaguarlandrover.com/email/jlr.jpg] Jaguar Land Rover North America, LLC 1450 NW 18th Ave, Portland, OR 97209 ------------------- Business Details: Jaguar Land Rover Limited Registered Office: Abbey Road, Whitley, Coventry CV3 4LF Registered in England No: 1672070 This e-mail and any attachments contain confidential information for a specific individual and purpose. The information is private and privileged and intended solely for the use of the individual to whom it is addressed. If you are not the intended recipient, please e-mail us immediately. We apologise for any inconvenience caused but you are hereby notified that any disclosure, copying or distribution or the taking of any action in reliance on the information contained herein is strictly prohibited. This e-mail does not constitute an order for goods or services unless accompanied by an official purchase order. ________________________________ From: Gunnar Andersson <gandersson@genivi.org> Sent: Tuesday, February 11, 2020 10:49 To: Magnus Feuer <mfeuer1@jaguarlandrover.com> Cc: public-automotive@w3.org <public-automotive@w3.org>; Rudolf J Streif <rudolf.streif@ibeeto.com>; Ulf Bjorkengren <ulfbjorkengren@geotab.com>; Schildt Sebastian (CR/AEX1) <Sebastian.Schildt@de.bosch.com> Subject: Re: Proposal for Remote Procedure Call extensions to VISS. On Tue, 2020-02-11 at 18:00 +0000, Magnus Feuer wrote: > Top posting as well. > > @Ulf - > Our initial intent with the proposal was to extend VISS, in a > backward compatible way, with RPC calls. > It started of as a protocol that only shared the websocket with the > pub/sub part, so that we don't have to run several endpoints for a > single session. > We then discussed merging signal semantics with RPCs, which seems to > be a less than ideal solution. I believe that is where we are right > now. > > I think the part forward for VISS, should we decide to expand that > protocol while we figure out a long-term solution, would be to > separate RPC calls from the existing pub/sub calls so that their only > commonality is that they run over a single websocket. WAMP = Pub/Sub + RPC. I know I said it already :) I forget if they run over one or more sockets, but I'd say complexity largely disappear when this is already specified _and_ implemented. > That leaves us with how we specify services (if we don't expand the > VSS format). If there is interest I can check if we can release our > internal YAML service catalog format as input to that conversation. I hate if it seems like we just plug "our" preferred technologies but GENIVI has been and remains consistent on this point. I think it is an important virtue that many in the industry appreciate - we have found out over time how things like Franca, is adopted far beyond what is really publicly known, but I think this is in part because of staying firm and consistent. We stick to recommendations as long as there is not overwhelming reason to change, and thus create stability for the industry, year after year. The principle is simply this: 1) Signal/data semantics which use simple data types: --> Vehicle Signal Specification. 2) Complex datatypes and/or command-and-control interfaces: --> Franca IDL That's it! I really want to voice my objection to creating further overlap and to keep making every single incompatible technology choice subsume the same features of every other technology choice, to just create an even bigger fragmentation mess. There's already a little overlap, because unlike VSS, Franca IDL is a complete modeling language for interfaces and therefore a superset. Franca has Attributes (aka properties) that are observable (aka pub/sub). The simplicity of VSS is its power and I really think it should be protected rather than grow into a generic modeling language. But some of the overlap turns out useful. I have in other projects shown that translation between VSS and Franca Attributes is straight forward, and this in fact gives us access to create, a SOME/IP service that exposes signals as defined by VSS (by going via Franca), among other protocols. The scaffolding code for this is generated by tools that already exist today. Together the ecosystem of tools around these two things, data server and (micro)services through RPC, create the potential to design just about anything you need. The only possible third category I might add is a more streaming/data- flow type protocol, which I believe should be seen as another category, compared to on-demand polling, RPC, and pub/sub. We are keeping a track open for that need as well, in the Cloud-and-Connected Services analysis of what future data-driven architectures should look like. So I'm fully with you on all of the conclusions you have drawn (as are others to be honest, when we discuss design with other OEM architects!). The combination of a data-driven _plus_ API/RPC/services driven design is what enables a full system design. These are excellent, complementary tools. > @Rudi - > I agree with that we should focus on the what, or rather the why. As > I said previously, we internally run RPCs to actuate state change in > the vehicle and signals to report status. Exactly, I was almost about to repeat your words in response to Rudi. I find it natural and a good approach. Of course it's *possible* for some designs to choose another behavior, such as: Write/Set the value of the VSS signal "*.Door.Window.Position" means the same thing as "Move the window to this position". It should not be the primary recommendation for sure, I much prefer like you actuating by an explicit command API, but it is really not for us to say. We should first create the possibilities and tools here, with perhaps some best-practice guidance. > The alternative is to have setter signals to actuate change, with > which I see a number of problems: > > Return values > Defining return values is non-trivial using pub/sub since you will > end up with transaction signals and other context-specific, short- > lived data that really is outside the scope of pub/sub. Yeah, it's not only non-trivial. If you need a return value, and I would imagine you do if it is used to indicate success/failure, then clearly it would be crazy to put this in a "side channel" (another signal). Race-conditions, complexity... I just can't see it work reliably. > > Contracting > Defining a call contract is easier to do when you have a well-defined > parameters and return values with legal intervals and assert > conditions. This allows us to write validation systems for call > sequences at a higher abstraction level than is possible with > pub/sub. +1 > Signals are more nebulous since there may be multiple recipients that > act on them, and there are no real boundaries of when signals can or > cannot be transmitted. Precisely, signals are (generally speaking, again not enforcing limits) a one publisher - multiple subscribers model. > Complex call sequences > Once we start seeing A --(call)--> B --(call)--> C --(return)--> B -- > (return)--> A, it will be almost impossible to trace those calls > using only pub/sub-only . > Implementing a transaction ID (or rather a transaction ID stack to > track the call flow) is fairly easy using RPCs, but not really a > thing you want to do using signals. +1 You are now just letting your engineering brain run wild with what how this could /possibly/ be implemented (i.e. misused). This is inventive, but it is crazyness - even more than creating new VISS extensions ;-) > Type management > RPC specification languages usually allow you to declare (nested > structs) and other self-contained data types that can be atomically > transmitted as an argument or return value to an RPC. > While this is possible using pub/sub as well, the natural boundaries > and distinctiveness of a typedef cannot be reproduced in a signal > tree. > > I would love to hear dissenting opinions on the list above since I > believe there are more things to explore here. As much as I would like to, I find it impossible to dissent, on most of what you said here. ;-) - Gunnar
Received on Wednesday, 12 February 2020 19:33:12 UTC