[Starlingx-discuss] fix solution proposal for LP1826047

Ngo, Tee Tee.Ngo at windriver.com
Wed Jun 5 16:02:34 UTC 2019


Hi,

I think the likely reason you got the OrphanedObjectError exception is because you were trying to save new app state to the database without a context. Other observations:
  - Checking if kubernetes is enabled is unnecessary. Kubernetes is always enabled in StarlingX.
  - By default, enabled logging levels are INFO and higher
  - Currently only helm chart based apps can be managed via system application commands.
  - The rpc_app name is not suitable as the app object did not come from RPC call.

Tee

From: Chen, Haochuan Z [mailto:haochuan.z.chen at intel.com]
Sent: June-05-19 9:29 AM
To: Ngo, Tee; Bailey, Henry Albert (Al); starlingx-discuss at lists.starlingx.io
Subject: fix solution proposal for LP1826047

Hi Ngo & Bailey

Today I add these lines in stx-config/sysinv/sysinv/sysinv/sysinv/conductor/kube_app.py, function __init__
        system = dbapi.isystem_get_one()
        if system.capabilities.get('kubernetes_enabled', False):
            LOG.error("kubernetes_enabled")
            for rpc_app in dbapi.kube_app_get_all():
                app = AppOperator.Application(rpc_app,
                    rpc_app.get('name') in self._helm.get_helm_applications())
                op = ""
                if app.status == constants.APP_APPLY_IN_PROGRESS:
                     op = constants.APP_APPLY_OP
                elif app.status == constants.APP_UPLOAD_IN_PROGRESS:
                     op = constants.APP_UPLOAD_OP
                elif app.status == constants.APP_REMOVE_IN_PROGRESS:
                     op = constants.APP_REMOVE_OP

                if op:
                    self._abort_operation(app, op)
                    LOG.info("reset %s to %s failed" % (app.name, op))

But it will fail with
2019-06-05 07:54:11.549 1987918 WARNING ceph_client [-] skip checking server certificate
2019-06-05 07:54:12.055 1987918 ERROR sysinv.conductor.kube_app [-] kubernetes_enabled
2019-06-05 07:54:12.062 1987918 ERROR sysinv.openstack.common.threadgroup [-] Cannot call save on orphaned KubeApp object
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup Traceback (most recent call last):
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/openstack/common/threadgroup.py", line 117, in wait
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     x.wait()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/openstack/common/threadgroup.py", line 49, in wait
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     return self.thread.wait()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib/python2.7/site-packages/eventlet/greenthread.py", line 175, in wait
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     return self._exit_event.wait()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib/python2.7/site-packages/eventlet/event.py", line 121, in wait
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     return hubs.get_hub().switch()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib/python2.7/site-packages/eventlet/hubs/hub.py", line 294, in switch
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     return self.greenlet.switch()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib/python2.7/site-packages/eventlet/greenthread.py", line 214, in main
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     result = function(*args, **kwargs)
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/openstack/common/service.py", line 450, in run_service
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     service.start()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/manager.py", line 179, in start
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     self._start()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/manager.py", line 205, in _start
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     self._app = kube_app.AppOperator(self.dbapi)
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/kube_app.py", line 157, in __init__
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     self._abort_operation(app, op)
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/kube_app.py", line 198, in _abort_operation
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     progress)
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/kube_app.py", line 189, in _update_app_status
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     app.update_status(new_status, new_progress)
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/conductor/kube_app.py", line 1415, in update_status
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     self._kube_app.save()
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup   File "/usr/lib64/python2.7/site-packages/sysinv/objects/base.py", line 128, in wrapper
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup     objtype=self.obj_name())
2019-06-05 07:54:12.062 1987918 TRACE sysinv.openstack.common.threadgroup OrphanedObjectError: Cannot call save on orphaned KubeApp object

Any idea about it, or whether this solution is feasible or not.
Now I work on perform_apply_abort, tomorrow I will update to you.

And for sysinv-api exit, it should doesn't matter. As sysinv-conductor takes the task to make application apply and status update in database, sysinv-api just polling database with application-list

BR!

Martin, Chen
SSP, Software Engineer
021-61164330

From: Ngo, Tee [mailto:Tee.Ngo at windriver.com]
Sent: Tuesday, June 4, 2019 9:27 PM
To: Bailey, Henry Albert (Al) <Al.Bailey at windriver.com>; Chen, Haochuan Z <haochuan.z.chen at intel.com>; starlingx-discuss at lists.starlingx.io
Subject: RE: fix solution proposal for LP1826047

It should be a combination of 2 solutions as solution #2 provides the option to bail while sysinv processes are running

a)      application thread stalled (e.g. during the cleanup of (test) mariadb pods/stx-openstack namespace issue seen in the past and the system became sluggish)

b)      client simply wants to abort the operation

Solution #2 is more involved than just updating the app state in the database.

Tee
From: Bailey, Henry Albert (Al) [mailto:Al.Bailey at windriver.com]
Sent: June-04-19 8:52 AM
To: Chen, Haochuan Z; starlingx-discuss at lists.starlingx.io<mailto:starlingx-discuss at lists.starlingx.io>
Subject: Re: [Starlingx-discuss] fix solution proposal for LP1826047

Solution 1 sounds like how Openstack Heat handles an abnormal termination of the heat-engine (how it needs to properly clean up its stack locks)
Solution 2 is similar to what I have seen for nova and cinder CLI options.

Personally, I like option 1.

Al

From: Chen, Haochuan Z [mailto:haochuan.z.chen at intel.com]
Sent: Tuesday, June 04, 2019 1:28 AM
To: starlingx-discuss at lists.starlingx.io<mailto:starlingx-discuss at lists.starlingx.io>
Subject: [Starlingx-discuss] fix solution proposal for LP1826047

Hi

I am check this launch pad issue.  This issue is failed, when system application apply(retrieving docker image), sysinv-api exit unexpected. When service manager re-launch sysinv-api again, application status is in applying status.
So application could not be removed. There are two solutions.

Solution 1, when sysinv-api or sysinv-conductor launch, in __init__ function, check application status in database, if status is "uploading", "applying" or "removing", change the status to "upload-failed", "apply-failed" or "removed-failed"

Solution 2, add perform-abort action for upload or apply. Use a flag to quickly exit and upload and apply action, and set database to "upload-failed" or "apply-failed".

https://bugs.launchpad.net/starlingx/+bug/1826047

Wait for brain-storming.

Thanks!

Martin, Chen
SSP, Software Engineer
021-61164330

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.starlingx.io/pipermail/starlingx-discuss/attachments/20190605/39af6073/attachment-0001.html>


More information about the Starlingx-discuss mailing list