Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ubuntu-22.04 fix: NoneType object has no attribute getcurrent() #954

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

farshan-dev
Copy link

related issue: #953

return id(greenlet.getcurrent())
else:
return id(gr)
except:
Copy link
Member

@4383 4383 Apr 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think of making id(gr) the default return value rather than try/except/if/else?

>>> gr = None
>>> id(gr)
140586328307168

Calling id(None) seems to always return something so... why not.

The idea behind these changes LGTM, I'd just suggest to refactor the logic to reduce the complexity of this function. Don't want to pick nit neither. Let me know if that sounds good for you.

https://docs.python.org/3/library/functions.html#id

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the other hand I wonder if by forcing the return an identifier even when gr is equal to None we could may find us hidding these symptoms. Symptoms which may be the manifestation of a more pernicious problem.

Please can you give us more details about the context where you face this problem?
Do you have a reproducer?

Copy link
Member

@4383 4383 Apr 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if greenlet.getcurrent doesn't exist and if gr is equal to None seems weird.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's more or less the scenario you propose to follow.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As this eventlet module (eventlet.green.thread) is the patched version of the Python thread module I'd argue that maybe, one option, could be to return the result of the native get_ident function. It will return the ‘thread identifier’ of the current thread. IMO, That would more meaningful that returning an integer computed from a None value.

https://docs.python.org/3/library/threading.html#threading.get_ident

But I still continue to think that the observed behavior is the symptom of a problem more deeply rooted.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for your review, after searching for root of this problem, I found its not related to this package, and its about bobcat keystone package that uses this package. and I tried to fix actual problem and eventlet package works fine.

for reproduce this package install openstack prereqs and set bobcat, then install keystone, and run su -s /bin/sh -c "keystone-manage db_sync", in ubuntu 22.04, you can see error.
thank you again 🙌

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your feedback. So, if you agree with abandoning this proposal I think we can close this github pull request and its associated github issue. Do you agree?

Copy link

codecov bot commented Apr 4, 2024

Codecov Report

Attention: Patch coverage is 80.00000% with 1 lines in your changes are missing coverage. Please review.

Project coverage is 56%. Comparing base (c22b896) to head (62f1e79).

Files Patch % Lines
eventlet/green/thread.py 80% 1 Missing ⚠️
Additional details and impacted files
@@          Coverage Diff          @@
##           master   #954   +/-   ##
=====================================
- Coverage      56%    56%   -1%     
=====================================
  Files          89     89           
  Lines        9767   9770    +3     
  Branches     1819   1819           
=====================================
- Hits         5477   5476    -1     
- Misses       3920   3923    +3     
- Partials      370    371    +1     
Flag Coverage Δ
ipv6 23% <40%> (+<1%) ⬆️
py310asyncio 52% <80%> (-1%) ⬇️
py310epolls 53% <80%> (-1%) ⬇️
py310poll 53% <80%> (-1%) ⬇️
py310selects 53% <80%> (-1%) ⬇️
py311asyncio 52% <80%> (-1%) ⬇️
py311epolls 53% <80%> (-1%) ⬇️
py312asyncio 50% <80%> (-1%) ⬇️
py312epolls 51% <80%> (-1%) ⬇️
py37asyncio 50% <80%> (+<1%) ⬆️
py37epolls 51% <80%> (-1%) ⬇️
py38asyncio 51% <80%> (-1%) ⬇️
py38epolls 53% <80%> (-1%) ⬇️
py38openssl 51% <80%> (-1%) ⬇️
py38poll 53% <80%> (-1%) ⬇️
py38selects 53% <80%> (+<1%) ⬆️
py39asyncio 51% <80%> (-1%) ⬇️
py39dnspython1 51% <80%> (-1%) ⬇️
py39epolls 53% <80%> (-1%) ⬇️
py39poll 53% <80%> (-1%) ⬇️
py39selects 52% <80%> (-1%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants