openstack team mailing list archive
-
openstack team
-
Mailing list archive
-
Message #09493
Re: Moving nova.rpc into openstack.common
Thanks for sharing this information. For the future, I think this type
of analysis and discussion is something that is great to have on the
mailing list instead of just a private group. I wish I had seen it sooner.
The code in nova.rpc seems useful enough that it very well may be used
elsewhere. I know it's more than what is needed for notifications, but
it does support what is needed for notifications (and more). I like the
idea of moving the whole thing instead of having separate messaging code
for just notifications.
--
Russell Bryant
On 04/03/2012 09:20 AM, Swaminathan Venkataraman wrote:
> Hi,
> I'm actively working on the notification part. I did some analysis on
> the code and dependencies and was planning to submit a blueprint by end
> of the week. We can use that to finalize the interface for the
> notification. The rpc implementation is rich (compared to just what we
> need for notifications) because nova uses it for all rpc related
> communications. The idea that I was working with was to just move what
> we need for notifications. In that scenario we do not really need all of
> rpc in openstack-common. If we do want a common implementation that all
> openstack components can use to communicate the middleware, it might
> make to sense to move the whole of rpc to openstack-common.
>
> Thoughts?
>
>
> Anyways, here is the analysis and some of the comments I got...
>
> Cheers,
> Venkat
>
> *
>
>
> ---------- Forwarded message ----------
> From: *Swaminathan Venkataraman* <venkat.db@xxxxxxxxx
> <mailto:venkat.db@xxxxxxxxx>>
> Date: Mon, Mar 19, 2012 at 8:31 PM
> Subject: Re: [Openstack] Notifiers
> To: Monsyne Dragon <mdragon@xxxxxxxxxxxxx
> <mailto:mdragon@xxxxxxxxxxxxx>>
> Cc: Mark McLoughlin <markmc@xxxxxxxxxx <mailto:markmc@xxxxxxxxxx>>,
> Jason Kölker <jason.koelker@xxxxxxxxxxxxx
> <mailto:jason.koelker@xxxxxxxxxxxxx>>, Jay Pipes <jaypipes@xxxxxxxxx
> <mailto:jaypipes@xxxxxxxxx>>
>
>
> I did some analysis on notifier and rpc in nova and there are a
> bunch of dependencies that have to be sorted out before we can move
> them to openstack-common. Here are some of the details.
>
> o notifier and rpc use flags, utils, logging, context, db,
> exception, from nova.
> o
> o The modules in notfier and rpc use FLAGS from flags.py which is
> an instance of NovaConfigOpts. They mainly use it to register
> the config options and access them. Given that, it seems like we
> could use CommonConfigOpts directly to register the options.
> This will eliminate the dependency on flags and flagfile.
> o
> o There are three functions that are used from utils - utcnow,
> import_object, and to_primitive. There is a utils in
> openstack-common which already contains utcnow and
> import_object. The code also macthes line to line with the
> implementation in nova. The to_primitive function is missing in
> openstack-common. One option could be to move this function
> alone to openstack-common which should eliminate the dependency
> on the nova based utils.
> o
> o notifier and api use log from nova. In fact they work with an
> instance of NovaContextAdapter which in turn is an instance of
> LoggerAdapter. NovaContextAdapter is used to pass the context,
> the instance uuid, and the nova version to the logger. The
> modules in openstack-common are using the python logging module
> directly. So, if we need notifier to be able to print contextual
> information we will have to add this functionality to
> openstack-common.
> o
> o Both nova and openstack-common have an implementation of
> RequestContext. The one in Nova is richer and both notifier and
> rpc use functionality from RequestContext in nova. The other
> difference is that the RequestContext in nova uses a weak
> refernce store to save the context information. I did see a
> couple of instances where the context information was deleted
> from the store, but I'm not sure whether it is being accessed.
> So, should the context in openstack-common be enhanced?
> o
> o db from nova is used only by capacity_notifier. It looks like it
> sends events that are only related to compute manager events.
> So, should this be part of openstack-common?
> I've not looked at exception. I'll also have to look at rpc in more
> detail. Please do let me know if this is the right direction.
>
> thanks,
> Venkat
>
> ---------- Forwarded message ----------
> From: *Mark McLoughlin* <markmc@xxxxxxxxxx <mailto:markmc@xxxxxxxxxx>>
> Date: Tue, Mar 20, 2012 at 8:05 PM
> Subject: Re: [Openstack] Notifiers
> To: Swaminathan Venkataraman <venkat.db@xxxxxxxxx
> <mailto:venkat.db@xxxxxxxxx>>
> Cc: Monsyne Dragon <mdragon@xxxxxxxxxxxxx
> <mailto:mdragon@xxxxxxxxxxxxx>>, Jason Kölker
> <jason.koelker@xxxxxxxxxxxxx <mailto:jason.koelker@xxxxxxxxxxxxx>>, Jay
> Pipes <jaypipes@xxxxxxxxx <mailto:jaypipes@xxxxxxxxx>>
>
> ---------- Forwarded message ----------
> From: *Mark McLoughlin* <markmc@xxxxxxxxxx <mailto:markmc@xxxxxxxxxx>>
> Date: Tue, Mar 20, 2012 at 1:25 PM
> Subject: Re: [Openstack] Notifiers
> To: Swaminathan Venkataraman <venkat.db@xxxxxxxxx
> <mailto:venkat.db@xxxxxxxxx>>
> Cc: Monsyne Dragon <mdragon@xxxxxxxxxxxxx
> <mailto:mdragon@xxxxxxxxxxxxx>>, Jason Kölker
> <jason.koelker@xxxxxxxxxxxxx <mailto:jason.koelker@xxxxxxxxxxxxx>>, Jay
> Pipes <jaypipes@xxxxxxxxx <mailto:jaypipes@xxxxxxxxx>>
>
>
> Hi Venkat,
>
> Could you file a bug or blueprint against openstack-common with all this
> great info?
>
> Cheers,
> Mark.
>
> On Tue, 2012-03-20 at 19:37 +0530, Swaminathan Venkataraman wrote:
>> Sure Mark, but here is a bit more of analysis that I did. I'll file a
>> blueprint because I'm not sure if this is a bug.
>>
>>
>> There is an exception module defined in openstack-common. This has a
>> class named openstackException which is similar to NovaException and I
>> guess is to be subclassed to define exceptions that go in
>> openstack-common. openstack-common also defines a decorator for
>> wrapping methods to catch exceptions, but it does not try to send the
>> exception to the notification system like the one in nova.exception
>> does. Based on this we could use exceptions in openstack-common in
>> notifier and rpc. We'll still have to figure out what to do with
>> exceptions which are common (like ClassNotFoundexception). We'll have
>> to duplicate them or modules in nova will have to import two different
>> exception modules with different hierarchies, if we move common
>> exceptions to openstack-common. The ideal scenario is to have one
>> single hierarchy for exceptions, but I guess that this is a bigger
>> decision.
>
> Firstly, I wouldn't consider the openstack.common.exception as
> particularly complete or final. I'd be happy for us to completely
> re-think the approach to exceptions in openstack-common.
>
> The wrap_exception() decorator could continue to live in nova for now.
>
> exception.ClassNotFound is only raised by utils.import_object, but
> openstack-common has its own version of that method and raises its own
> exception.NotFound. So, no problem there.
>
> I think its best to leave rabbit_notifier.py in nova for the moment.
> Perhaps move it to the nova.rpc module.
>
>> The driver for notification is decided based on
>> FALGS.notification_driver. In the current scenario, since glance and
>> nova use different methods to do notifications, they can end up with
>> different drivers. If we do make the notifier common and if we want to
>> provide the capability for each of the openstack components to use
>> different drivers, we cannot just use the driver defined in the
>> configuration. One way is to pass the notifier as a parameter or
>> provide the configuration to be used to get the notifier and use
>> different configuration parameters for different components.
>
> I think we'll want the log, list, no-op and test notifiers in
> openstack-common.
>
> The way to handle configuration is to do what glance does - have a
> Notifier class which accepts a ConfigOpts as a constructor parameter.
> The class defines a "strategy" or "driver" option and loads the
> appropriate driver based on that option.
>
> IMHO, the best way to approach moving stuff like this to
> openstack-common is to start with an (almost) fresh slate - don't be too
> worried about what Nova or Glance currently does, but instead try and
> define the best API to meet their requirements.
>
> Cheers,
> Mark.
>
>
>
Follow ups
References