Winson, 

While you're looking into this and working on the design, may be also think 
through other executor/engine communications.

We talked about executor communicating to engine over 3 channels (DB, REST, 
RabbitMQ) which I wasn't happy about ;) and put it off for some time. May be it 
can be rationalized as part of your design. 

DZ. 

On Feb 24, 2014, at 11:21 AM, W Chan <m4d.co...@gmail.com> wrote:

> Renat,
> 
> Regarding your comments on change https://review.openstack.org/#/c/75609/, I 
> don't think the port to oslo.messaging is just a swap from pika to 
> oslo.messaging.  OpenStack services as I understand is usually implemented as 
> an RPC client/server over a messaging transport.  Sync vs async calls are 
> done via the RPC client call and cast respectively.  The messaging transport 
> is abstracted and concrete implementation is done via drivers/plugins.  So 
> the architecture of the executor if ported to oslo.messaging needs to include 
> a client, a server, and a transport.  The consumer (in this case the mistral 
> engine) instantiates an instance of the client for the executor, makes the 
> method call to handle task, the client then sends the request over the 
> transport to the server.  The server picks up the request from the exchange 
> and processes the request.  If cast (async), the client side returns 
> immediately.  If call (sync), the client side waits for a response from the 
> server over a reply_q (a unique queue for the session in the transport).  
> Also, oslo.messaging allows versioning in the message. Major version change 
> indicates API contract changes.  Minor version indicates backend changes but 
> with API compatibility.  
> 
> So, where I'm headed with this change...  I'm implementing the basic 
> structure/scaffolding for the new executor service using oslo.messaging 
> (default transport with rabbit).  Since the whole change will take a few 
> rounds, I don't want to disrupt any changes that the team is making at the 
> moment and so I'm building the structure separately.  I'm also adding 
> versioning (v1) in the module structure to anticipate any versioning changes 
> in the future.   I expect the change request will lead to some discussion as 
> we are doing here.  I will migrate the core operations of the executor 
> (handle_task, handle_task_error, do_task_action) to the server component when 
> we agree on the architecture and switch the consumer (engine) to use the new 
> RPC client for the executor instead of sending the message to the queue over 
> pika.  Also, the launcher for ./mistral/cmd/task_executor.py will change as 
> well in subsequent round.  An example launcher is here 
> https://github.com/uhobawuhot/interceptor/blob/master/bin/interceptor-engine. 
>  The interceptor project here is what I use to research how oslo.messaging 
> works.  I hope this is clear. The blueprint only changes how the request and 
> response are being transported.  It shouldn't change how the executor 
> currently works.
> 
> Finally, can you clarify the difference between local vs scalable engine?  I 
> personally do not prefer to explicitly name the engine scalable because this 
> requirement should be in the engine by default and we do not need to 
> explicitly state/separate that.  But if this is a roadblock for the change, I 
> can put the scalable structure back in the change to move this forward.
> 
> Thanks.
> Winson
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to