Re: [vdsm] [RFC] An alternative way to provide a supported interface -- libvdsm

2012-07-09 Thread Adam Litke
On Fri, Jul 06, 2012 at 03:53:08PM +0300, Itamar Heim wrote:
 On 07/06/2012 01:15 AM, Robert Middleswarth wrote:
 On 07/05/2012 04:45 PM, Adam Litke wrote:
 On Thu, Jul 05, 2012 at 03:47:42PM -0400, Saggi Mizrahi wrote:
 
 - Original Message -
 From: Adam Litke a...@us.ibm.com
 To: Saggi Mizrahi smizr...@redhat.com
 Cc: Anthony Liguori anth...@codemonkey.ws, VDSM Project
 Development vdsm-devel@lists.fedorahosted.org
 Sent: Thursday, July 5, 2012 2:34:50 PM
 Subject: Re: [RFC] An alternative way to provide a supported
 interface -- libvdsm
 
 On Wed, Jun 27, 2012 at 02:50:02PM -0400, Saggi Mizrahi wrote:
 The idea of having a supported C API was something I was thinking
 about doing
 (But I'd rather use gobject introspection and not schema
 generation) But the
 problem is not having a C API is using the current XML RPC API as
 it's base
 I want to disect this a bit to find out exactly where there might be
 agreement
 and disagreement.
 
 C API is a good thing to implement - Agreed.
 
 I also want to use gobject introspection but I don't agree that using
 glib
 precludes the use of a formalized schema.  My proposal is that we
 write a schema
 definition and generate the glib C code from that schema.
 
 I agree that the _current_ xmlrpc API makes a pretty bad base from
 which to
 start a supportable API.  XMLRPC is a perfectly reasonable
 remote/wire protocol
 and I think we should continue using it as a base for the next
 generation API.
 Using a schema will ensure that the new API is well-structured.
 There major problems with XML-RPC (and to some extent with REST as
 well) are high call overhead and no two way communication (push
 events). Basing on XML-RPC means that we will never be able to solve
 these issues.
 I am not sure I am ready to conceed that XML-RPC is too slow for our
 needs.  Can
 you provide some more detail around this point and possibly suggest an
 alternative that has even lower overhead without sacrificing the
 ubiquity and
 usability of XML-RPC?  As far as the two-way communication point, what
 are the
 options besides AMQP/ZeroMQ?  Aren't these even worse from an overhead
 perspective than XML-RPC?  Regarding two-way communication: you can
 write AMQP
 brokers based on the C API and run one on each vdsm host.  Assuming
 the C API
 supports events, what else would you need?
 I personally think that using something like AMQP for inter-node
 communication and engine - node would be optimal.  With a rest interface
 that just send messages though something like AMQP.
 
 I would also not dismiss AMQP so soon
 we want a bug with more than a single listener at engine side
 (engine, history db, maybe event correlation service).
 collectd as a means for statistics already supports it as well.
 I'm for having REST as well, but not sure as main one for a consumer
 like ovirt engine.

I agree that a message bus could be a very useful model of communication between
ovirt-engine components and multiple vdsm instances.  But the complexities and
dependencies of AMQP do not make it suitable for use as a low-level API.  AMQP
will repel new adopters.  Why not establish a libvdsm that is more minimalist
and can be easily used by everyone?  Then AMQP brokers can be built on top of
the stable API with ease.  All AMQP should require of the low-level API are
standard function calls and an events mechanism.

 
 Thanks
 Robert
 The current XML-RPC API contains a lot of decencies and
 inefficiencies and we
 would like to retire it as soon as we possibly can. Engine would
 like us to
 move to a message based API and 3rd parties want something simple
 like REST so
 it looks like no one actually wants to use XML-RPC. Not even us.
 I am proposing that AMQP brokers and REST APIs could be written
 against the
 public API.  In fact, they need not even live in the vdsm tree
 anymore if that
 is what we choose.  Core vdsm would only be responsible for providing
 libvdsm
 and whatever language bindings we want to support.
 If we take the libvdsm route, the only reason to even have a REST
 bridge is only to support OSes other then Linux which is something
 I'm not sure we care about at the moment.
 That might be true regarding the current in-tree implementation.
 However, I can
 almost guarantee that someone wanting to write a web GUI on top of
 standalone
 vdsm would want a REST API to talk to.  But libvdsm makes this use
 case of no
 concern to the core vdsm developers.
 
 I do think that having C supportability in our API is a good idea,
 but the
 current API should not be used as the base.
 Let's _start_ with a schema document that describes today's API and
 then clean
 it up.  I think that will work better than starting from scratch.
   Once my
 schema is written I will post it and we can 'patch' it as a community
 until we
 arrive at a 1.0 version we are all happy with.
 +1
 Ok.  Redoubling my efforts to get this done.  Describing the output of
 list(True) takes awhile :)
 
 
 
 

Re: [vdsm] [RFC] An alternative way to provide a supported interface -- libvdsm

2012-07-09 Thread Saggi Mizrahi
I don't think AMQP is a good low level supported protocol as it's a very 
complex protocol to set up and support.
Also brokers are known to have their differences in standard implementation 
which means supporting them all is a mess.

It looks like the most accepted route is the libvirt route of having a c 
library abstracting away client server communication and having more advanced 
consumers build protocol specific bridges that may have different support 
standards.

On a more personal note, I think brokerless messaging is the way to go in ovirt 
because, unlike traditional clustering, worker nodes are not interchangeable so 
direct communication is the way to go, rendering brokers pretty much useless.

- Original Message -
 From: Adam Litke a...@us.ibm.com
 To: Itamar Heim ih...@redhat.com
 Cc: vdsm-devel@lists.fedorahosted.org
 Sent: Monday, July 9, 2012 9:56:17 AM
 Subject: Re: [vdsm] [RFC] An alternative way to provide a supported interface 
 -- libvdsm
 
 On Fri, Jul 06, 2012 at 03:53:08PM +0300, Itamar Heim wrote:
  On 07/06/2012 01:15 AM, Robert Middleswarth wrote:
  On 07/05/2012 04:45 PM, Adam Litke wrote:
  On Thu, Jul 05, 2012 at 03:47:42PM -0400, Saggi Mizrahi wrote:
  
  - Original Message -
  From: Adam Litke a...@us.ibm.com
  To: Saggi Mizrahi smizr...@redhat.com
  Cc: Anthony Liguori anth...@codemonkey.ws, VDSM Project
  Development vdsm-devel@lists.fedorahosted.org
  Sent: Thursday, July 5, 2012 2:34:50 PM
  Subject: Re: [RFC] An alternative way to provide a supported
  interface -- libvdsm
  
  On Wed, Jun 27, 2012 at 02:50:02PM -0400, Saggi Mizrahi wrote:
  The idea of having a supported C API was something I was
  thinking
  about doing
  (But I'd rather use gobject introspection and not schema
  generation) But the
  problem is not having a C API is using the current XML RPC API
  as
  it's base
  I want to disect this a bit to find out exactly where there
  might be
  agreement
  and disagreement.
  
  C API is a good thing to implement - Agreed.
  
  I also want to use gobject introspection but I don't agree that
  using
  glib
  precludes the use of a formalized schema.  My proposal is that
  we
  write a schema
  definition and generate the glib C code from that schema.
  
  I agree that the _current_ xmlrpc API makes a pretty bad base
  from
  which to
  start a supportable API.  XMLRPC is a perfectly reasonable
  remote/wire protocol
  and I think we should continue using it as a base for the next
  generation API.
  Using a schema will ensure that the new API is well-structured.
  There major problems with XML-RPC (and to some extent with REST
  as
  well) are high call overhead and no two way communication (push
  events). Basing on XML-RPC means that we will never be able to
  solve
  these issues.
  I am not sure I am ready to conceed that XML-RPC is too slow for
  our
  needs.  Can
  you provide some more detail around this point and possibly
  suggest an
  alternative that has even lower overhead without sacrificing the
  ubiquity and
  usability of XML-RPC?  As far as the two-way communication point,
  what
  are the
  options besides AMQP/ZeroMQ?  Aren't these even worse from an
  overhead
  perspective than XML-RPC?  Regarding two-way communication: you
  can
  write AMQP
  brokers based on the C API and run one on each vdsm host.
   Assuming
  the C API
  supports events, what else would you need?
  I personally think that using something like AMQP for inter-node
  communication and engine - node would be optimal.  With a rest
  interface
  that just send messages though something like AMQP.
  
  I would also not dismiss AMQP so soon
  we want a bug with more than a single listener at engine side
  (engine, history db, maybe event correlation service).
  collectd as a means for statistics already supports it as well.
  I'm for having REST as well, but not sure as main one for a
  consumer
  like ovirt engine.
 
 I agree that a message bus could be a very useful model of
 communication between
 ovirt-engine components and multiple vdsm instances.  But the
 complexities and
 dependencies of AMQP do not make it suitable for use as a low-level
 API.  AMQP
 will repel new adopters.  Why not establish a libvdsm that is more
 minimalist
 and can be easily used by everyone?  Then AMQP brokers can be built
 on top of
 the stable API with ease.  All AMQP should require of the low-level
 API are
 standard function calls and an events mechanism.
 
  
  Thanks
  Robert
  The current XML-RPC API contains a lot of decencies and
  inefficiencies and we
  would like to retire it as soon as we possibly can. Engine
  would
  like us to
  move to a message based API and 3rd parties want something
  simple
  like REST so
  it looks like no one actually wants to use XML-RPC. Not even
  us.
  I am proposing that AMQP brokers and REST APIs could be written
  against the
  public API.  In fact, they need not even live in the vdsm tree
  anymore if that
  is what we choose.  

Re: [vdsm] [RFC] An alternative way to provide a supported interface -- libvdsm

2012-07-09 Thread Itamar Heim

On 07/09/2012 05:56 PM, Saggi Mizrahi wrote:

I don't think AMQP is a good low level supported protocol as it's a very 
complex protocol to set up and support.
Also brokers are known to have their differences in standard implementation 
which means supporting them all is a mess.

It looks like the most accepted route is the libvirt route of having a c 
library abstracting away client server communication and having more advanced 
consumers build protocol specific bridges that may have different support 
standards.

On a more personal note, I think brokerless messaging is the way to go in ovirt 
because, unlike traditional clustering, worker nodes are not interchangeable so 
direct communication is the way to go, rendering brokers pretty much useless.


but brokerless doesn't let multiple consumers which a bus provides?



- Original Message -

From: Adam Litke a...@us.ibm.com
To: Itamar Heim ih...@redhat.com
Cc: vdsm-devel@lists.fedorahosted.org
Sent: Monday, July 9, 2012 9:56:17 AM
Subject: Re: [vdsm] [RFC] An alternative way to provide a supported interface 
-- libvdsm

On Fri, Jul 06, 2012 at 03:53:08PM +0300, Itamar Heim wrote:

On 07/06/2012 01:15 AM, Robert Middleswarth wrote:

On 07/05/2012 04:45 PM, Adam Litke wrote:

On Thu, Jul 05, 2012 at 03:47:42PM -0400, Saggi Mizrahi wrote:


- Original Message -

From: Adam Litke a...@us.ibm.com
To: Saggi Mizrahi smizr...@redhat.com
Cc: Anthony Liguori anth...@codemonkey.ws, VDSM Project
Development vdsm-devel@lists.fedorahosted.org
Sent: Thursday, July 5, 2012 2:34:50 PM
Subject: Re: [RFC] An alternative way to provide a supported
interface -- libvdsm

On Wed, Jun 27, 2012 at 02:50:02PM -0400, Saggi Mizrahi wrote:

The idea of having a supported C API was something I was
thinking
about doing
(But I'd rather use gobject introspection and not schema
generation) But the
problem is not having a C API is using the current XML RPC API
as
it's base

I want to disect this a bit to find out exactly where there
might be
agreement
and disagreement.

C API is a good thing to implement - Agreed.

I also want to use gobject introspection but I don't agree that
using
glib
precludes the use of a formalized schema.  My proposal is that
we
write a schema
definition and generate the glib C code from that schema.

I agree that the _current_ xmlrpc API makes a pretty bad base
from
which to
start a supportable API.  XMLRPC is a perfectly reasonable
remote/wire protocol
and I think we should continue using it as a base for the next
generation API.
Using a schema will ensure that the new API is well-structured.

There major problems with XML-RPC (and to some extent with REST
as
well) are high call overhead and no two way communication (push
events). Basing on XML-RPC means that we will never be able to
solve
these issues.

I am not sure I am ready to conceed that XML-RPC is too slow for
our
needs.  Can
you provide some more detail around this point and possibly
suggest an
alternative that has even lower overhead without sacrificing the
ubiquity and
usability of XML-RPC?  As far as the two-way communication point,
what
are the
options besides AMQP/ZeroMQ?  Aren't these even worse from an
overhead
perspective than XML-RPC?  Regarding two-way communication: you
can
write AMQP
brokers based on the C API and run one on each vdsm host.
Assuming
the C API
supports events, what else would you need?

I personally think that using something like AMQP for inter-node
communication and engine - node would be optimal.  With a rest
interface
that just send messages though something like AMQP.


I would also not dismiss AMQP so soon
we want a bug with more than a single listener at engine side
(engine, history db, maybe event correlation service).
collectd as a means for statistics already supports it as well.
I'm for having REST as well, but not sure as main one for a
consumer
like ovirt engine.


I agree that a message bus could be a very useful model of
communication between
ovirt-engine components and multiple vdsm instances.  But the
complexities and
dependencies of AMQP do not make it suitable for use as a low-level
API.  AMQP
will repel new adopters.  Why not establish a libvdsm that is more
minimalist
and can be easily used by everyone?  Then AMQP brokers can be built
on top of
the stable API with ease.  All AMQP should require of the low-level
API are
standard function calls and an events mechanism.



Thanks
Robert

The current XML-RPC API contains a lot of decencies and
inefficiencies and we
would like to retire it as soon as we possibly can. Engine
would
like us to
move to a message based API and 3rd parties want something
simple
like REST so
it looks like no one actually wants to use XML-RPC. Not even
us.

I am proposing that AMQP brokers and REST APIs could be written
against the
public API.  In fact, they need not even live in the vdsm tree
anymore if that
is what we choose.  Core vdsm would only be responsible for
providing
libvdsm
and whatever language bindings 

Re: [vdsm] [RFC] An alternative way to provide a supported interface -- libvdsm

2012-07-09 Thread Saggi Mizrahi


- Original Message -
 From: Itamar Heim ih...@redhat.com
 To: Saggi Mizrahi smizr...@redhat.com
 Cc: Adam Litke a...@us.ibm.com, vdsm-devel@lists.fedorahosted.org
 Sent: Monday, July 9, 2012 11:03:43 AM
 Subject: Re: [vdsm] [RFC] An alternative way to provide a supported interface 
 -- libvdsm
 
 On 07/09/2012 05:56 PM, Saggi Mizrahi wrote:
  I don't think AMQP is a good low level supported protocol as it's a
  very complex protocol to set up and support.
  Also brokers are known to have their differences in standard
  implementation which means supporting them all is a mess.
 
  It looks like the most accepted route is the libvirt route of
  having a c library abstracting away client server communication
  and having more advanced consumers build protocol specific bridges
  that may have different support standards.
 
  On a more personal note, I think brokerless messaging is the way to
  go in ovirt because, unlike traditional clustering, worker nodes
  are not interchangeable so direct communication is the way to go,
  rendering brokers pretty much useless.
 
 but brokerless doesn't let multiple consumers which a bus provides?
All consumers can connect to the host and *some* events can be broadcasted to 
all connected clients.

The real question is weather you want to depend on AMQP's routing \ message 
storing
Also, if you find it preferable to have a centralized host (single point of 
failure) to get all events from all hosts for the price of  some clients (I 
assume read only clients) not needing to know the locations of all worker nodes.
But IMHO we already have something like that, it's called the ovirt-engine, and 
it could send aggregated events about the cluster (maybe with some extra enginy 
data).

The question is what does mandating a broker gives us something that an AMQP 
bridge wouldn't.
The only thing I can think of is vdsm can assume unmoderated vdsm to vdsm 
communication bypassing the engine.
This means that VDSM can have some clustered behavior that requires no engine 
intervention.
Further more, the engine can send a request and let the nodes decide who is 
performing the operation among themselves.

Essentially:

[  engine  ]  [  engine  ]
   | |  VS  |
[vdsm][vdsm]  [  broker  ]
 | |
  [vdsm][vdsm]

*All links are two way links

This has dire consequences on API usability and supportability. So we need to 
converge on that.

There needs to be a good reason why the aforementioned logic code can't sit on 
a another ovirt specific entity (lets call it ovirt-dynamo) that uses VDSM's 
supported API but it's own APIs (or more likely messaging algorithms) are 
unsupported.
  
 [engine   ]
   |||
   |  [   broker   ] |
   |||   |
[vdsm]-[dynamo] : [dynamo]-[vdsm]
Host A  :  Host B

*All links are two way links
 
 
  - Original Message -
  From: Adam Litke a...@us.ibm.com
  To: Itamar Heim ih...@redhat.com
  Cc: vdsm-devel@lists.fedorahosted.org
  Sent: Monday, July 9, 2012 9:56:17 AM
  Subject: Re: [vdsm] [RFC] An alternative way to provide a
  supported interface -- libvdsm
 
  On Fri, Jul 06, 2012 at 03:53:08PM +0300, Itamar Heim wrote:
  On 07/06/2012 01:15 AM, Robert Middleswarth wrote:
  On 07/05/2012 04:45 PM, Adam Litke wrote:
  On Thu, Jul 05, 2012 at 03:47:42PM -0400, Saggi Mizrahi wrote:
 
  - Original Message -
  From: Adam Litke a...@us.ibm.com
  To: Saggi Mizrahi smizr...@redhat.com
  Cc: Anthony Liguori anth...@codemonkey.ws, VDSM Project
  Development vdsm-devel@lists.fedorahosted.org
  Sent: Thursday, July 5, 2012 2:34:50 PM
  Subject: Re: [RFC] An alternative way to provide a supported
  interface -- libvdsm
 
  On Wed, Jun 27, 2012 at 02:50:02PM -0400, Saggi Mizrahi
  wrote:
  The idea of having a supported C API was something I was
  thinking
  about doing
  (But I'd rather use gobject introspection and not schema
  generation) But the
  problem is not having a C API is using the current XML RPC
  API
  as
  it's base
  I want to disect this a bit to find out exactly where there
  might be
  agreement
  and disagreement.
 
  C API is a good thing to implement - Agreed.
 
  I also want to use gobject introspection but I don't agree
  that
  using
  glib
  precludes the use of a formalized schema.  My proposal is
  that
  we
  write a schema
  definition and generate the glib C code from that schema.
 
  I agree that the _current_ xmlrpc API makes a pretty bad base
  from
  which to
  start a supportable API.  XMLRPC is a perfectly reasonable
  remote/wire protocol
  and I think we should continue using it as a base for the
  next
  generation API.
  Using a schema will ensure that the new API is
  well-structured.
  There major problems with XML-RPC (and to some extent with
  REST
  as
  well) are high call overhead and no two way communication
  (push