Re: [Engine-devel] Using REST API in web UI - review call summary

2014-02-14 Thread Vojtech Szocs
Hi guys,

I apologize for my extremely late reply in this discussion..

(please find my comments inline)


- Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org
 Sent: Sunday, December 1, 2013 8:02:12 AM
 Subject: Re: [Engine-devel] Using REST API in web UI - review call summary
 
 On 11/29/2013 11:59 AM, Michael Pasternak wrote:
  On 11/29/2013 11:45 AM, Michael Pasternak wrote:
  On 11/28/2013 09:22 PM, Vojtech Szocs wrote:
 
 
  - Original Message -
  From: Michael Pasternak mpast...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com
  Cc: engine-devel engine-devel@ovirt.org
  Sent: Sunday, November 24, 2013 9:07:01 AM
  Subject: Re: [Engine-devel] Using REST API in web UI - review call
  summary
 
 
 
  Hi Vojtech,
 
  First of all it was a good presentation of requirements + suggested
  solutions - well done!,
 
  Thank you :)
 
  few comments/questions inline.
 
  On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on.
  Feel free to add anything in case I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for
  GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code
  directly; we could simply take Java SDK and customize its abstractions
  where necessary, i.e. using HTTP transport layer
  implementation that works with GWT. In any case, this would mean
  coupling
  ourselves to Java SDK (which has its own release cycle)
  and I think this would complicate things for us.
 
  not sure i buy this one :), this is the purpose of any sdk, including
  the
  one you about to write, people that will use it, will be coupling to
  it ...
 
  Of course, but by saying coupling ourselves to Java SDK I meant SDK
  perspective, not client perspective:
 
  of course, but you told something different, that you want js-sdk to be
  aware
  of the client, and this is actually why you taking this path.

Yes, this SDK targets JavaScript/browser runtime and its code should therefore
be as close to it as possible. There are some conceptual gaps between world
of Java vs. JavaScript in terms of language, coding practices and patterns,
available APIs, etc.

(at least) for the first iteration, I wanted to avoid dealing with any sort of
discrepancies between Java vs. JavaScript + extra overhead when dealing with
Java SDK; my goal is to prototype initial SDK code by hand, verify it in GUI
code, then consider code generation, etc. (so-called baby steps, complexity
can always be added..)

 
 
  - someone else (you) maintains Java SDK and therefore controls generated
  sources (JAR or RPM isn't relevant here)
  - another guy (me) maintains (fictional) Java/GWT SDK that relies on Java
  SDK + some (supported) customizations
  - the only way I can impose changes in my SDK is through supported
  customizations as you control original (Java SDK) sources,
i.e. the whole code generation process is driven by your SDK, so my SDK
is coupled to your SDK's build/release cycle
 
  that's how things working in software, you always depending on the certain
  version
  of the component you're working against, as it expose set of features you
  need, i don't
  think that having control over framework features, justifying rewriting
  the
  framework ...

I agree with your point. For me, however, putting Java SDK on starting 
position
for JavaScript SDK in its initial/prototype phase is just unnecessary 
complexity.

I think that lowest common denominator for Java vs. JavaScript SDK is REST API
definition, i.e. definition of the interface. On one hand, building JavaScript
SDK on top of Java SDK would mean that Java SDK might get improvements over time
as JavaScript SDK evolves. On the other hand, it imposes coupling between these
two, which might complicate things in certain situations. For now, I'd like to
keep things simple.

 
  (please note that i'm not against the js-sdk, go ahead, this is a nice
  initiative indeed, i
  just can't see the business case for not reusing existent infrastructure
  cause it works
  for all your needs and eventually both worlds would benefiting from it UI
  and java-sdk users
  cause you where extending it with additional capabilities they may also
  need)

My motivation is avoiding any extra complexity during initial/prototype phase.
But I see your point about Java SDK benefiting when used as the base component.

 
 
  For the sake of simplicity, I guess it's best to start with SDK that has
  no dependencies whatsoever.
 
  so why won't you rewrite the engine in Java-script? your js-sdk eventually
  will be depending on it,
  this way you'll have control over it (and it's features) as well ;-)

No need to rewrite Engine in JavaScript

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-12-03 Thread Michael Pasternak
On 11/28/2013 09:37 PM, Vojtech Szocs wrote:
 
 
 - Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Itamar Heim ih...@redhat.com
 Cc: Vojtech Szocs vsz...@redhat.com, engine-devel 
 engine-devel@ovirt.org, Einav Cohen eco...@redhat.com
 Sent: Sunday, November 24, 2013 9:37:22 AM
 Subject: Re: Using REST API in web UI - review call summary

 On 11/22/2013 12:00 AM, Itamar Heim wrote:
 On 11/21/2013 11:56 PM, Vojtech Szocs wrote:


 - Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com, engine-devel
 engine-devel@ovirt.org
 Cc: Einav Cohen eco...@redhat.com
 Sent: Thursday, November 21, 2013 10:25:04 PM
 Subject: Re: Using REST API in web UI - review call summary

 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,

 this is a summary of yesterday's review call, I'll try to highlight
 important Q/A and things we agreed on. Feel free to add anything in case
 I've missed something.

 --

 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
 apps? (asked by Michael  Gilad)

 A: This might be a viable option to consider if we wanted to skip
 JavaScript-based SDK altogether and target Java/GWT code directly; we
 could simply take Java SDK and customize its abstractions where
 necessary,
 i.e. using HTTP transport layer implementation that works with GWT. In
 any
 case, this would mean coupling ourselves to Java SDK (which has its own
 release cycle) and I think this would complicate things for us.

 As proposed on the meeting, I think it's best to aim for JavaScript SDK
 as
 the lowest common denominator for *any* web application that wants to
 work
 with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK,
 i.e.
 Java/GWT code that just overlays objects and functions provided by
 JavaScript SDK. Another reason is ease of maintenance - I'd rather see
 JavaScript SDK's code generation process to be independent of any other
 SDK (people responsible for maintaining JavaScript SDK should have full
 control over generated code).

 --

 Q: What about functionality currently used by oVirt UI but not supported
 by
 REST API? (asked by Einav)
  [For example, fetching VM entity over GWT RPC also returns related
  data
  such as Cluster name.]

 A: Based on discussion I've had with other colleagues after yesterday's
 review call, I don't think that separate support-like backend layer is a
 good idea. Instead, this is the kind of functionality that could be
 placed
 in oVirt.js library. Logical operations like get VMs and related data
 would be exposed through oVirt.js (callback-based) API and ultimately
 realized as multiple physical requests to REST API via JavaScript
 Binding.

 oVirt.js client would be completely oblivious to the fact that multiple
 physical requests are dispatched. In fact, since HTTP communication is
 asynchronous in nature, oVirt.js client wouldn't even notice any
 difference in terms of API consumption. This assumes JavaScript SDK
 would
 use callback-based (non-blocking) API instead of blocking one - after
 all,
 blocking API on top of non-blocking implementation sounds pretty much
 like
 leaky abstraction [1].

 For example:

   sdk.getVmsWithExtraData(
   callbackToGetExtraDataForGivenVm, // might cause extra
   physical
   requests to REST API
   callbackFiredWhenAllDataIsReady   // update client only when
   all
   data is ready
   )

 would this also resolve RunMultipleActions?

 Yes, I think so. There could be API to pass multiple actions and get
 notified when they complete.

 sounds like no reason to have RunMultipleQueries, although i'm still
 sure a single call to engine for multiple keys would be much more
 efficient than multiple async calls?
 (I understand we may not be able to model this).

 Efficiency-wise, yes, single call to get all data seems optimal. API-wise,
 I don't think it really matters from oVirt.js client perspective.

 We can proceed with simple (possibly inefficient) solution and improve as
 needed. We're making baby steps now..



 [1] http://en.wikipedia.org/wiki/Leaky_abstraction

 --

 Last but not least, where to maintain JavaScript SDK projects: low-level
 JavaScript Binding + high-level oVirt.js library.

 I agree that conceptually both above mentioned projects should go into
 dedicated ovirt-engine-sdk-js git repository and have their own
 build/release process. However, for now, we're just making baby steps so
 let's keep things simple and prototype these projects as part of
 ovirt-engine git repository.

 ... we can complicate things anytime, but we should know that any
 complex
 system that works has inevitably evolved from simple system that works
 ...
 (quote from http://en.wikipedia.org/wiki/Gall%27s_law)

 I think the entities should just be generated from the xsd.

 +1

 The JavaScript Binding (aka low-level SDK) module should follow same
 concepts as existing Java SDK - 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-30 Thread Michael Pasternak
On 11/29/2013 11:59 AM, Michael Pasternak wrote:
 On 11/29/2013 11:45 AM, Michael Pasternak wrote:
 On 11/28/2013 09:22 PM, Vojtech Szocs wrote:


 - Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org
 Sent: Sunday, November 24, 2013 9:07:01 AM
 Subject: Re: [Engine-devel] Using REST API in web UI - review call summary



 Hi Vojtech,

 First of all it was a good presentation of requirements + suggested
 solutions - well done!,

 Thank you :)

 few comments/questions inline.

 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,

 this is a summary of yesterday's review call, I'll try to highlight
 important Q/A and things we agreed on.
 Feel free to add anything in case I've missed something.

 --

 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
 apps? (asked by Michael  Gilad)

 A: This might be a viable option to consider if we wanted to skip
 JavaScript-based SDK altogether and target Java/GWT code
 directly; we could simply take Java SDK and customize its abstractions
 where necessary, i.e. using HTTP transport layer
 implementation that works with GWT. In any case, this would mean coupling
 ourselves to Java SDK (which has its own release cycle)
 and I think this would complicate things for us.

 not sure i buy this one :), this is the purpose of any sdk, including the
 one you about to write, people that will use it, will be coupling to it 
 ...

 Of course, but by saying coupling ourselves to Java SDK I meant SDK 
 perspective, not client perspective:

 of course, but you told something different, that you want js-sdk to be aware
 of the client, and this is actually why you taking this path.


 - someone else (you) maintains Java SDK and therefore controls generated 
 sources (JAR or RPM isn't relevant here)
 - another guy (me) maintains (fictional) Java/GWT SDK that relies on Java 
 SDK + some (supported) customizations
 - the only way I can impose changes in my SDK is through supported 
 customizations as you control original (Java SDK) sources,
   i.e. the whole code generation process is driven by your SDK, so my SDK 
 is coupled to your SDK's build/release cycle

 that's how things working in software, you always depending on the certain 
 version
 of the component you're working against, as it expose set of features you 
 need, i don't
 think that having control over framework features, justifying rewriting the
 framework ...

 (please note that i'm not against the js-sdk, go ahead, this is a nice 
 initiative indeed, i
 just can't see the business case for not reusing existent infrastructure 
 cause it works
 for all your needs and eventually both worlds would benefiting from it UI 
 and java-sdk users
 cause you where extending it with additional capabilities they may also need)


 For the sake of simplicity, I guess it's best to start with SDK that has no 
 dependencies whatsoever. 

 so why won't you rewrite the engine in Java-script? your js-sdk eventually 
 will be depending on it,
 this way you'll have control over it (and it's features) as well ;-)

 After all, there's no common dependency (aside from running Engine to 
 provide XSD  RSDL) between Java  Python SDK too, if I understand 
 correctly.

 In other words, building on top of something existing (just because we can 
 do that) isn't always appropriate/flexible/efficient, it always depends on 
 given context and requirements.

 it would be true, if your requirements would make existing infrastructure 
 inappropriate.




 As proposed on the meeting, I think it's best to aim for JavaScript SDK as
 the lowest
 common denominator for *any* web application that wants to work with REST
 API. oVirt GWT-based
 UI can simply bind to JavaScript SDK, i.e. Java/GWT code that just 
 overlays
 objects and functions
 provided by JavaScript SDK. Another reason is ease of maintenance - I'd
 rather see JavaScript SDK's code
 generation process to be independent of any other SDK (people responsible
 for maintaining JavaScript SDK
 should have full control over generated code).

 what do you mean by people should have full control over generated code?

 It's related to coupling from SDK perspective I mentioned above:
 the only way I can impose changes in my SDK is through supported 
 customizations as you control original (Java SDK) sources

 if you need additional functionality in java-sdk, you could do the following:

 1. submit a patch to java-sdk
 2. build new java-sdk locally and use it along with new feature you've added
 3. make UI depending on next version of java-sdk (which includes your new 
 feature)

 we (and all other SW projects) doing that day by day in engine,api,etc.

 (as i mentioned this would also benefit java-sdk users with additional 
 features
 they might find useful as well)


 (by people I meant JavaScript SDK developers)

 Full control means ability to change generated sources in whatever way

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-29 Thread Michael Pasternak
On 11/29/2013 11:45 AM, Michael Pasternak wrote:
 On 11/28/2013 09:22 PM, Vojtech Szocs wrote:


 - Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org
 Sent: Sunday, November 24, 2013 9:07:01 AM
 Subject: Re: [Engine-devel] Using REST API in web UI - review call summary



 Hi Vojtech,

 First of all it was a good presentation of requirements + suggested
 solutions - well done!,

 Thank you :)

 few comments/questions inline.

 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,

 this is a summary of yesterday's review call, I'll try to highlight
 important Q/A and things we agreed on.
 Feel free to add anything in case I've missed something.

 --

 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
 apps? (asked by Michael  Gilad)

 A: This might be a viable option to consider if we wanted to skip
 JavaScript-based SDK altogether and target Java/GWT code
 directly; we could simply take Java SDK and customize its abstractions
 where necessary, i.e. using HTTP transport layer
 implementation that works with GWT. In any case, this would mean coupling
 ourselves to Java SDK (which has its own release cycle)
 and I think this would complicate things for us.

 not sure i buy this one :), this is the purpose of any sdk, including the
 one you about to write, people that will use it, will be coupling to it 
 ...

 Of course, but by saying coupling ourselves to Java SDK I meant SDK 
 perspective, not client perspective:
 
 of course, but you told something different, that you want js-sdk to be aware
 of the client, and this is actually why you taking this path.
 

 - someone else (you) maintains Java SDK and therefore controls generated 
 sources (JAR or RPM isn't relevant here)
 - another guy (me) maintains (fictional) Java/GWT SDK that relies on Java 
 SDK + some (supported) customizations
 - the only way I can impose changes in my SDK is through supported 
 customizations as you control original (Java SDK) sources,
   i.e. the whole code generation process is driven by your SDK, so my SDK is 
 coupled to your SDK's build/release cycle
 
 that's how things working in software, you always depending on the certain 
 version
 of the component you're working against, as it expose set of features you 
 need, i don't
 think that having control over framework features, justifying rewriting the
 framework ...
 
 (please note that i'm not against the js-sdk, go ahead, this is a nice 
 initiative indeed, i
 just can't see the business case for not reusing existent infrastructure 
 cause it works
 for all your needs and eventually both worlds would benefiting from it UI and 
 java-sdk users
 cause you where extending it with additional capabilities they may also need)
 

 For the sake of simplicity, I guess it's best to start with SDK that has no 
 dependencies whatsoever. 
 
 so why won't you rewrite the engine in Java-script? your js-sdk eventually 
 will be depending on it,
 this way you'll have control over it (and it's features) as well ;-)
 
 After all, there's no common dependency (aside from running Engine to 
 provide XSD  RSDL) between Java  Python SDK too, if I understand correctly.

 In other words, building on top of something existing (just because we can 
 do that) isn't always appropriate/flexible/efficient, it always depends on 
 given context and requirements.
 
 it would be true, if your requirements would make existing infrastructure 
 inappropriate.
 



 As proposed on the meeting, I think it's best to aim for JavaScript SDK as
 the lowest
 common denominator for *any* web application that wants to work with REST
 API. oVirt GWT-based
 UI can simply bind to JavaScript SDK, i.e. Java/GWT code that just overlays
 objects and functions
 provided by JavaScript SDK. Another reason is ease of maintenance - I'd
 rather see JavaScript SDK's code
 generation process to be independent of any other SDK (people responsible
 for maintaining JavaScript SDK
 should have full control over generated code).

 what do you mean by people should have full control over generated code?

 It's related to coupling from SDK perspective I mentioned above:
 the only way I can impose changes in my SDK is through supported 
 customizations as you control original (Java SDK) sources
 
 if you need additional functionality in java-sdk, you could do the following:
 
 1. submit a patch to java-sdk
 2. build new java-sdk locally and use it along with new feature you've added
 3. make UI depending on next version of java-sdk (which includes your new 
 feature)
 
 we (and all other SW projects) doing that day by day in engine,api,etc.
 
 (as i mentioned this would also benefit java-sdk users with additional 
 features
 they might find useful as well)
 

 (by people I meant JavaScript SDK developers)

 Full control means ability to change generated sources in whatever way 
 desired, but assuming the idea of reusing

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-28 Thread Vojtech Szocs


- Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org
 Sent: Sunday, November 24, 2013 9:07:01 AM
 Subject: Re: [Engine-devel] Using REST API in web UI - review call summary
 
 
 
 Hi Vojtech,
 
 First of all it was a good presentation of requirements + suggested
 solutions - well done!,

Thank you :)

 few comments/questions inline.
 
 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
  
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on.
  Feel free to add anything in case I've missed something.
  
  --
  
  Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
  apps? (asked by Michael  Gilad)
  
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code
  directly; we could simply take Java SDK and customize its abstractions
  where necessary, i.e. using HTTP transport layer
  implementation that works with GWT. In any case, this would mean coupling
  ourselves to Java SDK (which has its own release cycle)
  and I think this would complicate things for us.
 
 not sure i buy this one :), this is the purpose of any sdk, including the
 one you about to write, people that will use it, will be coupling to it ...

Of course, but by saying coupling ourselves to Java SDK I meant SDK 
perspective, not client perspective:

- someone else (you) maintains Java SDK and therefore controls generated 
sources (JAR or RPM isn't relevant here)
- another guy (me) maintains (fictional) Java/GWT SDK that relies on Java SDK + 
some (supported) customizations
- the only way I can impose changes in my SDK is through supported 
customizations as you control original (Java SDK) sources,
  i.e. the whole code generation process is driven by your SDK, so my SDK is 
coupled to your SDK's build/release cycle

For the sake of simplicity, I guess it's best to start with SDK that has no 
dependencies whatsoever. After all, there's no common dependency (aside from 
running Engine to provide XSD  RSDL) between Java  Python SDK too, if I 
understand correctly.

In other words, building on top of something existing (just because we can do 
that) isn't always appropriate/flexible/efficient, it always depends on given 
context and requirements.

 
  
  As proposed on the meeting, I think it's best to aim for JavaScript SDK as
  the lowest
  common denominator for *any* web application that wants to work with REST
  API. oVirt GWT-based
  UI can simply bind to JavaScript SDK, i.e. Java/GWT code that just overlays
  objects and functions
  provided by JavaScript SDK. Another reason is ease of maintenance - I'd
  rather see JavaScript SDK's code
  generation process to be independent of any other SDK (people responsible
  for maintaining JavaScript SDK
  should have full control over generated code).
 
 what do you mean by people should have full control over generated code?

It's related to coupling from SDK perspective I mentioned above:
the only way I can impose changes in my SDK is through supported 
customizations as you control original (Java SDK) sources

(by people I meant JavaScript SDK developers)

Full control means ability to change generated sources in whatever way desired, 
but assuming the idea of reusing/customizing existing SDK code, aspect of full 
control is lost in favor of reusing existing code. And of course, this assumes 
that existing code (Java SDK) provides everything we need, which might or might 
not be the case.

So I just vote for simplicity, generate JavaScript SDK the way like other SDKs 
(Java/Python) - not trying to reuse anything, just grab XSD  RSDL and generate 
sources.

 the purpose of
 code generation is to ease maintenance, i.e you/maintainer should not write
 the feature
 once it available in api, just run CodeGen and you'll get it for free, but
 this is zero control
 over code.

+1

I agree with you on this.

 
  
  --
  
  Q: What about functionality currently used by oVirt UI but not supported by
  REST API? (asked by Einav)
 [For example, fetching VM entity over GWT RPC also returns related data
 such as Cluster name.]
  
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that
  separate support-like backend layer is a good idea. Instead, this is the
  kind of functionality that could be
  placed in oVirt.js library. Logical operations like get VMs and related
  data would be exposed through oVirt.js
  (callback-based) API and ultimately realized as multiple physical requests
  to REST API via JavaScript Binding.
  
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact,
  since HTTP communication is asynchronous in nature, oVirt.js client
  wouldn't even notice any difference in terms of API
  consumption. This assumes

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-28 Thread Vojtech Szocs


- Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Itamar Heim ih...@redhat.com
 Cc: Vojtech Szocs vsz...@redhat.com, engine-devel 
 engine-devel@ovirt.org, Einav Cohen eco...@redhat.com
 Sent: Sunday, November 24, 2013 9:37:22 AM
 Subject: Re: Using REST API in web UI - review call summary
 
 On 11/22/2013 12:00 AM, Itamar Heim wrote:
  On 11/21/2013 11:56 PM, Vojtech Szocs wrote:
 
 
  - Original Message -
  From: Itamar Heim ih...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com, engine-devel
  engine-devel@ovirt.org
  Cc: Einav Cohen eco...@redhat.com
  Sent: Thursday, November 21, 2013 10:25:04 PM
  Subject: Re: Using REST API in web UI - review call summary
 
  On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on. Feel free to add anything in case
  I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code directly; we
  could simply take Java SDK and customize its abstractions where
  necessary,
  i.e. using HTTP transport layer implementation that works with GWT. In
  any
  case, this would mean coupling ourselves to Java SDK (which has its own
  release cycle) and I think this would complicate things for us.
 
  As proposed on the meeting, I think it's best to aim for JavaScript SDK
  as
  the lowest common denominator for *any* web application that wants to
  work
  with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK,
  i.e.
  Java/GWT code that just overlays objects and functions provided by
  JavaScript SDK. Another reason is ease of maintenance - I'd rather see
  JavaScript SDK's code generation process to be independent of any other
  SDK (people responsible for maintaining JavaScript SDK should have full
  control over generated code).
 
  --
 
  Q: What about functionality currently used by oVirt UI but not supported
  by
  REST API? (asked by Einav)
   [For example, fetching VM entity over GWT RPC also returns related
   data
   such as Cluster name.]
 
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that separate support-like backend layer is a
  good idea. Instead, this is the kind of functionality that could be
  placed
  in oVirt.js library. Logical operations like get VMs and related data
  would be exposed through oVirt.js (callback-based) API and ultimately
  realized as multiple physical requests to REST API via JavaScript
  Binding.
 
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact, since HTTP communication is
  asynchronous in nature, oVirt.js client wouldn't even notice any
  difference in terms of API consumption. This assumes JavaScript SDK
  would
  use callback-based (non-blocking) API instead of blocking one - after
  all,
  blocking API on top of non-blocking implementation sounds pretty much
  like
  leaky abstraction [1].
 
  For example:
 
sdk.getVmsWithExtraData(
callbackToGetExtraDataForGivenVm, // might cause extra
physical
requests to REST API
callbackFiredWhenAllDataIsReady   // update client only when
all
data is ready
)
 
  would this also resolve RunMultipleActions?
 
  Yes, I think so. There could be API to pass multiple actions and get
  notified when they complete.
 
  sounds like no reason to have RunMultipleQueries, although i'm still
  sure a single call to engine for multiple keys would be much more
  efficient than multiple async calls?
  (I understand we may not be able to model this).
 
  Efficiency-wise, yes, single call to get all data seems optimal. API-wise,
  I don't think it really matters from oVirt.js client perspective.
 
  We can proceed with simple (possibly inefficient) solution and improve as
  needed. We're making baby steps now..
 
 
 
  [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
  --
 
  Last but not least, where to maintain JavaScript SDK projects: low-level
  JavaScript Binding + high-level oVirt.js library.
 
  I agree that conceptually both above mentioned projects should go into
  dedicated ovirt-engine-sdk-js git repository and have their own
  build/release process. However, for now, we're just making baby steps so
  let's keep things simple and prototype these projects as part of
  ovirt-engine git repository.
 
  ... we can complicate things anytime, but we should know that any
  complex
  system that works has inevitably evolved from simple system that works
  ...
  (quote from http://en.wikipedia.org/wiki/Gall%27s_law)
 
  I think the entities should just be generated from the xsd.
 
  +1
 
  The JavaScript Binding (aka 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-28 Thread Vojtech Szocs


- Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: Itamar Heim ih...@redhat.com, engine-devel 
 engine-devel@ovirt.org, Einav Cohen eco...@redhat.com
 Sent: Sunday, November 24, 2013 9:38:45 AM
 Subject: Re: Using REST API in web UI - review call summary
 
 On 11/22/2013 12:08 AM, Vojtech Szocs wrote:
  
  
  - Original Message -
  From: Itamar Heim ih...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com
  Cc: engine-devel engine-devel@ovirt.org, Einav Cohen
  eco...@redhat.com, Michael Pasternak
  mpast...@redhat.com
  Sent: Thursday, November 21, 2013 11:00:25 PM
  Subject: Re: Using REST API in web UI - review call summary
 
  On 11/21/2013 11:56 PM, Vojtech Szocs wrote:
 
 
  - Original Message -
  From: Itamar Heim ih...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com, engine-devel
  engine-devel@ovirt.org
  Cc: Einav Cohen eco...@redhat.com
  Sent: Thursday, November 21, 2013 10:25:04 PM
  Subject: Re: Using REST API in web UI - review call summary
 
  On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on. Feel free to add anything in
  case
  I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for
  GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code directly; we
  could simply take Java SDK and customize its abstractions where
  necessary,
  i.e. using HTTP transport layer implementation that works with GWT. In
  any
  case, this would mean coupling ourselves to Java SDK (which has its own
  release cycle) and I think this would complicate things for us.
 
  As proposed on the meeting, I think it's best to aim for JavaScript SDK
  as
  the lowest common denominator for *any* web application that wants to
  work
  with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK,
  i.e.
  Java/GWT code that just overlays objects and functions provided by
  JavaScript SDK. Another reason is ease of maintenance - I'd rather see
  JavaScript SDK's code generation process to be independent of any other
  SDK (people responsible for maintaining JavaScript SDK should have full
  control over generated code).
 
  --
 
  Q: What about functionality currently used by oVirt UI but not
  supported
  by
  REST API? (asked by Einav)
   [For example, fetching VM entity over GWT RPC also returns related
   data
   such as Cluster name.]
 
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that separate support-like backend layer is
  a
  good idea. Instead, this is the kind of functionality that could be
  placed
  in oVirt.js library. Logical operations like get VMs and related data
  would be exposed through oVirt.js (callback-based) API and ultimately
  realized as multiple physical requests to REST API via JavaScript
  Binding.
 
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact, since HTTP communication is
  asynchronous in nature, oVirt.js client wouldn't even notice any
  difference in terms of API consumption. This assumes JavaScript SDK
  would
  use callback-based (non-blocking) API instead of blocking one - after
  all,
  blocking API on top of non-blocking implementation sounds pretty much
  like
  leaky abstraction [1].
 
  For example:
 
sdk.getVmsWithExtraData(
callbackToGetExtraDataForGivenVm, // might cause extra
physical
requests to REST API
callbackFiredWhenAllDataIsReady   // update client only when
all
data is ready
)
 
  would this also resolve RunMultipleActions?
 
  Yes, I think so. There could be API to pass multiple actions and get
  notified when they complete.
 
  sounds like no reason to have RunMultipleQueries, although i'm still
  sure a single call to engine for multiple keys would be much more
  efficient than multiple async calls?
  (I understand we may not be able to model this).
 
  Efficiency-wise, yes, single call to get all data seems optimal.
  API-wise,
  I don't think it really matters from oVirt.js client perspective.
 
  We can proceed with simple (possibly inefficient) solution and improve as
  needed. We're making baby steps now..
 
 
 
  [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
  --
 
  Last but not least, where to maintain JavaScript SDK projects:
  low-level
  JavaScript Binding + high-level oVirt.js library.
 
  I agree that conceptually both above mentioned projects should go into
  dedicated ovirt-engine-sdk-js git repository and have their own
  build/release process. However, for now, we're just making baby steps
  so
  let's keep things simple and prototype these projects as 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-24 Thread Michael Pasternak


Hi Vojtech,

First of all it was a good presentation of requirements + suggested solutions 
- well done!,
few comments/questions inline.

On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,
 
 this is a summary of yesterday's review call, I'll try to highlight important 
 Q/A and things we agreed on.
 Feel free to add anything in case I've missed something.
 
 --
 
 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT 
 apps? (asked by Michael  Gilad)
 
 A: This might be a viable option to consider if we wanted to skip 
 JavaScript-based SDK altogether and target Java/GWT code
 directly; we could simply take Java SDK and customize its abstractions where 
 necessary, i.e. using HTTP transport layer
 implementation that works with GWT. In any case, this would mean coupling 
 ourselves to Java SDK (which has its own release cycle)
 and I think this would complicate things for us.

not sure i buy this one :), this is the purpose of any sdk, including the
one you about to write, people that will use it, will be coupling to it ...

 
 As proposed on the meeting, I think it's best to aim for JavaScript SDK as 
 the lowest
 common denominator for *any* web application that wants to work with REST 
 API. oVirt GWT-based
 UI can simply bind to JavaScript SDK, i.e. Java/GWT code that just overlays 
 objects and functions
 provided by JavaScript SDK. Another reason is ease of maintenance - I'd 
 rather see JavaScript SDK's code
 generation process to be independent of any other SDK (people responsible for 
 maintaining JavaScript SDK
 should have full control over generated code).

what do you mean by people should have full control over generated code? the 
purpose of
code generation is to ease maintenance, i.e you/maintainer should not write the 
feature
once it available in api, just run CodeGen and you'll get it for free, but this 
is zero control
over code.

 
 --
 
 Q: What about functionality currently used by oVirt UI but not supported by 
 REST API? (asked by Einav)
[For example, fetching VM entity over GWT RPC also returns related data 
 such as Cluster name.]
 
 A: Based on discussion I've had with other colleagues after yesterday's 
 review call, I don't think that 
 separate support-like backend layer is a good idea. Instead, this is the kind 
 of functionality that could be
 placed in oVirt.js library. Logical operations like get VMs and related 
 data would be exposed through oVirt.js 
 (callback-based) API and ultimately realized as multiple physical requests to 
 REST API via JavaScript Binding.
 
 oVirt.js client would be completely oblivious to the fact that multiple 
 physical requests are dispatched. In fact,
 since HTTP communication is asynchronous in nature, oVirt.js client wouldn't 
 even notice any difference in terms of API
 consumption. This assumes JavaScript SDK would use callback-based 
 (non-blocking) API instead of blocking one - after all,
 blocking API on top of non-blocking implementation sounds pretty much like 
 leaky abstraction [1].
 
 For example:
 
 sdk.getVmsWithExtraData(
 callbackToGetExtraDataForGivenVm, // might cause extra physical 
 requests to REST API
 callbackFiredWhenAllDataIsReady   // update client only when all data 
 is ready
 )

actually this the main bottleneck in moving UI to work on top of REST, and
most interesting/complex part of this project,

you should think of very wise polling mechanism cause callbacks is a nice
thing on paper, but behind the scene it all about polling:

- the entity/s till action got accomplished
- add to this updating different grids
- running multiple actions
- showing events
- and obviously much more

and don't forget that every polled entity should be marshalled from xml to the 
javascript
entity so at the end, callbacks mechanism will be extremely CPU consuming.

 
 [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
 --
 
 Last but not least, where to maintain JavaScript SDK projects: low-level 
 JavaScript Binding + high-level oVirt.js library.
 
 I agree that conceptually both above mentioned projects should go into 
 dedicated ovirt-engine-sdk-js git repository and
 have their own build/release process. However, for now, we're just making 
 baby steps so let's keep things simple and prototype
 these projects as part of ovirt-engine git repository.
 
 ... we can complicate things anytime, but we should know that any complex 
 system that works has inevitably evolved from simple
 system that works ... (quote from http://en.wikipedia.org/wiki/Gall%27s_law)
 
 Regards,
 Vojtech
 ___
 Engine-devel mailing list
 Engine-devel@ovirt.org
 http://lists.ovirt.org/mailman/listinfo/engine-devel
 


-- 

Michael Pasternak
RedHat, ENG-Virtualization RD
___
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel


Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-24 Thread Michael Pasternak
On 11/22/2013 12:00 AM, Itamar Heim wrote:
 On 11/21/2013 11:56 PM, Vojtech Szocs wrote:


 - Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com, engine-devel 
 engine-devel@ovirt.org
 Cc: Einav Cohen eco...@redhat.com
 Sent: Thursday, November 21, 2013 10:25:04 PM
 Subject: Re: Using REST API in web UI - review call summary

 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,

 this is a summary of yesterday's review call, I'll try to highlight
 important Q/A and things we agreed on. Feel free to add anything in case
 I've missed something.

 -- 

 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
 apps? (asked by Michael  Gilad)

 A: This might be a viable option to consider if we wanted to skip
 JavaScript-based SDK altogether and target Java/GWT code directly; we
 could simply take Java SDK and customize its abstractions where necessary,
 i.e. using HTTP transport layer implementation that works with GWT. In any
 case, this would mean coupling ourselves to Java SDK (which has its own
 release cycle) and I think this would complicate things for us.

 As proposed on the meeting, I think it's best to aim for JavaScript SDK as
 the lowest common denominator for *any* web application that wants to work
 with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e.
 Java/GWT code that just overlays objects and functions provided by
 JavaScript SDK. Another reason is ease of maintenance - I'd rather see
 JavaScript SDK's code generation process to be independent of any other
 SDK (people responsible for maintaining JavaScript SDK should have full
 control over generated code).

 -- 

 Q: What about functionality currently used by oVirt UI but not supported by
 REST API? (asked by Einav)
  [For example, fetching VM entity over GWT RPC also returns related 
 data
  such as Cluster name.]

 A: Based on discussion I've had with other colleagues after yesterday's
 review call, I don't think that separate support-like backend layer is a
 good idea. Instead, this is the kind of functionality that could be placed
 in oVirt.js library. Logical operations like get VMs and related data
 would be exposed through oVirt.js (callback-based) API and ultimately
 realized as multiple physical requests to REST API via JavaScript Binding.

 oVirt.js client would be completely oblivious to the fact that multiple
 physical requests are dispatched. In fact, since HTTP communication is
 asynchronous in nature, oVirt.js client wouldn't even notice any
 difference in terms of API consumption. This assumes JavaScript SDK would
 use callback-based (non-blocking) API instead of blocking one - after all,
 blocking API on top of non-blocking implementation sounds pretty much like
 leaky abstraction [1].

 For example:

   sdk.getVmsWithExtraData(
   callbackToGetExtraDataForGivenVm, // might cause extra physical
   requests to REST API
   callbackFiredWhenAllDataIsReady   // update client only when all
   data is ready
   )

 would this also resolve RunMultipleActions?

 Yes, I think so. There could be API to pass multiple actions and get 
 notified when they complete.

 sounds like no reason to have RunMultipleQueries, although i'm still
 sure a single call to engine for multiple keys would be much more
 efficient than multiple async calls?
 (I understand we may not be able to model this).

 Efficiency-wise, yes, single call to get all data seems optimal. API-wise, I 
 don't think it really matters from oVirt.js client perspective.

 We can proceed with simple (possibly inefficient) solution and improve as 
 needed. We're making baby steps now..



 [1] http://en.wikipedia.org/wiki/Leaky_abstraction

 -- 

 Last but not least, where to maintain JavaScript SDK projects: low-level
 JavaScript Binding + high-level oVirt.js library.

 I agree that conceptually both above mentioned projects should go into
 dedicated ovirt-engine-sdk-js git repository and have their own
 build/release process. However, for now, we're just making baby steps so
 let's keep things simple and prototype these projects as part of
 ovirt-engine git repository.

 ... we can complicate things anytime, but we should know that any complex
 system that works has inevitably evolved from simple system that works ...
 (quote from http://en.wikipedia.org/wiki/Gall%27s_law)

 I think the entities should just be generated from the xsd.

 +1

 The JavaScript Binding (aka low-level SDK) module should follow same 
 concepts as existing Java SDK - generated entities decorated with operations 
 to form fluent API.

 Everything Java SDK currently offers should be available in JavaScript 
 Binding. oVirt.js is our opportunity to build on top of that.

 for the rsdl, makes sense to start with clean code to see what works
 best, then see about generating it (but you should adhere the rsdl as
 guidlines i guess).

 +1

 The initial prototype should be 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-24 Thread Michael Pasternak
On 11/22/2013 12:08 AM, Vojtech Szocs wrote:
 
 
 - Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org, Einav Cohen 
 eco...@redhat.com, Michael Pasternak
 mpast...@redhat.com
 Sent: Thursday, November 21, 2013 11:00:25 PM
 Subject: Re: Using REST API in web UI - review call summary

 On 11/21/2013 11:56 PM, Vojtech Szocs wrote:


 - Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com, engine-devel
 engine-devel@ovirt.org
 Cc: Einav Cohen eco...@redhat.com
 Sent: Thursday, November 21, 2013 10:25:04 PM
 Subject: Re: Using REST API in web UI - review call summary

 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
 Hi guys,

 this is a summary of yesterday's review call, I'll try to highlight
 important Q/A and things we agreed on. Feel free to add anything in case
 I've missed something.

 --

 Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
 apps? (asked by Michael  Gilad)

 A: This might be a viable option to consider if we wanted to skip
 JavaScript-based SDK altogether and target Java/GWT code directly; we
 could simply take Java SDK and customize its abstractions where
 necessary,
 i.e. using HTTP transport layer implementation that works with GWT. In
 any
 case, this would mean coupling ourselves to Java SDK (which has its own
 release cycle) and I think this would complicate things for us.

 As proposed on the meeting, I think it's best to aim for JavaScript SDK
 as
 the lowest common denominator for *any* web application that wants to
 work
 with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e.
 Java/GWT code that just overlays objects and functions provided by
 JavaScript SDK. Another reason is ease of maintenance - I'd rather see
 JavaScript SDK's code generation process to be independent of any other
 SDK (people responsible for maintaining JavaScript SDK should have full
 control over generated code).

 --

 Q: What about functionality currently used by oVirt UI but not supported
 by
 REST API? (asked by Einav)
  [For example, fetching VM entity over GWT RPC also returns related
  data
  such as Cluster name.]

 A: Based on discussion I've had with other colleagues after yesterday's
 review call, I don't think that separate support-like backend layer is a
 good idea. Instead, this is the kind of functionality that could be
 placed
 in oVirt.js library. Logical operations like get VMs and related data
 would be exposed through oVirt.js (callback-based) API and ultimately
 realized as multiple physical requests to REST API via JavaScript
 Binding.

 oVirt.js client would be completely oblivious to the fact that multiple
 physical requests are dispatched. In fact, since HTTP communication is
 asynchronous in nature, oVirt.js client wouldn't even notice any
 difference in terms of API consumption. This assumes JavaScript SDK would
 use callback-based (non-blocking) API instead of blocking one - after
 all,
 blocking API on top of non-blocking implementation sounds pretty much
 like
 leaky abstraction [1].

 For example:

   sdk.getVmsWithExtraData(
   callbackToGetExtraDataForGivenVm, // might cause extra physical
   requests to REST API
   callbackFiredWhenAllDataIsReady   // update client only when
   all
   data is ready
   )

 would this also resolve RunMultipleActions?

 Yes, I think so. There could be API to pass multiple actions and get
 notified when they complete.

 sounds like no reason to have RunMultipleQueries, although i'm still
 sure a single call to engine for multiple keys would be much more
 efficient than multiple async calls?
 (I understand we may not be able to model this).

 Efficiency-wise, yes, single call to get all data seems optimal. API-wise,
 I don't think it really matters from oVirt.js client perspective.

 We can proceed with simple (possibly inefficient) solution and improve as
 needed. We're making baby steps now..



 [1] http://en.wikipedia.org/wiki/Leaky_abstraction

 --

 Last but not least, where to maintain JavaScript SDK projects: low-level
 JavaScript Binding + high-level oVirt.js library.

 I agree that conceptually both above mentioned projects should go into
 dedicated ovirt-engine-sdk-js git repository and have their own
 build/release process. However, for now, we're just making baby steps so
 let's keep things simple and prototype these projects as part of
 ovirt-engine git repository.

 ... we can complicate things anytime, but we should know that any complex
 system that works has inevitably evolved from simple system that works
 ...
 (quote from http://en.wikipedia.org/wiki/Gall%27s_law)

 I think the entities should just be generated from the xsd.

 +1

 The JavaScript Binding (aka low-level SDK) module should follow same
 concepts as existing Java SDK - generated entities decorated with
 operations to form 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-24 Thread Antoni Segura Puimedon


- Original Message -
 From: Michael Pasternak mpast...@redhat.com
 To: Itamar Heim ih...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org
 Sent: Sunday, November 24, 2013 9:37:22 AM
 Subject: Re: [Engine-devel] Using REST API in web UI - review call summary
 
 On 11/22/2013 12:00 AM, Itamar Heim wrote:
  On 11/21/2013 11:56 PM, Vojtech Szocs wrote:
 
 
  - Original Message -
  From: Itamar Heim ih...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com, engine-devel
  engine-devel@ovirt.org
  Cc: Einav Cohen eco...@redhat.com
  Sent: Thursday, November 21, 2013 10:25:04 PM
  Subject: Re: Using REST API in web UI - review call summary
 
  On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on. Feel free to add anything in case
  I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code directly; we
  could simply take Java SDK and customize its abstractions where
  necessary,
  i.e. using HTTP transport layer implementation that works with GWT. In
  any
  case, this would mean coupling ourselves to Java SDK (which has its own
  release cycle) and I think this would complicate things for us.
 
  As proposed on the meeting, I think it's best to aim for JavaScript SDK
  as
  the lowest common denominator for *any* web application that wants to
  work
  with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK,
  i.e.
  Java/GWT code that just overlays objects and functions provided by
  JavaScript SDK. Another reason is ease of maintenance - I'd rather see
  JavaScript SDK's code generation process to be independent of any other
  SDK (people responsible for maintaining JavaScript SDK should have full
  control over generated code).
 
  --
 
  Q: What about functionality currently used by oVirt UI but not supported
  by
  REST API? (asked by Einav)
   [For example, fetching VM entity over GWT RPC also returns related
   data
   such as Cluster name.]
 
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that separate support-like backend layer is a
  good idea. Instead, this is the kind of functionality that could be
  placed
  in oVirt.js library. Logical operations like get VMs and related data
  would be exposed through oVirt.js (callback-based) API and ultimately
  realized as multiple physical requests to REST API via JavaScript
  Binding.
 
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact, since HTTP communication is
  asynchronous in nature, oVirt.js client wouldn't even notice any
  difference in terms of API consumption. This assumes JavaScript SDK
  would
  use callback-based (non-blocking) API instead of blocking one - after
  all,
  blocking API on top of non-blocking implementation sounds pretty much
  like
  leaky abstraction [1].
 
  For example:
 
sdk.getVmsWithExtraData(
callbackToGetExtraDataForGivenVm, // might cause extra
physical
requests to REST API
callbackFiredWhenAllDataIsReady   // update client only when
all
data is ready
)
 
  would this also resolve RunMultipleActions?
 
  Yes, I think so. There could be API to pass multiple actions and get
  notified when they complete.
 
  sounds like no reason to have RunMultipleQueries, although i'm still
  sure a single call to engine for multiple keys would be much more
  efficient than multiple async calls?
  (I understand we may not be able to model this).
 
  Efficiency-wise, yes, single call to get all data seems optimal. API-wise,
  I don't think it really matters from oVirt.js client perspective.
 
  We can proceed with simple (possibly inefficient) solution and improve as
  needed. We're making baby steps now..
 
 
 
  [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
  --
 
  Last but not least, where to maintain JavaScript SDK projects: low-level
  JavaScript Binding + high-level oVirt.js library.
 
  I agree that conceptually both above mentioned projects should go into
  dedicated ovirt-engine-sdk-js git repository and have their own
  build/release process. However, for now, we're just making baby steps so
  let's keep things simple and prototype these projects as part of
  ovirt-engine git repository.
 
  ... we can complicate things anytime, but we should know that any
  complex
  system that works has inevitably evolved from simple system that works
  ...
  (quote from http://en.wikipedia.org/wiki/Gall%27s_law)
 
  I think the entities should just be generated from the xsd.
 
  +1
 
  The JavaScript Binding (aka low-level SDK) module should follow same
  concepts

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-21 Thread Vojtech Szocs


- Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com
 Cc: engine-devel engine-devel@ovirt.org, Einav Cohen 
 eco...@redhat.com, Michael Pasternak
 mpast...@redhat.com
 Sent: Thursday, November 21, 2013 11:00:25 PM
 Subject: Re: Using REST API in web UI - review call summary
 
 On 11/21/2013 11:56 PM, Vojtech Szocs wrote:
 
 
  - Original Message -
  From: Itamar Heim ih...@redhat.com
  To: Vojtech Szocs vsz...@redhat.com, engine-devel
  engine-devel@ovirt.org
  Cc: Einav Cohen eco...@redhat.com
  Sent: Thursday, November 21, 2013 10:25:04 PM
  Subject: Re: Using REST API in web UI - review call summary
 
  On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on. Feel free to add anything in case
  I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code directly; we
  could simply take Java SDK and customize its abstractions where
  necessary,
  i.e. using HTTP transport layer implementation that works with GWT. In
  any
  case, this would mean coupling ourselves to Java SDK (which has its own
  release cycle) and I think this would complicate things for us.
 
  As proposed on the meeting, I think it's best to aim for JavaScript SDK
  as
  the lowest common denominator for *any* web application that wants to
  work
  with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e.
  Java/GWT code that just overlays objects and functions provided by
  JavaScript SDK. Another reason is ease of maintenance - I'd rather see
  JavaScript SDK's code generation process to be independent of any other
  SDK (people responsible for maintaining JavaScript SDK should have full
  control over generated code).
 
  --
 
  Q: What about functionality currently used by oVirt UI but not supported
  by
  REST API? (asked by Einav)
   [For example, fetching VM entity over GWT RPC also returns related
   data
   such as Cluster name.]
 
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that separate support-like backend layer is a
  good idea. Instead, this is the kind of functionality that could be
  placed
  in oVirt.js library. Logical operations like get VMs and related data
  would be exposed through oVirt.js (callback-based) API and ultimately
  realized as multiple physical requests to REST API via JavaScript
  Binding.
 
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact, since HTTP communication is
  asynchronous in nature, oVirt.js client wouldn't even notice any
  difference in terms of API consumption. This assumes JavaScript SDK would
  use callback-based (non-blocking) API instead of blocking one - after
  all,
  blocking API on top of non-blocking implementation sounds pretty much
  like
  leaky abstraction [1].
 
  For example:
 
sdk.getVmsWithExtraData(
callbackToGetExtraDataForGivenVm, // might cause extra physical
requests to REST API
callbackFiredWhenAllDataIsReady   // update client only when
all
data is ready
)
 
  would this also resolve RunMultipleActions?
 
  Yes, I think so. There could be API to pass multiple actions and get
  notified when they complete.
 
  sounds like no reason to have RunMultipleQueries, although i'm still
  sure a single call to engine for multiple keys would be much more
  efficient than multiple async calls?
  (I understand we may not be able to model this).
 
  Efficiency-wise, yes, single call to get all data seems optimal. API-wise,
  I don't think it really matters from oVirt.js client perspective.
 
  We can proceed with simple (possibly inefficient) solution and improve as
  needed. We're making baby steps now..
 
 
 
  [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
  --
 
  Last but not least, where to maintain JavaScript SDK projects: low-level
  JavaScript Binding + high-level oVirt.js library.
 
  I agree that conceptually both above mentioned projects should go into
  dedicated ovirt-engine-sdk-js git repository and have their own
  build/release process. However, for now, we're just making baby steps so
  let's keep things simple and prototype these projects as part of
  ovirt-engine git repository.
 
  ... we can complicate things anytime, but we should know that any complex
  system that works has inevitably evolved from simple system that works
  ...
  (quote from http://en.wikipedia.org/wiki/Gall%27s_law)
 
  I think the entities should just be generated from the xsd.
 
  +1
 
  The JavaScript Binding (aka low-level SDK) module should follow same
  concepts as 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-21 Thread Vojtech Szocs


- Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Vojtech Szocs vsz...@redhat.com, engine-devel 
 engine-devel@ovirt.org
 Cc: Einav Cohen eco...@redhat.com
 Sent: Thursday, November 21, 2013 10:25:04 PM
 Subject: Re: Using REST API in web UI - review call summary
 
 On 11/21/2013 11:18 PM, Vojtech Szocs wrote:
  Hi guys,
 
  this is a summary of yesterday's review call, I'll try to highlight
  important Q/A and things we agreed on. Feel free to add anything in case
  I've missed something.
 
  --
 
  Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
  apps? (asked by Michael  Gilad)
 
  A: This might be a viable option to consider if we wanted to skip
  JavaScript-based SDK altogether and target Java/GWT code directly; we
  could simply take Java SDK and customize its abstractions where necessary,
  i.e. using HTTP transport layer implementation that works with GWT. In any
  case, this would mean coupling ourselves to Java SDK (which has its own
  release cycle) and I think this would complicate things for us.
 
  As proposed on the meeting, I think it's best to aim for JavaScript SDK as
  the lowest common denominator for *any* web application that wants to work
  with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e.
  Java/GWT code that just overlays objects and functions provided by
  JavaScript SDK. Another reason is ease of maintenance - I'd rather see
  JavaScript SDK's code generation process to be independent of any other
  SDK (people responsible for maintaining JavaScript SDK should have full
  control over generated code).
 
  --
 
  Q: What about functionality currently used by oVirt UI but not supported by
  REST API? (asked by Einav)
  [For example, fetching VM entity over GWT RPC also returns related data
  such as Cluster name.]
 
  A: Based on discussion I've had with other colleagues after yesterday's
  review call, I don't think that separate support-like backend layer is a
  good idea. Instead, this is the kind of functionality that could be placed
  in oVirt.js library. Logical operations like get VMs and related data
  would be exposed through oVirt.js (callback-based) API and ultimately
  realized as multiple physical requests to REST API via JavaScript Binding.
 
  oVirt.js client would be completely oblivious to the fact that multiple
  physical requests are dispatched. In fact, since HTTP communication is
  asynchronous in nature, oVirt.js client wouldn't even notice any
  difference in terms of API consumption. This assumes JavaScript SDK would
  use callback-based (non-blocking) API instead of blocking one - after all,
  blocking API on top of non-blocking implementation sounds pretty much like
  leaky abstraction [1].
 
  For example:
 
   sdk.getVmsWithExtraData(
   callbackToGetExtraDataForGivenVm, // might cause extra physical
   requests to REST API
   callbackFiredWhenAllDataIsReady   // update client only when all
   data is ready
   )
 
 would this also resolve RunMultipleActions?

Yes, I think so. There could be API to pass multiple actions and get notified 
when they complete.

 sounds like no reason to have RunMultipleQueries, although i'm still
 sure a single call to engine for multiple keys would be much more
 efficient than multiple async calls?
 (I understand we may not be able to model this).

Efficiency-wise, yes, single call to get all data seems optimal. API-wise, I 
don't think it really matters from oVirt.js client perspective.

We can proceed with simple (possibly inefficient) solution and improve as 
needed. We're making baby steps now..

 
 
  [1] http://en.wikipedia.org/wiki/Leaky_abstraction
 
  --
 
  Last but not least, where to maintain JavaScript SDK projects: low-level
  JavaScript Binding + high-level oVirt.js library.
 
  I agree that conceptually both above mentioned projects should go into
  dedicated ovirt-engine-sdk-js git repository and have their own
  build/release process. However, for now, we're just making baby steps so
  let's keep things simple and prototype these projects as part of
  ovirt-engine git repository.
 
  ... we can complicate things anytime, but we should know that any complex
  system that works has inevitably evolved from simple system that works ...
  (quote from http://en.wikipedia.org/wiki/Gall%27s_law)
 
 I think the entities should just be generated from the xsd.

+1

The JavaScript Binding (aka low-level SDK) module should follow same concepts 
as existing Java SDK - generated entities decorated with operations to form 
fluent API.

Everything Java SDK currently offers should be available in JavaScript Binding. 
oVirt.js is our opportunity to build on top of that.

 for the rsdl, makes sense to start with clean code to see what works
 best, then see about generating it (but you should adhere the rsdl as
 guidlines i guess).

+1

The initial prototype should be written by hand, things will get 

Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-21 Thread Itamar Heim

On 11/21/2013 11:56 PM, Vojtech Szocs wrote:



- Original Message -

From: Itamar Heim ih...@redhat.com
To: Vojtech Szocs vsz...@redhat.com, engine-devel engine-devel@ovirt.org
Cc: Einav Cohen eco...@redhat.com
Sent: Thursday, November 21, 2013 10:25:04 PM
Subject: Re: Using REST API in web UI - review call summary

On 11/21/2013 11:18 PM, Vojtech Szocs wrote:

Hi guys,

this is a summary of yesterday's review call, I'll try to highlight
important Q/A and things we agreed on. Feel free to add anything in case
I've missed something.

--

Q: Why don't we simply try to use existing Java SDK and adapt it for GWT
apps? (asked by Michael  Gilad)

A: This might be a viable option to consider if we wanted to skip
JavaScript-based SDK altogether and target Java/GWT code directly; we
could simply take Java SDK and customize its abstractions where necessary,
i.e. using HTTP transport layer implementation that works with GWT. In any
case, this would mean coupling ourselves to Java SDK (which has its own
release cycle) and I think this would complicate things for us.

As proposed on the meeting, I think it's best to aim for JavaScript SDK as
the lowest common denominator for *any* web application that wants to work
with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e.
Java/GWT code that just overlays objects and functions provided by
JavaScript SDK. Another reason is ease of maintenance - I'd rather see
JavaScript SDK's code generation process to be independent of any other
SDK (people responsible for maintaining JavaScript SDK should have full
control over generated code).

--

Q: What about functionality currently used by oVirt UI but not supported by
REST API? (asked by Einav)
 [For example, fetching VM entity over GWT RPC also returns related data
 such as Cluster name.]

A: Based on discussion I've had with other colleagues after yesterday's
review call, I don't think that separate support-like backend layer is a
good idea. Instead, this is the kind of functionality that could be placed
in oVirt.js library. Logical operations like get VMs and related data
would be exposed through oVirt.js (callback-based) API and ultimately
realized as multiple physical requests to REST API via JavaScript Binding.

oVirt.js client would be completely oblivious to the fact that multiple
physical requests are dispatched. In fact, since HTTP communication is
asynchronous in nature, oVirt.js client wouldn't even notice any
difference in terms of API consumption. This assumes JavaScript SDK would
use callback-based (non-blocking) API instead of blocking one - after all,
blocking API on top of non-blocking implementation sounds pretty much like
leaky abstraction [1].

For example:

  sdk.getVmsWithExtraData(
  callbackToGetExtraDataForGivenVm, // might cause extra physical
  requests to REST API
  callbackFiredWhenAllDataIsReady   // update client only when all
  data is ready
  )


would this also resolve RunMultipleActions?


Yes, I think so. There could be API to pass multiple actions and get notified 
when they complete.


sounds like no reason to have RunMultipleQueries, although i'm still
sure a single call to engine for multiple keys would be much more
efficient than multiple async calls?
(I understand we may not be able to model this).


Efficiency-wise, yes, single call to get all data seems optimal. API-wise, I 
don't think it really matters from oVirt.js client perspective.

We can proceed with simple (possibly inefficient) solution and improve as 
needed. We're making baby steps now..





[1] http://en.wikipedia.org/wiki/Leaky_abstraction

--

Last but not least, where to maintain JavaScript SDK projects: low-level
JavaScript Binding + high-level oVirt.js library.

I agree that conceptually both above mentioned projects should go into
dedicated ovirt-engine-sdk-js git repository and have their own
build/release process. However, for now, we're just making baby steps so
let's keep things simple and prototype these projects as part of
ovirt-engine git repository.

... we can complicate things anytime, but we should know that any complex
system that works has inevitably evolved from simple system that works ...
(quote from http://en.wikipedia.org/wiki/Gall%27s_law)


I think the entities should just be generated from the xsd.


+1

The JavaScript Binding (aka low-level SDK) module should follow same concepts 
as existing Java SDK - generated entities decorated with operations to form 
fluent API.

Everything Java SDK currently offers should be available in JavaScript Binding. 
oVirt.js is our opportunity to build on top of that.


for the rsdl, makes sense to start with clean code to see what works
best, then see about generating it (but you should adhere the rsdl as
guidlines i guess).


+1

The initial prototype should be written by hand, things will get generated as 
soon as we have better idea how the end result should look like.


i can 

[Engine-devel] Using REST API in web UI - review call summary

2013-11-21 Thread Vojtech Szocs
Hi guys,

this is a summary of yesterday's review call, I'll try to highlight important 
Q/A and things we agreed on. Feel free to add anything in case I've missed 
something.

--

Q: Why don't we simply try to use existing Java SDK and adapt it for GWT apps? 
(asked by Michael  Gilad)

A: This might be a viable option to consider if we wanted to skip 
JavaScript-based SDK altogether and target Java/GWT code directly; we could 
simply take Java SDK and customize its abstractions where necessary, i.e. using 
HTTP transport layer implementation that works with GWT. In any case, this 
would mean coupling ourselves to Java SDK (which has its own release cycle) and 
I think this would complicate things for us.

As proposed on the meeting, I think it's best to aim for JavaScript SDK as the 
lowest common denominator for *any* web application that wants to work with 
REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e. Java/GWT 
code that just overlays objects and functions provided by JavaScript SDK. 
Another reason is ease of maintenance - I'd rather see JavaScript SDK's code 
generation process to be independent of any other SDK (people responsible for 
maintaining JavaScript SDK should have full control over generated code).

--

Q: What about functionality currently used by oVirt UI but not supported by 
REST API? (asked by Einav)
   [For example, fetching VM entity over GWT RPC also returns related data such 
as Cluster name.]

A: Based on discussion I've had with other colleagues after yesterday's review 
call, I don't think that separate support-like backend layer is a good idea. 
Instead, this is the kind of functionality that could be placed in oVirt.js 
library. Logical operations like get VMs and related data would be exposed 
through oVirt.js (callback-based) API and ultimately realized as multiple 
physical requests to REST API via JavaScript Binding.

oVirt.js client would be completely oblivious to the fact that multiple 
physical requests are dispatched. In fact, since HTTP communication is 
asynchronous in nature, oVirt.js client wouldn't even notice any difference in 
terms of API consumption. This assumes JavaScript SDK would use callback-based 
(non-blocking) API instead of blocking one - after all, blocking API on top of 
non-blocking implementation sounds pretty much like leaky abstraction [1].

For example:

sdk.getVmsWithExtraData(
callbackToGetExtraDataForGivenVm, // might cause extra physical 
requests to REST API
callbackFiredWhenAllDataIsReady   // update client only when all data 
is ready
)

[1] http://en.wikipedia.org/wiki/Leaky_abstraction

--

Last but not least, where to maintain JavaScript SDK projects: low-level 
JavaScript Binding + high-level oVirt.js library.

I agree that conceptually both above mentioned projects should go into 
dedicated ovirt-engine-sdk-js git repository and have their own build/release 
process. However, for now, we're just making baby steps so let's keep things 
simple and prototype these projects as part of ovirt-engine git repository.

... we can complicate things anytime, but we should know that any complex 
system that works has inevitably evolved from simple system that works ... 
(quote from http://en.wikipedia.org/wiki/Gall%27s_law)

Regards,
Vojtech
___
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel


Re: [Engine-devel] Using REST API in web UI - review call summary

2013-11-21 Thread Itamar Heim

On 11/21/2013 11:18 PM, Vojtech Szocs wrote:

Hi guys,

this is a summary of yesterday's review call, I'll try to highlight important 
Q/A and things we agreed on. Feel free to add anything in case I've missed 
something.

--

Q: Why don't we simply try to use existing Java SDK and adapt it for GWT apps? 
(asked by Michael  Gilad)

A: This might be a viable option to consider if we wanted to skip 
JavaScript-based SDK altogether and target Java/GWT code directly; we could 
simply take Java SDK and customize its abstractions where necessary, i.e. using 
HTTP transport layer implementation that works with GWT. In any case, this 
would mean coupling ourselves to Java SDK (which has its own release cycle) and 
I think this would complicate things for us.

As proposed on the meeting, I think it's best to aim for JavaScript SDK as the 
lowest common denominator for *any* web application that wants to work with 
REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e. Java/GWT 
code that just overlays objects and functions provided by JavaScript SDK. 
Another reason is ease of maintenance - I'd rather see JavaScript SDK's code 
generation process to be independent of any other SDK (people responsible for 
maintaining JavaScript SDK should have full control over generated code).

--

Q: What about functionality currently used by oVirt UI but not supported by 
REST API? (asked by Einav)
[For example, fetching VM entity over GWT RPC also returns related data 
such as Cluster name.]

A: Based on discussion I've had with other colleagues after yesterday's review call, I 
don't think that separate support-like backend layer is a good idea. Instead, this is the 
kind of functionality that could be placed in oVirt.js library. Logical operations like 
get VMs and related data would be exposed through oVirt.js (callback-based) 
API and ultimately realized as multiple physical requests to REST API via JavaScript 
Binding.

oVirt.js client would be completely oblivious to the fact that multiple 
physical requests are dispatched. In fact, since HTTP communication is 
asynchronous in nature, oVirt.js client wouldn't even notice any difference in 
terms of API consumption. This assumes JavaScript SDK would use callback-based 
(non-blocking) API instead of blocking one - after all, blocking API on top of 
non-blocking implementation sounds pretty much like leaky abstraction [1].

For example:

 sdk.getVmsWithExtraData(
 callbackToGetExtraDataForGivenVm, // might cause extra physical 
requests to REST API
 callbackFiredWhenAllDataIsReady   // update client only when all data 
is ready
 )


would this also resolve RunMultipleActions?
sounds like no reason to have RunMultipleQueries, although i'm still 
sure a single call to engine for multiple keys would be much more 
efficient than multiple async calls?

(I understand we may not be able to model this).



[1] http://en.wikipedia.org/wiki/Leaky_abstraction

--

Last but not least, where to maintain JavaScript SDK projects: low-level 
JavaScript Binding + high-level oVirt.js library.

I agree that conceptually both above mentioned projects should go into dedicated 
ovirt-engine-sdk-js git repository and have their own build/release process. However, 
for now, we're just making baby steps so let's keep things simple and prototype these projects as 
part of ovirt-engine git repository.

... we can complicate things anytime, but we should know that any complex 
system that works has inevitably evolved from simple system that works ... 
(quote from http://en.wikipedia.org/wiki/Gall%27s_law)


I think the entities should just be generated from the xsd.
for the rsdl, makes sense to start with clean code to see what works 
best, then see about generating it (but you should adhere the rsdl as 
guidlines i guess).


lets try to plan for lightweight entities while at it - the API has a 
mechanism for different level of details - maybe we need a custom level 
where the client specifies which fields they want back or something like 
that.


Good luck,
   Itamar
___
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel