Hi Mykola,

I'd have thought it would be worth giving it some time to review,
given that it is such a significant change. I'm personally of the
opinion that significant changes like this shouldn't be merged without
review. I was hoping to do some review on it this week myself, though
I don't really get time to work on Brooklyn these days, so I was also
hoping that others would review it who are still close to the code.
Did you get a chance to look through it yourself?

What do you all think? I guess if it is in place and doesn't break
anything then it's OK?

Geoff



On Mon, 12 Sept 2022 at 09:04, Mykola Mandra
<mykola.man...@cloudsoftcorp.com> wrote:
>
> Hell All,
>
> Was I too hasty to merge the PR - 
> https://github.com/apache/brooklyn-server/pull/1358? 
> <https://github.com/apache/brooklyn-server/pull/1358?>
> We agreed to split the some of the work with Alex, and I did not see why it 
> could not be merged to continue with what I’m working on.
>
> Regards,
> Mykola
>
> > On 9 Sep 2022, at 20:17, Geoff Macartney <geom...@apache.org> wrote:
> >
> > Hi Alex,
> >
> > Thanks for the link, will have a look at the PR.
> >
> > As for the new shorthand proposal, +1 from me. I think it will be a
> > majority of cases when things *are* simple - setting sensors, etc.
> > Your example above goes from eight lines of markup for the steps to
> > two, I think that's a compelling argument in itself in favour of the
> > proposal.
> >
> > Cheers
> > Geoff
> >
> > On Thu, 8 Sept 2022 at 09:35, Alex Heneveld <a...@cloudsoft.io> wrote:
> >>
> >> Hi team,
> >>
> >> An initial PR with a few types and the ability to define an effector is
> >> available [1].
> >>
> >> This is enough for the next steps to be parallelized, e.g. new steps
> >> added.  The proposal has been updated with a work plan / list of tasks
> >> [2].  Any volunteers to help with some of the upcoming tasks let me know.
> >>
> >> Finally I've been thinking about the "shorthand syntax" and how to bring us
> >> closer to Peter's proposal of a DSL.  The original proposal allowed instead
> >> of a map e.g.
> >>
> >> step_sleep:
> >>  type: sleep
> >>  duration: 5s
> >>
> >> or
> >>
> >> step_update_service_up:
> >>  type: set-sensor
> >>  sensor:
> >>    name: service.isUp
> >>    type: boolean
> >>  value: true
> >>
> >> being able to use a shorthand _map_ with a single key being the type, and
> >> value interpreted by that type, so in the OLD SHORTHAND PROPOSAL the above
> >> could be written:
> >>
> >> step_sleep:
> >>  sleep: 5s
> >>
> >> step_update_service_up:
> >>  set-sensor: service.isUp = true
> >>
> >> Having played with syntaxes a bit I wonder if we should instead say the
> >> shorthand DSL kicks in when the step _body_ is a string (instead of a
> >> single-key map), and the first word of the string being the type, and the
> >> remainder interpreted by the type, and we allow it to be a bit more
> >> ambitious.
> >>
> >> Concretely this NEW SHORTHAND PROPOSAL would look something like:
> >>
> >> step_sleep: sleep 5s
> >> step_update_service_up: set-sensor service.isUp = true
> >> # also supporting a type, ie `set-sensor [TYPE] NAME = VALUE`, eg
> >> step_update_service_up: set-sensor boolean service.isUp = true
> >>
> >> You would still need the full map syntax whenever defining flow logic -- eg
> >> condition, next, retry, or timeout -- or any property not supported by the
> >> shorthand syntax.  But for the (majority?) simple cases the expression
> >> would be very concise.  In most cases I think it would feel like a DSL but
> >> has the virtue of a very clear translation to the actual workflow model and
> >> the underlying (YAML) model needed for resumption and UI.
> >>
> >> As a final example, the example used at the start of the proposal
> >> (simplified a little -- removing on-error retry and env map as those
> >> wouldn't be supported by shorthand):
> >>
> >> brooklyn.initializers:
> >> - type: workflow-effector
> >> name: run-spark-on-gcp
> >> steps:
> >>   1:
> >>      type: container
> >>      image: my/google-cloud
> >>      command: gcloud dataproc jobs submit spark
> >> --BUCKET=gs://$brooklyn:config("bucket")
> >>    2:
> >>      type: set-sensor
> >>      sensor: spark-output
> >>      value: ${1.stdout}
> >>
> >> Could be written in this shorthand as follows:
> >>
> >> steps:
> >>   1: container my/google-cloud command "gcloud dataproc jobs submit spark
> >> --BUCKET=gs://${entity.config.bucket}"
> >>   2: set-sensor spark-output ${1.stdout}
> >>
> >> Thoughts?
> >>
> >> Best
> >> Alex
> >>
> >>
> >> [1] https://github.com/apache/brooklyn-server/pull/1358
> >> [2]
> >> https://docs.google.com/document/d/1u02Bi6sS8Fkf1s7UzRRMnvLhA477bqcyxGa0nJesqkI/edit#heading=h.gbadaqa2yql6
> >>
> >>
> >> On Wed, 7 Sept 2022 at 09:58, Alex Heneveld <a...@cloudsoft.io> wrote:
> >>
> >>> Hi Peter,
> >>>
> >>> Yes - thanks for the extra details.  I did take your suggestion to be a
> >>> procedural DSL not YAML, per the illustration at [1] (second code block).
> >>> Probably where I was confusing was in saying that unlike DSLs which just
> >>> run (and where the execution can be delegated to eg java/groovy/ruby), 
> >>> here
> >>> we need to understand and display, store and resume the workflow progress.
> >>> So I think it needs to be compiled to some representation that is well
> >>> described and that new Apache Brooklyn code can reason about, both in the
> >>> UI (JS) and backend (Java).  Parsing a DSL is much harder than using YAML
> >>> for this "reasonable" representation (as in we can reason _about_ it :) ),
> >>> because we already have good backend processing, persistence,
> >>> serialization; and frontend processing and visualization support for
> >>> YAML-based models.  So I think we almost definitely want a well-described
> >>> declarative YAML model of the workflow.
> >>>
> >>> We might *also* want a Workflow DSL because I agree with you a DSL would
> >>> be nicer for a user to write (if writing by hand; although if composing
> >>> visually a drag-and-drop to YAML is probably easier).  However it should
> >>> probably get "compiled" into a Workflow YAML.  So I'm suggesting we do the
> >>> workflow YAML at this stage, and a DSL that compiles into that YAML can be
> >>> designed later.  (Designing a good DSL and parser and reason-about-able
> >>> representation is a big task, so being able to separate it feels good 
> >>> too!)
> >>>
> >>> Best
> >>> Alex
> >>>
> >>> [1]
> >>> https://docs.google.com/document/d/1u02Bi6sS8Fkf1s7UzRRMnvLhA477bqcyxGa0nJesqkI/edit#heading=h.75wm48pjvx0h
> >>>
> >>>
> >>> On Fri, 2 Sept 2022 at 20:17, Geoff Macartney <geoff.macart...@gmail.com>
> >>> wrote:
> >>>
> >>>> Hi Peter,
> >>>>
> >>>> Thanks for such a detailed writeup of how you see this working. I fear
> >>>> I've too little experience with this sort of thing to be able to say
> >>>> anything very useful about it. My thought on the matter would be,
> >>>> let's get started with the yaml based approach and see how it goes. I
> >>>> think that experience would then give us a much better feel for what a
> >>>> really nice and usable DSL for workflows would look like (probably to
> >>>> address all the pain points of the yaml approach! :-)   The outline
> >>>> above will then be a good starting point, I'm sure.
> >>>>
> >>>> Cheers
> >>>> Geoff
> >>>>
> >>>> On Thu, 1 Sept 2022 at 21:26, Peter Abramowitsch
> >>>> <pabramowit...@gmail.com> wrote:
> >>>>>
> >>>>> Hi All
> >>>>> I just wanted to clarify something in my comment the other day about
> >>>> DSLs
> >>>>> since I see that the acronym was also used in Alex's original document.
> >>>>> Unless I misunderstood, Alex was proposing to create a DSL for Brooklyn
> >>>>> using yaml as syntax and writing a code layer to translate between that
> >>>>> syntax and underlying APIs which are presumably all in Java.
> >>>>>
> >>>>> What I was suggesting was a DSL written directly in  Java (I guess)
> >>>> whose
> >>>>> syntax would be that language, but whose grammar would be keywords that
> >>>>> were also Java functions.  Some of these functions would be pre-defined
> >>>> in
> >>>>> the DSL, while others could be  defined by the user and could use other
> >>>>> functions of the DSL.    The result would be turned into a JAR file (or
> >>>>> equivalent in another platform)   But during the compile phase, it
> >>>> would be
> >>>>> checked for errors, and it could be debugged line by line either
> >>>> invoking
> >>>>> live functionality or using a library of mock versions of the Brooklyn
> >>>> API.
> >>>>>
> >>>>> In this 'native' DSL one could provide different types of workflow
> >>>>> constructs as functions (In the BaseClass), taking function names as
> >>>> method
> >>>>> pointers, or using Lambdas.  It would be a lot easier in Ruby or Python
> >>>>>
> >>>>> // linear
> >>>>> brooklynRun(NamedTaskMethod, NamedTaskMethod)
> >>>>>
> >>>>> // chained
> >>>>> TaskMethodA()TaskMethodB().
> >>>>>
> >>>>> // asynchronous
> >>>>> brooklynJoin(NamedTaskMethod, NamedTaskMethod,...)
> >>>>>
> >>>>> // conditional
> >>>>> brooklynRunIf(NamedTaskMethod, NamedConditionMethod,...)
> >>>>>
> >>>>> // iterative
> >>>>> brooklynRunWhile(NamedTaskMethod, NamedConditionMethod,...)
> >>>>> brooklynRunUntil(NamedTaskMethod, NamedConditionMethod,...)
> >>>>>
> >>>>> // there could even be a utility to implement legacy syntax (this of
> >>>> course
> >>>>> would require the extra code layer I was trying to avoid)
> >>>>> runYaml(Path)
> >>>>>
> >>>>> A basic class structure might be
> >>>>>
> >>>>> // where BrooklynRecipeBase implements the utility functions including,
> >>>>> among others  Join, Run, If, While, Until mentioned above
> >>>>> // and the BrooklynWorkflowInterface would dictate the functional
> >>>>> requirements for the mandatory aspects of the Recipe.
> >>>>> class MyRecipe extends BrooklynRecipeBase implements,
> >>>>> BrooklynWorkflowInterface
> >>>>> {
> >>>>> Initialize()
> >>>>> createContext()   - spin up resources
> >>>>> workflow() - the main launch sequence using aspects of the DSL
> >>>>> monitoring() - an asynchronous workflow used to manage sensor output or
> >>>> for
> >>>>> whatever needs to be done while the "orchestra" is plating
> >>>>> shutdownHook() - called whenever shutdown is happening
> >>>>> }
> >>>>>
> >>>>> For those who don't like the smell of Java, the source file could just
> >>>> be
> >>>>> the contents, which would then be injected into the class framing code
> >>>>> before compilation.
> >>>>>
> >>>>> These are just ideas.  I'm not familiar enough with Brooklyn in its
> >>>> current
> >>>>> implementation to be able to create realistic pseudocode.
> >>>>>
> >>>>> Peter
> >>>>>
> >>>>> On Thu, Sep 1, 2022 at 9:24 AM Geoff Macartney <
> >>>> geoff.macart...@gmail.com>
> >>>>> wrote:
> >>>>>
> >>>>>> Hi Alex,
> >>>>>>
> >>>>>> That's great, I'll be excited to hear all about it.  7th September
> >>>>>> suits me fine; I would probably prefer 4.00 p.m. over 11.00.
> >>>>>>
> >>>>>> Cheers
> >>>>>> Geoff
> >>>>>>
> >>>>>> On Thu, 1 Sept 2022 at 12:41, Alex Heneveld <a...@cloudsoft.io>
> >>>> wrote:
> >>>>>>>
> >>>>>>> Thanks for the excellent feedback Geoff and yes there are some very
> >>>> cool
> >>>>>> and exciting things added recently -- containers, conditions, and
> >>>> terraform
> >>>>>> and kubernetes support, all of which make writing complex blueprints
> >>>> much
> >>>>>> easier.
> >>>>>>>
> >>>>>>> I'd love to host a session to showcase these.
> >>>>>>>
> >>>>>>> How does Wed 7 Sept sound?  I could do 11am UK or 4pm UK --
> >>>> depending
> >>>>>> what time suits for people who are interested.  Please RSVP and
> >>>> indicate
> >>>>>> your time preference!
> >>>>>>>
> >>>>>>> Best
> >>>>>>> Alex
> >>>>>>>
> >>>>>>>
> >>>>>>> On Wed, 31 Aug 2022 at 22:17, Geoff Macartney <
> >>>> geoff.macart...@gmail.com>
> >>>>>> wrote:
> >>>>>>>>
> >>>>>>>> Hi Alex,
> >>>>>>>>
> >>>>>>>> Another thought occurred to me when reading that workflow
> >>>> proposal. You
> >>>>>> wrote
> >>>>>>>>
> >>>>>>>> "and with the recent support for container-based tasks and
> >>>> declarative
> >>>>>>>> conditions, we have taken big steps towards enabling YAML
> >>>> authorship"
> >>>>>>>>
> >>>>>>>> Unfortunately over the past while I haven't been able to keep up as
> >>>>>>>> closely as I would like with developments in Brooklyn. I'm just
> >>>>>>>> wondering if it might be possible to get together some time, on
> >>>> Google
> >>>>>>>> Meet or Zoom or whatnot, if you or a colleague could spare half an
> >>>>>>>> hour to demo some of these recent developments? But don't worry
> >>>> about
> >>>>>>>> it if you're too busy at present.
> >>>>>>>>
> >>>>>>>> Adding dev@ to this in CC for the sake of Openness. Others might
> >>>> also
> >>>>>>>> be interested!
> >>>>>>>>
> >>>>>>>> Cheers
> >>>>>>>> Geoff
> >>>>>>
> >>>>
> >>>
>

Reply via email to