[Openstack] [nova] Havana -> Icehouse upgrades with cells

Chris Behrens cbehrens at codestud.com
Fri Apr 18 21:26:13 UTC 2014


The problem here is that Havana is not going to know how to backport the Icehouse object, even if had the conductor methods to do so… unless you’re running the Icehouse conductor. But yes, your nova-computes would also need the code to understand to hit conductor to do the backport, which we must not have in Havana?

This also means that if you don’t want your computes on Icehouse yet, you must actually be using nova-conductor and not use_local=True for it. (I saw the patch go up to fix the objects use of conductor API… so I’m guessing you must be using local right now?)

So, I think an upgrade process could be:

1) Backport the ‘object backport’ code into Havana.
2) Set up *Icehouse* nova-conductor in your child cells and use_local=False on your nova-computes
3) Restart your nova-computes.
4) Update *all* nova-cells processes (in all cells) to Icehouse. You can keep use_local=False on these, but you’ll need that object conductor API patch.

At this point you’d have all nova-cells and all nova-conductors on Icehouse and everything else on Havana. If the Havana computes are able to talk to the Icehouse conductors, they should be able to backport any newer object versions. Same with nova-cells receiving older objects from nova-api. It should be able to backport them.

After this, you should be able to upgrade nova-api… and then probably upgrade your nova-computes on a cell-by-cell basis.

I don’t *think* nova-scheduler is getting objects yet, especially if you’re somehow magically able to get builds to work in what you tested so far. :) But if it is, you may find that you need to insert an upgrade of your nova-schedulers to Icehouse between steps 3 and 4 above…or maybe just after #4… so that it can backport objects, also.

I still doubt this will work 100%… but I dunno. :)  And I could be missing something… but… I wonder if that makes sense?

- Chris


On Apr 16, 2014, at 12:42 AM, Sam Morrison <sorrison at gmail.com> wrote:

> I’ve been playing with having an Icehouse API cell and a Havana compute cell to see how it goes and to plan how we upgrade to Icehouse.
> 
> Most things actually work out of the box, booting etc works which I would think is the hard one. 
> Unfortunately some of the simple ones fail, after some brief testing reboot, pause and unpause are affected.
> These require the object_backport() method of the conductor rpcapi that only came in Icehouse.
> 
> Error you get is below, I’m wondering if this method could be back ported to Havana to allow this to work?
> Anyone else been working in this area?
> 
> 
> Traceback (most recent call last):
> File "/opt/nova/nova/openstack/common/rpc/amqp.py", line 461, in _process_data
>  **args)
> File "/opt/nova/nova/openstack/common/rpc/dispatcher.py", line 172, in dispatch
>  result = getattr(proxyobj, method)(ctxt, **kwargs)
> File "/opt/nova/nova/cells/rpc_driver.py", line 184, in process_message
>     message = self.msg_runner.message_from_json(message)
> File "/opt/nova/nova/cells/messaging.py", line 1553, in message_from_json
>  message_dict['ctxt'], v)
> File "/opt/nova/nova/objects/base.py", line 566, in deserialize_entity
>  entity = self._process_object(context, entity)
> File "/opt/nova/nova/objects/base.py", line 536, in _process_object
>   e.kwargs['supported'])
> File "/opt/nova/nova/conductor/api.py", line 331, in object_backport
>   return self._manager.object_backport(context, objinst, target_version)
> File "/opt/nova/nova/conductor/rpcapi.py", line 502, in object_backport
>   target_version=target_version)
> File "/opt/nova/nova/rpcclient.py", line 85, in call
>   return self._invoke(self.proxy.call, ctxt, method, **kwargs)
> File "/opt/nova/nova/rpcclient.py", line 63, in _invoke
>  return cast_or_call(ctxt, msg, **self.kwargs)
> File "/opt/nova/nova/openstack/common/rpc/proxy.py", line 126, in call
>  result = rpc.call(context, real_topic, msg, timeout)
> File "/opt/nova/nova/openstack/common/rpc/__init__.py", line 139, in call
>  return _get_impl().call(CONF, context, topic, msg, timeout)
> File "/opt/nova/nova/openstack/common/rpc/impl_kombu.py", line 824, in call
>  rpc_amqp.get_connection_pool(conf, Connection))
> File "/opt/nova/nova/openstack/common/rpc/amqp.py", line 574, in call
>  rv = list(rv)
> File "/opt/nova/nova/openstack/common/rpc/amqp.py", line 539, in __iter__
>  raise result
> RemoteError: Remote error: UnsupportedRpcVersion Specified RPC version, 1.62, not supported by this endpoint.
> 
> 
> (also note that this is hard coded to use conductor so if you don’t use conductor you’ll just get an RPC timeout.)
>   I think this is a bug but not my first concern.
> 
> 
> 
> 
> Thanks,
> Sam
> 
> 
> 
> _______________________________________________
> Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
> Post to     : openstack at lists.openstack.org
> Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack





More information about the Openstack mailing list