)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"699bd6327fbe364a0f7c620e6b9b5b401a330b68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"42878c2b_cbb5dcd5","updated":"2023-12-05 16:26:48.000000000","message":"@Clark: FYI I integrated your previous remarks into the latest patch set I submitted. However, I, for some of them, put updates in different sections than where you made your comments. I was thinking that they would be better contextualized where I have put them. Thanks.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4fa41141_c355d7b4","updated":"2023-12-08 18:59:06.000000000","message":"Thanks for collecting this and preparing this doc","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"fcedbcd0633baecfa0c3fdd85326b944a84b4fda","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a335347e_eb46d9a9","updated":"2023-12-05 17:37:33.000000000","message":"I\u0027ll note that generally, the Ironic-Python-Agent project is a good candidate as a pilot for a migration. It uses and relies on eventlet heavily, but has limited inter-openstack dependencies and co-installed dependencies. In general, the Ironic community is onboard to having IPA be a pilot project for this if it\u0027s useful (realistically; it may be too simple -- IPA may be an easy enough case just to completely rip eventlet out of without a migration).","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"70afc048_35ff3a62","in_reply_to":"23c770da_4a714d3a","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c4ca734c5e55fd8c3792c6c239a0fba4b16b8aa6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"23c770da_4a714d3a","in_reply_to":"a335347e_eb46d9a9","updated":"2023-12-06 15:07:08.000000000","message":"Thanks for suggesting this. I added your comment into the tracking wiki. In can retrieve it in the right section (medium terms solution / identifying easy deliverables).","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"91f9403a4876dd63e232e15801302aca10a49169","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"51b2d635_688ba400","updated":"2023-12-06 16:55:43.000000000","message":"- WIP done.\n- sphinx errors fixed\nI think this proposal is now ready for reviews.\n\nI\u0027m now gonna go opening a discussion on the eventlet repo and I\u0027m gonna go contact the active maintainer by sending him a private email to raise his attention.\n\nStarting from now I\u0027ll start to track activity of this topic through the dedicated wiki gave in this proposal.\n\nPlease do not hesitate to ask question and comments, I\u0027ll try to answer them ASAP.","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2421d8610058e87fc90c5d97ae6caeeda013238d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"fc6224d7_d883c8d8","updated":"2023-12-08 13:11:51.000000000","message":"I just submitted a new issue to open the discussion with the eventlet maintainers, if you are interested in becoming an eventlet maintainer, please raise your hands and let us know there \u003d\u003e https://github.com/eventlet/eventlet/issues/824","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"267f2f1615efc38ad7ca93707b090072fe169a07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b7d6cfd1_8bff17d1","updated":"2023-12-08 20:12:15.000000000","message":"Just a thought inline. Overall I agree in concept but will leave the technical details to those more familiar with async programming in python.","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"4d0e8b596e3f1bbaa582bcd99d638fe887126027","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1847efdc_435e6f3d","updated":"2023-12-08 15:31:36.000000000","message":"Just contacted the main eventlet maintainers by sending them a direct email.","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5046f680_0e307ac8","updated":"2023-12-22 08:59:01.000000000","message":"IMO it is impossible to properly review this document when the number of open comments is even larger than the not-so-small-either doc itself.\n\nI tried to clean up a bit by marking things as resolved and asking about others, please feel free to unresolve comments that I misjudged.\n\nAdding another question to the mix: Given that this can only be moved from proposed to accepted at the beginning of the next cycle, and also that significant progress is already happening at least on the eventlet front, would we still want to merge this proposal soonish as a point-in-time document and then possibly amend later before/while accepting? Or keep updating this review with the latest developments until the goal is essentially ready to be accepted right away?","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"fe05894e1f66cc94acce308a081ef0bfa00a4d9d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"515df26e_a3dfed36","in_reply_to":"5046f680_0e307ac8","updated":"2023-12-22 13:25:14.000000000","message":"Thanks for moving previous comment to resolved.\n\nIMO it could be moved to accepted starting right now and then updated later to match the evolution of things. Indeed, at this point, the short terms, is already, almost done. Some discussion about the middle terms has been already started on the eventlet side. Maybe we could add an effective date to highlight the fact that it would be started at the beginning of the next cycle.\n\nElse, I think we could amend the middle terms and the long terms plans along the way. That will let\u0027s time to see how things happens and that will let\u0027s time to imagine migration plan for deliverables like nova (see Sean\u0027s comments).\n\nThougths?","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"73e0c0e38ee2201ea8466467b0cded75ddf969a3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6c764386_b5e55ca0","in_reply_to":"515df26e_a3dfed36","updated":"2023-12-22 16:02:09.000000000","message":"I did another round of triage to resolve outdated comments.\nNormally remaining discussion are all still legit","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"80923119_d09c8af9","in_reply_to":"6c764386_b5e55ca0","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"af661229b76a2428b2bcf63b173637666cc120bb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"3b0cd8d9_4dc55183","updated":"2023-12-22 15:53:22.000000000","message":"@Sean: I\u0027ll address your comments early in 2024. I\u0027m on PTO during the two next weeks, so I won\u0027t be online, and I won\u0027t update this patch during this period.\n\nI need more reflexion about your proposal, in order to draft something clear.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ec3ac6ae11399edca47f76170f8749329f9d9708","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2ebfbe94_b0b29397","updated":"2023-12-26 15:23:30.000000000","message":"Great work Herve to get this effort started. Although i understand it isn\u0027t possible to lay out all the details of the migration here, it would really help if we get a document lining out a step by step procedure that would make the task of every service migration easier. Thanks!","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e542931cf578b3ef5f763d41dadf1267c1805a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d3dc6143_db0a6842","updated":"2024-01-11 17:29:57.000000000","message":"I\u0027m definitely concerned with everything past the \"short term\" section and am definitely not going to be RC+2 until we\u0027ve had a much more thorough conversation about this in a higher-bandwidth forum. I\u0027m fully on board with \"we have to do something\" but I\u0027m not sure moving to a different async model is the best for us at this point in our lifecycle. I\u0027m *definitely* concerned that we\u0027ll head down this path and never finish (like many of our much smaller migrations in the past) leaving us in a potentially worse situation than just maintaining another library and/or moving to native threads...","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"3c03c38c_088d498e","updated":"2024-01-10 19:49:57.000000000","message":"Thanks, just a few nits, which not require new patch I think","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"ee539101_7f12bac0","in_reply_to":"3b0cd8d9_4dc55183","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"463e29bde1a016f0a8723f43a6a9633c5ec1120c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"cced458c_5ae80448","updated":"2024-03-11 09:36:05.000000000","message":"Hello, any updates?","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"649dc527fed41753cf9796bacde835786814b793","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"75f0191c_db55e591","updated":"2024-03-29 08:17:14.000000000","message":"Honestly, I don\u0027t know what to vote here, because I don\u0027t know whether asyncio is the best option for our usage. I think the usecases can be different between services.\n\nAlso, I\u0027m a bit afraid of the performance, so I want to make sure that if we accept this goal, it should be only some opt-in modification, as we would want our operators to test with their environments the change and make sure they are OK with it.\n\nCould you maybe explain in the goal the differences in between asyncio and some other libraries, and maybe also explain how a project could move from eventlet to asyncio ?","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"d57fe942aa6424f0890928fa4e88c18b27e1d854","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"c5fae398_374ae706","updated":"2024-03-06 18:43:45.000000000","message":"I read through the goal in it\u0027s entirety again today and it looks good, let\u0027s fill up our minds with positive energy and steam ahead!","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"726efa0dc7e8a65c312d1d26ad0466f50401c5ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"c7358d77_381d8cbd","updated":"2024-02-09 15:31:00.000000000","message":"Some comments, but I think it\u0027s better to merge a plan and start moving than it is for us to make the plan perfect before landing it.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2acf46f2535afca573189ca60c2779d1c1ae4729","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"86970ee9_16ed22f6","in_reply_to":"75f0191c_db55e591","updated":"2024-03-29 10:44:01.000000000","message":"Hello Sylvain,\n\nIf you read my proposal, you already know my position concerning why I propose using Asyncio. Do not forgot that, the goal is not to move every pieces of Openstack over Asyncio. The goal is to replace the existing usages of Eventlet by Asyncio. \n\nIf you read my proposal, you already seen my position concerning alternatives like using threading, or moving to gevent, greenlet, etc... To be clear, this is a complex topic, I won\u0027t propose such alternative that, in my opinion, won\u0027t decomplexify the problem and would possibly lead to the same problem in 3 years.\n\nHowever, I\u0027m not married with my proposal. I\u0027m not married with the solution I propose. I may have miss points concerning alternatives. My sole goal is to find a solution to a critical problem we currently face on Openstack. We will still face the same problem in several months if nothing is made on Openstack.\n\nI don\u0027t think a perfect solution exists. I proposes one, that, in my opinion, looks realistic and sensible. If people think that that\u0027s not the right solution, then I invite them to propose  alternatives. I\u0027ll be happy to discuss about proposed alternatives. I\u0027ll happy if we found a solution even if that\u0027s not the one I proposed. Finding a solution is my sole motivation. \n\nDo not forget that if nothing is made, the same Eventlet problem will reappear in the coming October https://devguide.python.org/versions/. Eventlet do not have the resources to remains healthy.\n\nT.C members requested a champion to propose a solution. That\u0027s what I did. My employer understand this problem, and so allow me spend time on it. My employer, for now, sponsor this topic. But, if the status quo settles, at some point I\u0027ll surely have to return to my usual affairs, leaving, against my will, Eventlet to its destiny...\n\nIf you read my proposal, you already seen I proposed some way to transition libraries and services from Eventlet and Asyncio. I proposed drafts of design based on facade pattern. I  proposed examples. These examples are based on real life use cases which are successful implementation of the proposed pattern.\n\nI you read my proposal, you already seen that we have made significant steps forward concerning this topic. We revived Eventlet. We fixed support of Python 3.12 in Eventlet. We started to introduce support of Asyncio in Eventlet. And the list goes on.\n\nI understand this is a difficult choice. I understand skeptical positions. I\u0027m 100% open to discussion but I need a bit more engagement of my Openstack fellows to make things happening. Without that the snake bites his tails. Given the complexity of this topic, I can\u0027t come with a 100% detailed solution without spending months and months designing it alone. If it\u0027s to throw everything in the trash my employer won\u0027t support it. Leaving me back to my usual affairs.\n\nConcerning the performance, that\u0027s understandable and I\u0027m also interested by this kind of evaluation. Dan and Sean already expressed such kind of requests. I\u0027m in with you. But again, we need to formalize a bit more our position and our expectations. Doing such performance evaluation would require several adaption and works to make it doable. Without a bit more of implication we won\u0027t be able to reach that point.\n\nHere the question is not to love or not love Eventlet. That\u0027s not my fight. Here is not the right place to proclaim to be hater or lover of Eventlet neither. I leave haters and lovers to defend their opinions elsewhere. \n\nEventlet is broken. Eventlet is not sustainable. We need to find a solution. That\u0027s my fight.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8a2afe367198f4064078b6e0dcd2894a7bdac3e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7eae1907_3d7ce58b","in_reply_to":"86970ee9_16ed22f6","updated":"2024-03-29 12:51:15.000000000","message":"Getting engaged doesn\u0027t necessarily mean going all the way to marriage. People who commit do so with the aim of planning a common future. No one really knows what tomorrow will bring. If things go badly, they can leave him. one of them will keep the cat, and the other will keep the TV. All this between consenting adults and without earthquake. On the other hand, once the marriage is pronounced, only divorce will be able to separate them. Lawyers\u0027 turn.\n\nLet\u0027s do plan future together.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"45a2d48fa9ea8ab469c3f79985354269779dc269","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"3263d319_2e03fdab","updated":"2024-04-04 13:25:15.000000000","message":"@slawek: Thanks for your comments. I\u0027m on PTO for the next coming 2 weeks, I\u0027ll address your comments when I\u0027m back (after April 22).","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e4846bc676f9f760a45f8a491e4176ee5d704135","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"38a65bd8_ecbd6288","updated":"2024-04-12 15:06:09.000000000","message":"Note that this comment is meant to reflect PTG discussions and may not reflect my personal opinion :D.\n\nAt the PTG yesterday, this topic came up. \n\nIt was very clear we are unlikely to get consensus on explicitly moving from eventlet to asyncio until we have a working example migration. Also, some contributors suggested that perhaps projects may want to choose different threading/async models based on the use case for those projects.\n\nWith this in mind, the discussion shifted instead to enablement -- what can we do to enable individual projects to perform the migration. After discussion, consensus at the PTG semeed to be that we could likely pass a goal quickly around removing eventlet dependencies from shared openstack components (e.g. oslo* and the like) to permit individual projects to then migrate and prove out the concept.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"db2decef32925241c7cc6bfc06ab0c78f190e784","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"2f2fac4f_7252fa62","in_reply_to":"38a65bd8_ecbd6288","updated":"2024-04-23 13:53:17.000000000","message":"\u003e Note that this comment is meant to reflect PTG discussions and may not reflect my personal opinion :D.\n\nThanks Jay for reporting this discussion. My next sentences should be seen as replies for all the persons present during this PTG session and who contributed to this discussion. My following sentences are global responses to the discussion which originated your comment.\n\n\u003e At the PTG yesterday, this topic came up. \n\u003e \n\u003e It was very clear we are unlikely to get consensus on explicitly moving from eventlet to asyncio until we have a working example migration. Also, some contributors suggested that perhaps projects may want to choose different threading/async models based on the use case for those projects.\n\nAs Sean said in his latest comments, team are free to follow their own path. To quote Sean:\n\n\u003e Even if the goal is accepted then each project team need to design and agree a specific proposal for how they will implement the goal.\n\nWith the approach proposed here every pieces of the stack have a single, unambiguous, authoritative representation within the stack. With the approach proposed here, each shared library which propose network I/O, would propose sync and async implementation of their logics and features. Individual projects would have the choice to use the paradigm that best fit their choices. The proposed solution leaves to services the choice to implement either a threading design or an asyncio design. Individual projects are free to choose their weapons to fight a palpable problem, Eventlet.\n\nHowever, before mixing solutions, ones should consider the following points:\n\n1. Mixing solutions, de facto, lead to multiple proposal, multiple guidance, multiple scenario. Who is volunteer? As Dan pointed it out rightly, such migration will consume many of our resources, do we really want to introduce more complexity and so more resource consumption over it? If an alternative solution exists ones should also provide a guide and support for it.\n\n2. Mixing solutions introduce blur concerning the importance we should give to asyncio. If we are not clear about asyncio, it introduce lot of uncertainty concerning the way shared libraries should behave in the face of concurrent multi tasking. Who will be responsible for the cooperative concurrent multi tasking (the concurrency model)? Services? In the proposed solution, I think this responsibility is clear and explicit. Libraries are responsible for it, and individual projects are explicitly tagged as relying on concurrency over these libraries calls. If asyncio is not adopted as a reference architecture, at least at the shared libraries level, and as Eventlet is currently used as an optional, pluggable backend that allows swapping out blocking APIs for an event loop, transparently, without changing any code, then, all individual projects - services - would be responsible for such concurrency. All libraries will be built as synchronous and over sequential code. Hence, all libraries will be tests in this way, synchronous and sequential. Services will be responsible for ensuring their concurrency is well compatible with the libs they use. In such world, libraries would be agnostic to concurrency, this is a prerequisite to ensure that shared libraries remains compatible to all the possible models usable by individual users - services.\n\n\u003e \n\u003e With this in mind, the discussion shifted instead to enablement -- what can we do to enable individual projects to perform the migration. After discussion, consensus at the PTG semeed to be that we could likely pass a goal quickly around removing eventlet dependencies from shared openstack components (e.g. oslo* and the like) to permit individual projects to then migrate and prove out the concept.\n\nAs I said in the parallel goal you proposed (https://review.opendev.org/c/openstack/governance/+/916546), most of the Eventlet occurences we can find in shared libraries are fixes made to fix side effects introduced by usages of Eventlet in the individual projects side. On services side. If we simply remove Eventlet dependencies from shared libraries without planing nothing more than that, we will simply reintroduce lot of bugs. I don\u0027t think that this is something what we want. If we remove these usages, individual projects should be responsible for fixing these side effects on their side. In this case, indeed, it will reduce a bit our usage of Eventlet, and then it will help to ensure that shared libraries are usable by projects which no longer wish to run eventlet or monkey_patch the\nstdlib, although almost all these Eventlet occurence on shared libraries are already optional and so non intrusive for individual projects which do not want to use Eventlet. I\u0027m not certain to see how doing this could help to prove out the concept. Please, can you share more details with us, it would help us see more clearly about the idea behind your proposal?\n\nTo finish, let me quote the TC vPTG 2024.2 Summary / Notes (\nhttps://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/message/MHP3MMS7Z6DJK7EAXAIDWDK3DU4ZXELK/):\n\n\u003e Dan indicated he had not voted in favor of the change, and didn\u0027t plan to until he felt it had a reasonable likelihood to succeed in OpenStack -- early tests of this functionality failed. \n\nFixing oslo.log should unlock this problem. Once fixed, early tests should pass and we will be able to get devstack migrated (https://review.opendev.org/c/openstack/devstack/+/914108).\n\n\u003e Jay indicated that his primary concern was elimination of eventlet; the new maintainer group does not plan on keeping eventlet alive forever. \n\nTrue. As I said in my previous reply to Sylvain, for now we maintain Eventlet because some of our employers support the solving of this problem as well as the efforts to go through the migration, but at some point, and without a more global engagement, we will have to go back to business as usual and we will have to abruptly abandon Eventlet, bringing us all back to our starting point, a broken Eventlet. For now we have the opportunity to design something that fit our needs. We can decide of our future. To decide is to give up. Do not let chance to decide. \n\n\u003e Bauzas pointed out that this is more than a goal -- we need dedicated effort in order to execute on this idea. \n\nThe ball is already in your camp. What do you propose?\n\n\u003e Sean Mooney indicated that we need a non-wsgi service to migrate as an example.\n\nI think this is a good idea. I also think that all the latest comments from Sean are really interesting, constructive and relevant. I encourage everybody to take a look to them, and to react directly on them. I plan to address these comments in the coming days.\n\nThanks everyone for your time. Much appreciated!","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"63cb51f7ad34d60e482a5b78913707611a9204fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"b930bf5e_f40ab3cc","updated":"2024-06-09 17:17:45.000000000","message":"Hi hervé.\nThanks a lot for this document, that is very much well written and complete. In many ways it\u0027s a good plan. Though what I don\u0027t like is the part where you expect operators to select drivers. How would an operator know better than the upstream maintainer what driver to use? It doesn\u0027t make sense to me. To me, it\u0027s up to OpenStack upstream to decide, and in no way, the transition away from Eventlet should exposed to our users. It should \"just work\"© as per our test suite, and that\u0027s it... When a project is supposed to be eventlet-free ready, OpenStack upstream must be able to make the switch. If such a decision has to be made depending on the Python interpreter version, then it\u0027s not hard to find out within the code of OpenStack itself what to do.\n\nYour thoughts?","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ed39df56c29def77bf88ac068e7fc53c9237cb10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"e7ba23d0_cfa861ca","updated":"2024-06-14 13:30:11.000000000","message":"I\u0027m currently preparing a new version, with again significant changes, so please don\u0027t spend time on this transient version.\n\nI\u0027ll propose a new patch set in the coming days.","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ed39df56c29def77bf88ac068e7fc53c9237cb10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"f543a50f_6ef6c2ca","in_reply_to":"b930bf5e_f40ab3cc","updated":"2024-06-14 13:30:11.000000000","message":"Thank you Thomas for your kind comment.\nIndeed, I think you are right, using those drivers should be at the initiative of services, if services decide to use them.","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"01e2106966538b224d3d115a08b33d6cd834f334","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"474ecb7c_edc42433","in_reply_to":"b930bf5e_f40ab3cc","updated":"2024-06-10 11:32:25.000000000","message":"for upgrade reasons we likely will need at least 1 slurp release where we supprot eventlet and non eventlet backends. or eventlet with asyncio vs eventlet with epool or whatever the default event loop is.\n\nthe default backedn woudl be selected by upstream and upstream would change the default to the non eventlet version but perhaps not in the same release that the supprot for a non eventlet verison is introduced. i.e. we might need to leave the alternative implementation bake for cycle or two before making it the actual default that we ship with. it really depend on the perfomance and our confidence in the replacements. \n\nso while i agree when upstream moves operators should not have to choose or be aware of the migration. while upstream si still eveluating if the replacement is production ready we shoudl have the option to opt in so we can opt in in ci and operators can elect to test it early.\n\nopting in based on interperter version is an intersteing idea.\ni.e. if python \u003e3.12 use non eventlet version.\nthe main proablem with that is we do not have a functional non eventlet backedn yet for any of the service usign eventlet today but i could see that being an option if eventlet does not support that version fo python.","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"924a3b10b86f5a5f266dcd69b1f77315cb047862","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"3cbdf34e_2b57a9fa","updated":"2024-07-22 20:10:17.000000000","message":"Thank you Herve, and to everyone that has spent time taking a look and providing feedback here, on the mailing list and elsewhere. \n\nI\u0027m merging this proposal now; but as the comments indicate, there are a lot of suggestions for a follow up. \n\nAs @herveberaud.pro@gmail.com mentioned in review comments, he\u0027ll be submitting a follow up to address nitpicks/grammar. \nHowever, for comments that go beyond these, requesting additional references/use cases to be mentioned, and for a structure to the goal delivery as outlined in https://governance.openstack.org/tc/goals ; I\u0027m hoping these can be done as follow ups too. Hopefully, we\u0027ll be able to qualify the problem to future maintainers in as succinct a way as feasible so we have more people willing to participate in the effort. \n\nHervé: the next step is for someone on the TC to move the goal document to the \"selected\" folder. I don\u0027t think this will happen without the follow ups . I\u0027ll be happy to work with you on this; let us converse here or on the ML as you prefer.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"a30487678e688271e38c038b6d3dbf1dc7a05c1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"74a10cdf_ab3a42b1","updated":"2024-07-16 08:38:38.000000000","message":"Thanks Riccardo for the typos chasing. I\u0027ll fix all the reported typos (yours and the ones from Goutham) in a follow up patch if this proposal is merged.\nI don\u0027t want to polluate the next possible patch sets with side things, else reviews will be more difficult. I prefer to reserve the possible coming patch sets  on discussions about the content rather than on the form.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"10dc923f_e1a9aead","updated":"2024-07-09 05:42:24.000000000","message":"This proposal is written painstakingly well; thank you for the countless hours of research that must have gone into it to explain the problem to the wider OpenStack audience. I think your latest direction to clarify that we\u0027re not chasing a single threading alternative makes total sense because you also highlight the various patterns of eventlet usage that need to be modified differently. \n\nI would like to suggest forming a Pop Up Team [1] with representatives from each OpenStack service that can help make progress on this enormous mission. It\u0027d make sense for teams to discuss this item at weekly meetings and PTGs to make the incremental progress that you\u0027ve spelled out - and you\u0027ll be able to gather the collective status when the pop up team meets.\n\nMy comments inline are purely editorial; and there\u0027s no need to address any of it unless you\u0027re compelled. You can be sure there\u0027ll be more editorializing if you went through a massive document like this.\n\ntc-members: if you have objections to this proposal; please express it here by 15th July 2024. This deadline may seem arbitrary; but, since we\u0027re over 7 months of iterations here to identify solutions to an unavoidable problem, we need to make a decision if we\u0027re going to accept this direction or find alternatives. \n\n[1] https://governance.openstack.org/tc/reference/popup-teams.html","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"3ef3220c_de031059","updated":"2024-07-22 10:25:40.000000000","message":"i strongly suspect  there whoudl have been more engagement if the documented was kept short and too the point. note i had to tried to find time to go thorugh this in detail again on 3 previous ocations and could nto due to the length and only found time now after forcing myself to do it before doing anything else this morning.\n\nwith that said since the over all intent is mostly ok form my prespective im +1 to keep this moving. this docuement however is ment ot be technial and forward looking not a history of why we used eventlet in openstack so i think much of it is not correct to include to the extent that it has been. context is imporant but too much context is harmful.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"58030e3e015f8b26e89b3ecb4ad97d252bbee1c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"3826cc67_4307e79a","in_reply_to":"02069142_930d7c51","updated":"2024-07-17 09:39:18.000000000","message":"ack, no problem","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"efaef6fdc4ae58f92bee2fdf060dc9b82413ee6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"02069142_930d7c51","in_reply_to":"043cc0ce_82153b07","updated":"2024-07-16 20:33:24.000000000","message":"Hey @herveberaud.pro@gmail.com: We chatted about this again in the TC meeting this week: https://meetings.opendev.org/meetings/tc/2024/tc.2024-07-16-18.00.log.html#l-120\n\nSome TC members are still looking; lets give them a few more days.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"d08cbe34790f3223750519b81cd3e57f275912d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"6ccd478e_a689f349","in_reply_to":"10dc923f_e1a9aead","updated":"2024-07-09 11:21:17.000000000","message":"At first glance, Pop Up Team seems to be a good idea.\nConcerning the nits and typos, I think we can fix them into a follow up patch once this one will be merged. If you do not mind, I prefer to reserve the possible new patch sets of this proposal to arguments rather than to grammar.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"924a3b10b86f5a5f266dcd69b1f77315cb047862","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"514219dd_ce886d73","in_reply_to":"3ef3220c_de031059","updated":"2024-07-22 20:10:17.000000000","message":"I agree with this sentiment. I think Herve has put in a lot of thought into this; and has collaborated with folks from across OpenStack and other projects.. there\u0027s certainly a lot of persuasive arguments in this proposal. \n\nI think this comment reflects what the TC discussed as well..\n\n@herveberaud.pro@gmail.com: After this merges; would you be willing to spend some time in writing this up as a document? Since we\u0027ve accepted the proposal, you don\u0027t need arguments to persuade the audience anymore. Removing these, we\u0027d be able to whittle this down considerably. \n\nIf you choose to go the pop up team route, you could maintain a wiki for transient information as necessary: https://governance.openstack.org/tc/reference/popup-teams.html","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2c13800d5c7139ce48c45135fad1e439a7cde66e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"043cc0ce_82153b07","in_reply_to":"6ccd478e_a689f349","updated":"2024-07-16 08:21:55.000000000","message":"@gouthampravi@gmail.com: The deadline is over, what is the next step?","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"}],"goals/proposed/migrate-eventlet-usages-to-asyncio.rst":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"726efa0dc7e8a65c312d1d26ad0466f50401c5ea","unresolved":true,"context_lines":[{"line_number":336,"context_line":"Firstly we would have to fix `the broken CI problems \u003chttps://github.com/eventlet/eventlet/actions\u003e`_"},{"line_number":337,"context_line":"and hence ensure that submitted patches (bug fixes, features, etc) could be"},{"line_number":338,"context_line":"also merged without being block by a failing CI. Development workflow should"},{"line_number":339,"context_line":"be secured first."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"Secondly, once gates would be fixed, it would be possible to fix the SSL issue"},{"line_number":342,"context_line":"and so to support Python 3.12. That would be possible by fixing"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3d56f6d3_60e96f8f","line":339,"updated":"2024-02-09 15:31:00.000000000","message":"This section + the portion below that indicates what is done/not done is confusing. Perhaps cut some of this portion? Lines 336-364 seem redundant at this point?","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"726efa0dc7e8a65c312d1d26ad0466f50401c5ea","unresolved":true,"context_lines":[{"line_number":417,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"At this stage, Eventlet could be considered as healthy and Openstack secured"},{"line_number":420,"context_line":"for the coming series."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"As our goal is to move to asyncio, and as Eventlet occupies an important place"},{"line_number":423,"context_line":"in Openstack, we would have to consider a couple of points:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"c997b866_6aa8b9ae","line":420,"updated":"2024-02-09 15:31:00.000000000","message":"We\u0027re already at this point today, yeah? Perhaps it\u0027s worthwhile to word the \"short term\" section in complete past tense about what we have done to secure the future. Frankly, having already completed that work lends even more credence to our knowledge that eventlet is a dead-end.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"86a12cd4fc50aaef4bb0dd0ced6ccdf06a3c2355","unresolved":true,"context_lines":[{"line_number":417,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"At this stage, Eventlet could be considered as healthy and Openstack secured"},{"line_number":420,"context_line":"for the coming series."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"As our goal is to move to asyncio, and as Eventlet occupies an important place"},{"line_number":423,"context_line":"in Openstack, we would have to consider a couple of points:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"54bb8107_aa716801","line":420,"in_reply_to":"c997b866_6aa8b9ae","updated":"2024-04-03 10:18:02.000000000","message":"+1","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"519392fad983d97b082110cbe9a95a3353b0127f","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"979db3f6_275b001a","line":429,"updated":"2024-03-21 23:58:13.000000000","message":"Is there an example of this configuration in the context of Openstack?","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9a4840181fffd7d351029af76ca02522e0a7a71f","unresolved":false,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3c3772b5_00ebd1e6","line":429,"in_reply_to":"22884341_624f37e9","updated":"2024-03-27 18:15:19.000000000","message":"Done","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"87fdfe268893185a742ab3b6aaae8d3d2e444318","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"f5ccae9e_1ccfb5e4","line":429,"in_reply_to":"462e4346_2b38f2a0","updated":"2024-03-25 08:18:56.000000000","message":"Yes, that have been created, and released since almost 2 months.\n\nI think we can say that we already terminated the short term milestone, and partially started many tasks of the middle term milestone.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6b8a657b8228a79645bf4df5c10f6c0aff8b43ae","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"c43cac34_8461b2a3","line":429,"in_reply_to":"5a075ee8_1c0a81a8","updated":"2024-03-25 13:01:52.000000000","message":"let try and chat about that at the ptg. im still trying to figure out how much upstream time ill have next cycle.\n\ni might see if i can do some kind fo poc between now and then but beyond that i cant commit to much more right now.\n\ni need to read the eventlet docs but i belive it would be possible to just modify the systemd service files generated by devstack to define EVENTLET_HUB\u003dasyncio contionally.\n\nif we followed the normal pattern we would have one global var\nGLOBAL_EVENTLET_HUB\u003depolls|asyncio|...\nwe woudl keep epolls as the default initally and over time could swap that to asyncio\neach devstack serivce should have a per service var which is actully used to generqate the systemd service file.\n\nNOVA_EVENTLET_HUB\u003d${NOVA_EVENTLET_HUB:-GLOBAL_EVENTLET_HUB}\n\nthat will enable us to opt into the asyncio hub per service and then eventually flip the global switch with the option to opt in/out.\n\nto move something like nova realistically we will need 2 implementations fo some\nfunctionality and need to detect the hub in use. the exact right way to do that(likely hiding some operations behid a fascade) is tbd but as long as we support using a hub other then asyncio we cant have any functionality that is only implemented for asyncio.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dc2fc991bbf2bf9e1da3312e45365d1b4abf1c6a","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"6e713645_1776f556","line":429,"in_reply_to":"5aa649c6_acd2bf4a","updated":"2024-03-25 15:10:56.000000000","message":"I pinged mnaser, who sounds like he might be game for some of it at least.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c63decb931a617a90455e91503ef8aad2aba19b6","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"f995b302_0a8d9a13","line":429,"in_reply_to":"6e713645_1776f556","updated":"2024-03-25 15:35:08.000000000","message":"Thank you Dan","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"7aa48b8731be7e89583fd1feb8e3cdc74dddf6a7","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"de91452b_c97a4c9b","line":429,"in_reply_to":"80e82420_2b161a27","updated":"2024-03-22 15:25:07.000000000","message":"@Miguel: You can find configuration examples in the official migration guide of Eventlet https://eventlet.readthedocs.io/en/latest/migration.html#migration-guide\n\nEither operators should export `EVENTLET_HUB\u003dasyncio` in their environments, hence forcing all Eventlet based process to use the asyncio hub.\n\nAlternatively, you can explicitly specify the asyncio hub at startup, before monkey patching or any other setup work:\n\n```\nimport eventlet.hubs\neventlet.hubs.use_hub(\"eventlet.hubs.asyncio\")\n```\n\nThat\u0027s pretty straightforward.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"28b4d22108c8bd3a44ab0e240a3bd9d46df69612","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"e21d5cb0_7b18b6bf","line":429,"in_reply_to":"8f07aad1_2c03d59f","updated":"2024-03-25 14:26:14.000000000","message":"@Sean: No problem, we can wait after the PTG, thanks for your PoC proposal. \n\nUnfortunately I won\u0027t be around during the PTG, so I won\u0027t be able to join the discussion. Feel free to make some linkages to your discussion in our tracking wiki https://wiki.openstack.org/wiki/Modernize_Openstack_Networking_Programming_Model\n\nAs the state of this proposal is still pending, I didn\u0027t yet created a storyboard as suggested in the community goal documentation [1]. I\u0027ll create a dedicated one, once I\u0027ll observe a significant advancement concerning the acceptance state of this proposal. For now we can continue to use the wiki, and then move to storyboard once this goal became more official.\n\n@Dan: You are right, switching the hub still requires the monkey patching. From a functional perspective, switching the hub shouldn\u0027t change things on the users side, other than allowing users to run asyncio and monkey patched code in the same process and in a combined way. Your code and the design of your deliverables would remains the same. But indeed, as you pointed, only the performances would be impacted by a hub switching.\n\nSo yes, having a real performance evaluation would be great. Do you want to manage that point?\n\nIf we decide to realize such performance evaluation, I think we have to propose repeatable methodology.\n\nI\u0027d at least suggest that such kind of performance evaluation should define which kind of Testing types we want to make/prioritize:\n- Load testing\n- Stress testing\n- Soak testing\n- Spike testing\n- Breakpoint testing\n\nIn the current use case, I think we mostly want to compare two systems to find which performs better.\n\nBut, if we also already have existing performance criteria we can also demonstrate that switching to the new hub meets performance criteria.\n\nWhich elements are you suggesting to evaluate?\n\n[1] https://governance.openstack.org/tc/goals/index.html","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5d8c0634589e6274ccfd6dd264484f5f6dab9259","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"80e82420_2b161a27","line":429,"in_reply_to":"979db3f6_275b001a","updated":"2024-03-22 14:55:26.000000000","message":"I think the general lack of engagement in current versions of this change has put a damper on willingness to prototype any of this. I personally will not be working on, or assigning GR-OSS resources, to this kind of prototyping until it looks like this is likely to merge.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"09ebfcfcf8c0ac92bc72a1e8199f229f493923d5","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"5aa649c6_acd2bf4a","line":429,"in_reply_to":"abb92082_8fc522f6","updated":"2024-03-25 14:51:57.000000000","message":"No problem.\n\nInvolving partners is a good idea.\n\nCan I let you init that discussion with partners? I think you well expressed the performance concerns, so I think you will translate that point to them more better than me.\n\nElse, let me know and I\u0027ll see if I can reach them through the mailing list.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"881cd25a41efc95c17aeb06bd8029bb3195e4546","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"8f07aad1_2c03d59f","line":429,"in_reply_to":"c43cac34_8461b2a3","updated":"2024-03-25 13:35:52.000000000","message":"Perhaps I\u0027m missing something, but switching the hubs still requires monkeypatching, right? Doesn\u0027t using asyncio as a hub mean we lose the ability to wake a thread on IO event and instead have to do some polling or something? It has been a long time since I dug into those details.\n\nHowever, I think before I\u0027m on board with something like that I\u0027ll want to see a real (non-devstack-based) performance evaluation, either by one operator switching a cluster over to that, or a dedicated test. I think it would be foolish to start moving our devstacks, claim that it\u0027s okay, and then start introducing code that chains us to that future (pun intended).","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8bb9c77afdcd1df44adedad5095aa5820d5b8369","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"462e4346_2b38f2a0","line":429,"in_reply_to":"de91452b_c97a4c9b","updated":"2024-03-22 20:45:42.000000000","message":"wait that has already been created and released?\n\ni was not expecting to see that much progres on that until next cycle.\n\ni guess we shoudl try enabling that in devstack and see what happens.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"00e2f2c66214a632c34b56771ff80dde563be3d3","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"abb92082_8fc522f6","line":429,"in_reply_to":"e21d5cb0_7b18b6bf","updated":"2024-03-25 14:36:46.000000000","message":"No, I don\u0027t think I\u0027m equipped to do what I think needs to be done for a performance evaluation. I think it will require some known loads and many nodes in typical configurations, especially if/when comparable to the alternative.\n\nPerhaps we can reach out to some of our operator partners that have preprod deployments to see if they can do an evaluation for us...","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"e9982d2a4325dfc2d2d03650f7bc79c9fd6fc544","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a075ee8_1c0a81a8","line":429,"in_reply_to":"f5ccae9e_1ccfb5e4","updated":"2024-03-25 09:38:38.000000000","message":"@Sean: Do you want to manage that devstack enabling?\n\nI think you are well far more familiar with devstack than me, you will produce a better integration.\n\nThis would be an opportunity to have our migration guide tested by someone else other than its designers. Your feedback would be welcome.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1cf015d418a7e662d05e21e560f8a44688770029","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"fdb53f2e_2b14fd36","line":429,"in_reply_to":"f995b302_0a8d9a13","updated":"2024-03-25 15:56:50.000000000","message":"one DNM canary https://review.opendev.org/c/openstack/devstack/+/914108\n\ndependign on what happens with that ill try and respin it into something more correct","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2238f2ae531ce11ff8e65ccc5c30edf4320f2a4c","unresolved":true,"context_lines":[{"line_number":426,"context_line":"   can\u0027t live together in the same process \u003chttps://github.com/eventlet/eventlet/issues/673#issuecomment-740429872\u003e`_."},{"line_number":427,"context_line":"   So, the migration should start by applying this configuration first."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"   Allowing running Eventlet and Asyncio in the same process will allow us a"},{"line_number":430,"context_line":"   gradual migration. A gradual migration would leave some room to team to"},{"line_number":431,"context_line":"   breath and to continue supporting the usual affairs of their deliverables."},{"line_number":432,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"22884341_624f37e9","line":429,"in_reply_to":"fdb53f2e_2b14fd36","updated":"2024-03-25 16:23:55.000000000","message":"Awesome, thank you Sean.","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"726efa0dc7e8a65c312d1d26ad0466f50401c5ea","unresolved":true,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"#. Identify deliverables who are not actively maintained and decide with the"},{"line_number":575,"context_line":"   TC to retire them. This is a crucial point to avoid falling in an infinite"},{"line_number":576,"context_line":"   loop of projects still relying on Eventlet and that could stuck this goal."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"   This kind of deliverable could force us to rollbacks all our previous"},{"line_number":579,"context_line":"   efforts as we did with the recent `oslo.db/sqlalchemy upgrade \u003chttps://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/Y4U2EHQYHB7DN5JSV2I7SJLXXVLW2QFF/#FMEIONXDKUKF3PXDULPFAVZ7WAGSTJIF\u003e`_."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fda7b27b_eb964403","line":576,"updated":"2024-02-09 15:31:00.000000000","message":"I think this is something perhaps worth removing. We (the TC) have policies around removing inactive projects already, and mentioning this here without any specific action (such as suggesting a hard-deadline or projects being marked inactive if they aren\u0027t migrated by a release).","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"#. Identify deliverables who are not actively maintained and decide with the"},{"line_number":575,"context_line":"   TC to retire them. This is a crucial point to avoid falling in an infinite"},{"line_number":576,"context_line":"   loop of projects still relying on Eventlet and that could stuck this goal."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"   This kind of deliverable could force us to rollbacks all our previous"},{"line_number":579,"context_line":"   efforts as we did with the recent `oslo.db/sqlalchemy upgrade \u003chttps://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/Y4U2EHQYHB7DN5JSV2I7SJLXXVLW2QFF/#FMEIONXDKUKF3PXDULPFAVZ7WAGSTJIF\u003e`_."}],"source_content_type":"text/x-rst","patch_set":16,"id":"fa75d6fb_df88f1f8","line":576,"in_reply_to":"fda7b27b_eb964403","updated":"2024-04-30 10:04:49.000000000","message":"Will drop it","commit_id":"bbaae17cf99a1eca1f59dc22aa9c2ddfaf3e8a3f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Here are the facts: Stop using Eventlet is not an option it is an"},{"line_number":195,"context_line":"obligation. Eventlet can\u0027t be removed abruptly. We need a replacement for"},{"line_number":196,"context_line":"Eventlet.**"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This proposal aim to make Eventlet work again on the short run."},{"line_number":199,"context_line":"Then incrementally abandon Eventlet in favor of Asyncio to keep Openstack"}],"source_content_type":"text/x-rst","patch_set":19,"id":"34a884a3_97d99e9d","line":196,"updated":"2024-04-08 16:45:35.000000000","message":"for what its worth removal of eventlet for many projects is effectivly a total rewrite\n\nits as invaise as the python 2 to python 3 change in many respect more so.\n\nlitrally rewriting in rust would be an equally valid approch to achiving the eventlet removal as rewritng in in asyncio or with one of the light weight asynico abstration lib (anyio) that backport the asysnio feature like task groups form python 3.11/3.12 to 3.8","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"987c37b47aed1b57b639b6ac9ed6b53a2dc28bf6","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Here are the facts: Stop using Eventlet is not an option it is an"},{"line_number":195,"context_line":"obligation. Eventlet can\u0027t be removed abruptly. We need a replacement for"},{"line_number":196,"context_line":"Eventlet.**"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This proposal aim to make Eventlet work again on the short run."},{"line_number":199,"context_line":"Then incrementally abandon Eventlet in favor of Asyncio to keep Openstack"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ac99cb89_c8f35178","line":196,"in_reply_to":"01300589_f2eb9077","updated":"2024-05-07 14:57:06.000000000","message":"I think realistically openstack and nova should not be *rewritten* in asyncio.  that would be crazy.\n\nI think those areas of services that are dependent on the very specific use case of having hundreds/thousands of IO-bound concurrent tasks running at the same time should be ported to asyncio.   It\u0027s my understanding that there\u0027s one section of nova that has this kind of thing going on involving some kind of work that could span across 100\u0027s of cell DBs.  otherwise the rest of everything can stay the same.\n\nI would also note, and i think this comment is not really enough of a forum for this but just to introduce the concept, SQLAlchemy achieved full asyncio functionality without being rewritten using our own approach with greenlet (openstack is of course entirely based on greenlet right now via eventlet).   My efforts to sell this approach to various parties have been completely unsuccessful, with the exception of the tens of thousands of users who are already using this approach fully since they are using SQLAlchemy asyncio.\n\nanyway, replace concurrency-critical sections with asyncio, yes, rewrite all of openstack, definitely not.  openstack should be using threads for the vast majority of features.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3cde74c3229cbfe4351907780e09782a6d2d4832","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Here are the facts: Stop using Eventlet is not an option it is an"},{"line_number":195,"context_line":"obligation. Eventlet can\u0027t be removed abruptly. We need a replacement for"},{"line_number":196,"context_line":"Eventlet.**"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This proposal aim to make Eventlet work again on the short run."},{"line_number":199,"context_line":"Then incrementally abandon Eventlet in favor of Asyncio to keep Openstack"}],"source_content_type":"text/x-rst","patch_set":19,"id":"01300589_f2eb9077","line":196,"in_reply_to":"0653d0bc_f95098d8","updated":"2024-05-02 10:32:52.000000000","message":"the perspecitive im taking there is that if we forced the use of asyncio\nwe woudl not be able to use much fo our exisitng oslo libaryies in there current form (without creatign a compatiablity layer) and internallin nova we would not be able to share the majority of our shared code for db acccess rpc ectra within nova.\n\nso a direct rewrite to asyncio for nova effectivly means startign from scratch.\nwhich is why at that point rewritng in a diffent language is almost as much work.\n\nthis is perhaps a hyperbolic dramatization fo my actual stance which is im not sure we should be using asyncio construct in any of our library interfaces but instead, provide async interfaces that return futures via plain \"def func\" function with an \"async def facade\" if applicable.\n\ni.e. our libaries should not mandate a runtime asyncio or otherwise but can support both models.\n\nif you wanted to writhe that lib in rust provided you also provided python binding its not out of the question however rust is not an approved language for openstack project so without that changing rust is a mute point.\n\nRegarding Python i do not expect the minim supproted runtim to move to 3.10 until 2025.2 at the earlist but it depend on the timelines of how this plays out if 3.10 would be applicable or not.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"76aee60724c834e6e95255fb448d0bd9a2f9315a","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Here are the facts: Stop using Eventlet is not an option it is an"},{"line_number":195,"context_line":"obligation. Eventlet can\u0027t be removed abruptly. We need a replacement for"},{"line_number":196,"context_line":"Eventlet.**"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This proposal aim to make Eventlet work again on the short run."},{"line_number":199,"context_line":"Then incrementally abandon Eventlet in favor of Asyncio to keep Openstack"}],"source_content_type":"text/x-rst","patch_set":19,"id":"0653d0bc_f95098d8","line":196,"in_reply_to":"34a884a3_97d99e9d","updated":"2024-04-30 07:39:04.000000000","message":"\u003e litrally rewriting in rust would be an equally valid approch to achiving the eventlet removal \n\nYou really think that rust would be an equally valid approach?\n\nLet me quote you (https://review.opendev.org/c/openstack/governance/+/902585/4..19/goals/proposed/modernize-openstack-async-model.rst#b501): \n\n\"forking nova is not something that is going to happen imo. we need a way to opt into one or the other model. ... If we fork however we are going to have the python2 python 3 problem of on going code development happening in both in parallel in my view that will make this unachievable and fork our community so i don\u0027t think this is a good approach to take at all.\"\n\nRewriting everything from scratch with Rust won\u0027t fork our community? Is it won\u0027t trigger parallel code developments?\n\nI\u0027m also curious to know what are the metrics who allow you made such a claims?\n\nIf we want to find solutions, I think we need to remains on the rational side of the discussion. The topic complex, we must remain objective if we want to solve it.\n\n\u003e as rewritng in in asyncio or with one of the light weight asynico abstration lib (anyio) that backport the asysnio feature like task groups form python 3.11/3.12 to 3.8\n\nPython 3.8 will be EOL in 6 months (October 2024) [1]. The minimal supported runtime for 2024.2 is Python 3.9 [2]. Accounting this goal is not yet accepted and accounting the fact that once accepted a goal had to be selected [3], I think that at this time the minimal supported runtimes will be Python 3.10 or 3.11. I don\u0027t think an asyncio abstraction would be still needed. \n\n[1] https://devguide.python.org/versions/\n[2] https://governance.openstack.org/tc/reference/runtimes/2024.2.html\n[3] https://governance.openstack.org/tc/goals/index.html#selecting-goals","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7f738ad3a71944db3f842119848cbf25eb972b90","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Here are the facts: Stop using Eventlet is not an option it is an"},{"line_number":195,"context_line":"obligation. Eventlet can\u0027t be removed abruptly. We need a replacement for"},{"line_number":196,"context_line":"Eventlet.**"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"This proposal aim to make Eventlet work again on the short run."},{"line_number":199,"context_line":"Then incrementally abandon Eventlet in favor of Asyncio to keep Openstack"}],"source_content_type":"text/x-rst","patch_set":19,"id":"39b52111_d634335a","line":196,"in_reply_to":"ac99cb89_c8f35178","updated":"2024-05-07 15:09:17.000000000","message":"This right here ^ is what I\u0027ve been saying all along.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":207,"context_line":"by relying on (green) threads. Today, in 2024, the CPython stdlib, includes"},{"line_number":208,"context_line":"coroutines and async features - Asyncio. The purpose of Asyncio is"},{"line_number":209,"context_line":"the same that Eventlet .We propose to use Asyncio to replace Eventlet where it"},{"line_number":210,"context_line":"is currently used."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Some may ask, *why using Asyncio and not simply using threads and parallelism?*,"},{"line_number":213,"context_line":"After all, Eventlet relies on threads..."}],"source_content_type":"text/x-rst","patch_set":19,"id":"b83bb711_a37dcd8a","line":210,"updated":"2024-04-08 16:45:35.000000000","message":"just to be clear the the primary reason eventlet was used is for implicti copererative concurrent multi tasking\n\nthe migration off eventlet guid provides 2 main usese cases\n\n\nhttps://eventlet.readthedocs.io/en/latest/asyncio/migration.html#migrating-off-of-eventlet\n\n\nThere are two main use cases for Eventlet:\n\n1.)    As a required networking framework, much like one would use asyncio, trio, or older frameworks like Twisted and tornado.\n\n2.)    As an optional, pluggable backend that allows swapping out blocking APIs for an event loop, transparently, without changing any code. This is how Celery and Gunicorn use eventlet.\n\n\nthe guide focusle mainly on 1\nopenstack usecase (at least for nova and i suspect cinder) is 2\n\nthe networking capabvlity were really not why we were using it it was a happy side effect.\n\ncan we refect that in this document.\n\nto make it clear that netwroking is not the primary usecase and we are relly focusting on how to evolve our implict coperative concurancy model into an explict concurrancy model.\n\ngevnt functions in a similar way to eventlet and is maintanded.\n\nif we were only focused on removing eventlete moving to gevent would be the lowest cost option to achive that goal.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3cde74c3229cbfe4351907780e09782a6d2d4832","unresolved":true,"context_lines":[{"line_number":207,"context_line":"by relying on (green) threads. Today, in 2024, the CPython stdlib, includes"},{"line_number":208,"context_line":"coroutines and async features - Asyncio. The purpose of Asyncio is"},{"line_number":209,"context_line":"the same that Eventlet .We propose to use Asyncio to replace Eventlet where it"},{"line_number":210,"context_line":"is currently used."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Some may ask, *why using Asyncio and not simply using threads and parallelism?*,"},{"line_number":213,"context_line":"After all, Eventlet relies on threads..."}],"source_content_type":"text/x-rst","patch_set":19,"id":"4fc4afba_e0d5de39","line":210,"in_reply_to":"a7539f46_cabe86bc","updated":"2024-05-02 10:32:52.000000000","message":"yes i ment reflect it in this docuemnt.\nThis document suggest that eventlet was chossen when we moved away form twisted primarly for its networking capablities but its primarly selection was for its threading model.\n\nwe made an explicit choice to use an implicit Cooperative multitasking via userland greenthreads as our concurancy model and rejected explicit callback driven event model presented by twisted.\n\n\"\"\"\nI can add some sentences to highlight the fact that we use eventlet for its implicit cooperative model and to highlight the fact that the facade pattern is a response to it.\n\"\"\"\n\n+1\n\ni agree that Gevent would only be a stopgap in fact i was really only looking at it when it looked like eventlet would not be updated to support 3.12 at all.\n\nthe reason i raised gevent is that if we just wanted to remove eventlet but not change the world of openstack development and treading model choice then gevnet is a vaild and simple option for many projects.  it was a mostly drop in replacement that unlike eventlet had a goal of trying to conform to the standard libary api as closely as possibel.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"76aee60724c834e6e95255fb448d0bd9a2f9315a","unresolved":true,"context_lines":[{"line_number":207,"context_line":"by relying on (green) threads. Today, in 2024, the CPython stdlib, includes"},{"line_number":208,"context_line":"coroutines and async features - Asyncio. The purpose of Asyncio is"},{"line_number":209,"context_line":"the same that Eventlet .We propose to use Asyncio to replace Eventlet where it"},{"line_number":210,"context_line":"is currently used."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Some may ask, *why using Asyncio and not simply using threads and parallelism?*,"},{"line_number":213,"context_line":"After all, Eventlet relies on threads..."}],"source_content_type":"text/x-rst","patch_set":19,"id":"a7539f46_cabe86bc","line":210,"in_reply_to":"b83bb711_a37dcd8a","updated":"2024-04-30 07:39:04.000000000","message":"\u003e can we refect that in this document.\n\nBy saying document, you mean in this goal proposal, or in the eventlet doc?\n\n\u003e \n\u003e to make it clear that netwroking is not the primary usecase and we are relly focusting on how to evolve our implict coperative concurancy model into an explict concurrancy model.\n\nI can add some sentences to highlight the fact that we use eventlet for its implicit cooperative model and to highlight the fact that the facade pattern is a response to it.\n\n\u003e \n\u003e gevnt functions in a similar way to eventlet and is maintanded.\n\u003e \n\u003e if we were only focused on removing eventlete moving to gevent would be the lowest cost option to achive that goal.\n\nA \"lowest cost option\" with the same biases that the current problem we are trying to solve:\n- gevent is only maintained by 2 persons so the same resource problem may arise again in short terms. https://github.com/gevent/gevent/graphs/contributors\n- gevent also rely on monkey patching so it may need many resources to keep this lib up-to-date.\n\nIMO, if we do something we should avoid doing it with solutions that potentially lead to the same biases.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":276,"context_line":"In short, Asyncio offers:"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"* a safer alternative to preemptive multitasking."},{"line_number":279,"context_line":"* a simple way to support many thousand of simultaneous socket connections."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Replacing Eventlet with native threads just because Eventlet\u0027s choice of async"},{"line_number":282,"context_line":"programming model is threads doesn\u0027t mean we need to move to it."}],"source_content_type":"text/x-rst","patch_set":19,"id":"89275469_26cca215","line":279,"updated":"2024-04-08 16:45:35.000000000","message":"outside of swift this is not a use case we really care about.\n\nall our rest apis while they can be served by an eventlet webserver are typicly\ndeploywed as wsgi applicaitions and the paralleisume is provide by the webserver\nand its wsgi runtime.\n\nthat means that most of our biniares will maintian 10 of conenctions in general.\nnot hundereds or thousands.\n\nso for project like nova/cinder \"a simple way to support many thousand of simultaneous socket connections.\" is not really imporant because we just dont need to do that.\n\nmost openstack service are not in the dataplane\nthey are simile wrapper around external applciations like libvirt, ceph, ovn\nthat process api/rpc calls at low ot medium traffic voluems.\n\nso \"many thousand of simultaneous socket connections\" never comes up as a usecase.\n\n\nfor something like swift which is in the dataplaen as an object storage service the usage is very diffent then for nova/cinder/watch/cyborg ectra.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"By replacing features of Eventlet by features specifically tailored for"},{"line_number":285,"context_line":"network IO from the CPython stdlib, we would benefit from the right feature at"},{"line_number":286,"context_line":"the right place."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"We would also benefit from the sustainability and the stability"},{"line_number":289,"context_line":"offered by CPython. In the past, we made a wise choice trusting the CPython"}],"source_content_type":"text/x-rst","patch_set":19,"id":"6d262bec_563bae91","line":286,"updated":"2024-04-08 16:45:35.000000000","message":"with what i said above in mind paragrahs liek thsi wont resonate with much of the core teams since networkIO is not the primary reason for it.\n\nwe did not select eventlet as oru networking framework we sleected it as aour concurrent task runtime, the two are related but if you want to motavate why we\nshould change thigs it would help to focus on that not networking.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"By replacing features of Eventlet by features specifically tailored for"},{"line_number":285,"context_line":"network IO from the CPython stdlib, we would benefit from the right feature at"},{"line_number":286,"context_line":"the right place."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"We would also benefit from the sustainability and the stability"},{"line_number":289,"context_line":"offered by CPython. In the past, we made a wise choice trusting the CPython"}],"source_content_type":"text/x-rst","patch_set":19,"id":"53e168e3_d0d71266","line":286,"in_reply_to":"6d262bec_563bae91","updated":"2024-04-30 10:04:49.000000000","message":"I think I already detailed this point early in that document (see line 148):\n\n\u003e One major argument initially brandished to defend usage of Eventlet inside\nOpenstack was one of those was to avoid explicit concurrency in our code base.\nMonkey patching. We use Eventlet as an optional, pluggable, backend that allows\nswapping out blocking APIs for an event loop, transparently, without changing\nany code. \n\nAlthrough this document, I already repeated, several time, the implicit nature of eventlet and its monkey patching tricks. Not sure repeating it one more time will really help to resonate at the ears of the core teams...\n\nAt some point, we have to explain the kind of replacement we need to do and what we have at our disposal to do that, depending on the replacement solution we made here - asyncio. That\u0027s more the goal of this sentence.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3f7d7b64378451ff134b51b497a2fcb072c032ae","unresolved":true,"context_lines":[{"line_number":452,"context_line":"   However, as seen previously, Asyncio, doesn\u0027t behave that way."},{"line_number":453,"context_line":"   By using Asyncio, callers of an async code should be also adapted to"},{"line_number":454,"context_line":"   become async. The way Asyncio is designed, does not offer a way to schedule"},{"line_number":455,"context_line":"   async call from a non-async code and get a response."},{"line_number":456,"context_line":"   If we are not careful, using Asyncio could contaminate every pieces of"},{"line_number":457,"context_line":"   Openstack, even if these piece are not using Eventlet at all. By using"},{"line_number":458,"context_line":"   Asyncio without considering that point would engage us in a more biggest"}],"source_content_type":"text/x-rst","patch_set":19,"id":"52e256f1_fcda6443","line":455,"updated":"2024-05-20 14:09:38.000000000","message":"this statement is not really accurate.   asyncio.run() after all schedules async calls from non-async code.   as well as, if you are in an async def, you can call blocking code too, it just will block the whole app until it returns.    there is also SQLAlchemy\u0027s methodology of using the greenlet library directly to create async/sync/async pass throughs.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"5ce6184aa4878ed225cf0ff7c690f53825c0fcff","unresolved":true,"context_lines":[{"line_number":442,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":443,"context_line":"   flow that happens as a result."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"#. Again, in the Openstack context, Eventlet is mostly used as an optional,"},{"line_number":446,"context_line":"   pluggable, backend that allows swapping out blocking APIs for an event"},{"line_number":447,"context_line":"   loop, transparently, without changing any code. This behavior allow us to"},{"line_number":448,"context_line":"   call the same code in all our services, no matters if these"},{"line_number":449,"context_line":"   services needs to behave synchronously or asynchronously and no matter"},{"line_number":450,"context_line":"   if they needs to call async or non-async code."},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"   However, as seen previously, Asyncio, doesn\u0027t behave that way."},{"line_number":453,"context_line":"   By using Asyncio, callers of an async code should be also adapted to"},{"line_number":454,"context_line":"   become async. The way Asyncio is designed, does not offer a way to schedule"},{"line_number":455,"context_line":"   async call from a non-async code and get a response."},{"line_number":456,"context_line":"   If we are not careful, using Asyncio could contaminate every pieces of"},{"line_number":457,"context_line":"   Openstack, even if these piece are not using Eventlet at all. By using"},{"line_number":458,"context_line":"   Asyncio without considering that point would engage us in a more biggest"},{"line_number":459,"context_line":"   refactor that the one initially requested by this goal."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"   Services who are not using Eventlet should not be impacted by this"},{"line_number":462,"context_line":"   proposal. Fortunately, it exists patterns that could allow us to implement"},{"line_number":463,"context_line":"   Asyncio in our code base, without requesting adaptation from the"},{"line_number":464,"context_line":"   synchronous callers. These patterns will be described later in this"},{"line_number":465,"context_line":"   document (:ref:`how-to-migrate-our-deliverables`)."},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"   The same affirmation is also true for all our dependencies. As Eventlet"},{"line_number":468,"context_line":"   monkey patch all the running stack, all our dependencies are also"},{"line_number":469,"context_line":"   monkey patched, so, as our goal is to migrate our services and our"},{"line_number":470,"context_line":"   libraries, and as they relies on third parties requirements, we also have"},{"line_number":471,"context_line":"   to identify async candidates to replace external sync requirements that are"},{"line_number":472,"context_line":"   monkey patched and that we currently uses. If one is not replaceable, then,"},{"line_number":473,"context_line":"   wrap the existing one into async/sync patterns (described later in this"},{"line_number":474,"context_line":"   document :ref:`how-to-migrate-our-deliverables`)."},{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"This milestone would surely require at least two series. One series"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bb363bda_e629b6bf","line":474,"range":{"start_line":445,"start_character":3,"end_line":474,"end_character":52},"updated":"2024-05-13 12:52:48.000000000","message":"Many people expressed their voices and requested ways to use alternatives to asyncio (threads, futurist, etc), even for eventlet based deliverables:\n\nhttps://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/GFDBZ64OT2B4HMOQ3M6IAD5NYZJBMOFA/\n\n\u003e We discussed the open goal proposal to replace eventlet. The Technical\n\u003e Committee wants to ensure that we\u0027re not advocating for a\n\u003e one-size-fits-all solution to the problem of threading in OpenStack\n\u003e projects. Hence, we\u0027d prefer not to merge the proposal to replace\n\u003e eventlet with asyncio. Instead, we want to encourage projects to\n\u003e independently explore solutions that make sense to their individual\n\u003e architecture - which could be asyncio, native threads, or any other\n\u003e threading paradigm/library. We are supportive of ensuring there\u0027s no\n\u003e imposition of any specific library or threading mechanism imposed via\n\u003e oslo libraries. JayF will be summarizing this view to this mailing\n\u003e list soon. \n\nBy suggesting the usage of the facade pattern in this proposal, indeed I proposed that asyncio would be optional only for non-eventlet based deliverables. I wrote the previous sentences that way to express previous discussions:\n\n- https://review.opendev.org/c/openstack/governance/+/902585/comment/d94bc911_a735d166/\n- https://review.opendev.org/c/openstack/governance/+/902585/comment/d94bc911_a735d166/\n\nNow, people are strongly requesting alternative even for eventlet based deliverables. I think that this is possible to propose such alternative like Sean suggested in https://review.opendev.org/c/openstack/governance/+/902585/comment/6b23377c_6f1cc3aa/\n\nIMO, at the service level, it would be possible to propose alternatives through this guide.\n\nAs Sean said [1], this is just a proposal, and the implementation details will be let at the discretion of teams:\n\n\u003e the actual tecnial descion are not made by the TC\n\u003e they are made by the concent of the project teams and contributors\n\u003e so even if the goal is accpet then each project team need to design and agree a specific proposal for how they will implmenet the goal.\n\nHence, I think, the above sentences could become more generalist to better reflect the optional nature of asyncio even for deliverables actually based on eventlet (nova by example).\n\nHowever, I still have some question at the libs level:\n- Is the asyncio based facade pattern a blocking point for you?\n- Are you suggesting to drop this pattern proposal from shared libraries?\n\nIndeed, not using asyncio through facade pattern in shared libraries, would either lead the shared libraries to maintain async and sync \"drivers/modules\" in parallel, hence duplicating the workload for shared lib maintainers, and also increasing the technical debt of these libs, or lead the shared libraries to remain like they are implemented today, i.e implemented using the blocking paradigm, and, so, possibly, de facto closing the door for teams who want to use asyncio based libraries (aiohttp, etc) through shared libraries. I agree we should not close the door for alternatives (threads etc), but the same is true for asyncio.\n\nTo finish, this request for alternative comes from nova folks. Nova is an important deliverable, but Nova\u0027s voice should not be over represented. Many team do not have enough developers or time to design their own implementation. If we do not propose a default option, we will leave these teams aside. \n\nTeams should not consider the use of their surplus as legitimate when other teams are deprived of what is necessary.\n\nHere we do not propose a one-size-fits-all solution, but a one-fits-by-default. \n\nBy updating the quoted sentences, teams with resources would remains free to use their own design with the blocking side of the pattern facade. If Nova shares its own recipes through guide updates, then, everybody could benefit from them, but IMO we need at least a default recipe.\n\nhttps://review.opendev.org/c/openstack/governance/+/902585/comment/a6a346c5_be9625ee/","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"86a12cd4fc50aaef4bb0dd0ced6ccdf06a3c2355","unresolved":true,"context_lines":[{"line_number":488,"context_line":"#. implementing the new hub. (*done*)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"   * https://github.com/eventlet/eventlet/issues/869"},{"line_number":491,"context_line":"   * https://eventlet.readthedocs.io/en/latest/migration.html#migration-guide"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"#. Upgrade the minimal version of Eventlet in ``requirements.txt`` files of"},{"line_number":494,"context_line":"   deliverables using Eventlet. As libraries would be transitioned first, and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bf17984a_3b023ceb","line":491,"updated":"2024-04-03 10:18:02.000000000","message":"this link gives me 404 error :/","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"76aee60724c834e6e95255fb448d0bd9a2f9315a","unresolved":true,"context_lines":[{"line_number":488,"context_line":"#. implementing the new hub. (*done*)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"   * https://github.com/eventlet/eventlet/issues/869"},{"line_number":491,"context_line":"   * https://eventlet.readthedocs.io/en/latest/migration.html#migration-guide"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"#. Upgrade the minimal version of Eventlet in ``requirements.txt`` files of"},{"line_number":494,"context_line":"   deliverables using Eventlet. As libraries would be transitioned first, and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"bb694e15_9cb76ffa","line":491,"in_reply_to":"bf17984a_3b023ceb","updated":"2024-04-30 07:39:04.000000000","message":"Indeed, the doc have been updated, this link is now available at https://eventlet.readthedocs.io/en/latest/asyncio/migration.html#migration-guide\n\nI\u0027ll update it.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":540,"context_line":"   please see :ref:`how-to-migrate-our-deliverables`."},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"#. choose a service that will serve as reference user. Glance-api have been"},{"line_number":543,"context_line":"   proposed because it seems relatively small and typical."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"#. migrate this reference user deliverable (glance-api for now)."},{"line_number":546,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"e8284d40_861593d0","line":543,"updated":"2024-04-08 16:45:35.000000000","message":"im not sure how typical an example it is since its still a wsgi applicaiton so that limits the ways it operatates\n\ni think we need to example workload for example the nova-schduler or other deamon process  that use oslo.service as a foundation.\n\nmy recommendation for that is to add the oslo.privsep daemon as the second example project to support refactoring\n\nwithout a non api example its not going to hit some of the issues we will have in other non api components like nova-compute or cinder volume.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":540,"context_line":"   please see :ref:`how-to-migrate-our-deliverables`."},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"#. choose a service that will serve as reference user. Glance-api have been"},{"line_number":543,"context_line":"   proposed because it seems relatively small and typical."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"#. migrate this reference user deliverable (glance-api for now)."},{"line_number":546,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"c77110aa_204fba1a","line":543,"in_reply_to":"e8284d40_861593d0","updated":"2024-04-30 10:04:49.000000000","message":"Good idea, will amend this section with your proposal.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"289922c2_42aaa933","line":639,"updated":"2024-04-08 16:45:35.000000000","message":"if we are going to do this then there some explcit thing we need to do.\n\nfirst in 2025.1 we need to have the ablity to run each service with  Asyncio hub\nsecond we need to deprecate using any other hub and make  Asyncio hub the default\nthat could happen in 2025.1 as well or in 2026.1\n\nwhile we supprot any other hub we cant have any code that only has an async implmeeation.\n\nso i would not expect any service project to merge implemation that use async def functions until 2025.2 at the eariest unless there is a parallel non \"async def\" version that can be used when using the epool hub.\n\nfor that to happen it means the asyncio hub need to be production grade and support our exisitng useages by the end of the 2025.1","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"9d2a4f04_f31e6b49","line":639,"in_reply_to":"289922c2_42aaa933","updated":"2024-04-30 10:04:49.000000000","message":"\u003e if we are going to do this then there some explcit thing we need to do.\n\u003e \n\u003e first in 2025.1 we need to have the ablity to run each service with  Asyncio hub\n\u003e second we need to deprecate using any other hub and make  Asyncio hub the default\n\u003e that could happen in 2025.1 as well or in 2026.1\n\nLGTM\n\n\u003e \n\u003e while we supprot any other hub we cant have any code that only has an async implmeeation.\n\nThat\u0027s true for shared libraries, unless services which still relies on any other hubs, pin their versions of the shared libraries at a versions before their asyncio transition.\n\n\u003e \n\u003e so i would not expect any service project to merge implemation that use async def functions until 2025.2 at the eariest unless there is a parallel non \"async def\" version that can be used when using the epool hub.\n\nJust to be sure, when you speak about \"async def version\" are you speaking of the code of the service or of the code of shared libraries, or the both? That\u0027s not clear.\n\n\u003e \n\u003e for that to happen it means the asyncio hub need to be production grade and support our exisitng useages by the end of the 2025.1","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"9675f22bf60f47896da094d0fbe29e5015a9b5be","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"d3332bf8_00999ba6","line":639,"in_reply_to":"3f65f257_7a0e0c41","updated":"2024-05-13 14:22:54.000000000","message":"yes you can use threadpools around libraries that are blocking all the way down to the network layer.   Some of the asyncio DB drivers do this, most notably the asyncio SQLite driver (it\u0027s not really a pool, it just does thread-per-connection).   but if you have non-blocking network (or subprocess) code, then you can be non-blocking all the way through.   I personally would not introduce threading into code that wants to have a non-blocking front end that goes all the way to non-blocking network IO.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"3f65f257_7a0e0c41","line":639,"in_reply_to":"4d2d1925_a8e2e0c8","updated":"2024-05-13 13:39:34.000000000","message":"see this si why i said i did not fully understand it 😊\nthanks for the clarificaiton i was not a aware that it required both an asyicio backend driver and asynio facade extention to make it fully non blocking.\n\ni thought your use of greenlet in the middle was sufficnet to wrap a blocking driver and emulatate a non blocking interface. i guess if you used a threadpool and future instead you likely could emulate an asyc backend vai an asycio interface.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"f6c6dbed07495c2047bfceb6dacb4e8cf618b84e","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"4d2d1925_a8e2e0c8","line":639,"in_reply_to":"57eafe26_38217d41","updated":"2024-05-09 17:43:48.000000000","message":"just to clarify, when you use SQLAlchemy with asyncio front end, you have to use an asyncio database driver as well.   When used in this way, SQLAlchemy is not blocking at all.  The code \"in the middle\" looks like blocking code, but it\u0027s not, it\u0027s pure asyncio.  we just use greenlet to give us \"async\" / \"await\" functionality around code that\u0027s written in blocking style, but the ultimate \"await\" still happens at the DB driver level.\n\nopenstack could certainly make selective use of this pattern as well if it wanted to provide asyncio front-ends in places where it also uses uses asyncio backends.   but as I said before it\u0027s been tricky getting people to understand the pattern so it\u0027s hard to get explicit buy in for it.   (there have been absolutely zero issues with it for 3 years now though).","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b26f128aa3fbf414718c0a8b8513d02d6e32c575","unresolved":true,"context_lines":[{"line_number":636,"context_line":"In all the case the migration could be done directly the existing code base of"},{"line_number":637,"context_line":"a repository by fully relying on the new Asyncio hub of Eventlet to manage the"},{"line_number":638,"context_line":"cohabitation of Eventlet and asyncio in the same code base and in the same"},{"line_number":639,"context_line":"stack."},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"We should notice that an incremental migration really increase the complexity"},{"line_number":642,"context_line":"to get a big picture of the advancement of this goal. Almost all deliverables"}],"source_content_type":"text/x-rst","patch_set":19,"id":"57eafe26_38217d41","line":639,"in_reply_to":"9d2a4f04_f31e6b49","updated":"2024-05-09 17:26:32.000000000","message":"kind of both.\n\nthe service cant merge any code that is written in terms fo \"async def\" or use await extra while our entry points remain \"def main\"\n\nand we can change the entry point to async def main while we support other eventlet hubs.\n\nBasically we cant assume a asyncio event loop exists or can be created in our service or library code while we allow other eventlet hubs to be used in the context fo a python process that eventlet monkey patching.\n\n\nnow sqlalchmey got around this by havign two version of every python api and an adoptior proxy layer that allows the async imple to be called in a synconos way\n\n\nhttps://gist.github.com/zzzeek/6287e28054d3baddc07fa21a7227904e\n\nlooking at https://github.com/sqlalchemy/sqlalchemy/tree/main/lib/sqlalchemy/ext/asyncio briefly, i belive they ended up largely doing the reverses\n\nmaking a asyncio facade over their existing blocking code\nat lest in the case fo a db driver that does nto supprot asyncio driectly.\nim not really famialr enouch with what they did and the design trade offs that motivated it to explain that properly.\n\nin either there is a lot more maintenance overhead and testing required to do that\nas you either need 2 parallel implications of a proxy/facade layer \n\nthat ok to do in a library, it might work well for oslo.* for example,\nIt is harder to do in an application even if that application is decomposed into modules.\n\nwe typically don\u0027t have abstract base classes or interfaces between the module boundaries. those tend only to exist if there is an RPC boundary or an external plug point were we allow extension.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"86a12cd4fc50aaef4bb0dd0ced6ccdf06a3c2355","unresolved":true,"context_lines":[{"line_number":755,"context_line":"   libraries by only relying on a single design under the hood. Hence,"},{"line_number":756,"context_line":"   everything would become based on Asyncio and coroutines but the facades"},{"line_number":757,"context_line":"   will allow doing blocking IO calls by relying on an uniform async code"},{"line_number":758,"context_line":"   base. "},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"   All services, even those not concerned by this migration, would be able"},{"line_number":761,"context_line":"   to continue using our libraries. By doing things this way, these services"}],"source_content_type":"text/x-rst","patch_set":19,"id":"24442df8_776d8486","line":758,"updated":"2024-04-03 10:18:02.000000000","message":"nitty nit: trailing space","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":840,"context_line":"   release."},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":843,"context_line":"   like the `heartbeat_in_pthread` feature in oslo.messaging. Transitioning to"},{"line_number":844,"context_line":"   Asyncio would make these feature obsolete. As this kind of feature"},{"line_number":845,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":846,"context_line":"   operators to update their config files accordingly. However, the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"cc2bf5eb_64fb451b","line":843,"updated":"2024-04-08 16:45:35.000000000","message":"for what it worht heartbeat_in_pthread should just be removed or hardcoded to OFF\n\nit never actuuly fixed anything in portant (just an annoyin log warning) \nand setign ti to true is know to break things liken nova-compute\n\n\nso regardless of this propoal i would like to see heartbeat_in_pthread removed form oslo.messaaging preseving the behaivor of settting it to falses not true.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"76aee60724c834e6e95255fb448d0bd9a2f9315a","unresolved":true,"context_lines":[{"line_number":840,"context_line":"   release."},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":843,"context_line":"   like the `heartbeat_in_pthread` feature in oslo.messaging. Transitioning to"},{"line_number":844,"context_line":"   Asyncio would make these feature obsolete. As this kind of feature"},{"line_number":845,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":846,"context_line":"   operators to update their config files accordingly. However, the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"e5bb6d6b_79416e0c","line":843,"in_reply_to":"cc2bf5eb_64fb451b","updated":"2024-04-30 07:39:04.000000000","message":"Agree with you but that\u0027s a separated thread and migrating away from eventlet would automatically remove all these eventlet based hacks.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":false,"context_lines":[{"line_number":840,"context_line":"   release."},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":843,"context_line":"   like the `heartbeat_in_pthread` feature in oslo.messaging. Transitioning to"},{"line_number":844,"context_line":"   Asyncio would make these feature obsolete. As this kind of feature"},{"line_number":845,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":846,"context_line":"   operators to update their config files accordingly. However, the"}],"source_content_type":"text/x-rst","patch_set":19,"id":"721fc775_1aec5c6b","line":843,"in_reply_to":"e5bb6d6b_79416e0c","updated":"2024-05-13 13:39:34.000000000","message":"Acknowledged","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"However, sometime that\u0027s could not possible to replace used libraries and"},{"line_number":895,"context_line":"that\u0027s not possible to modify the code of these third parties libraries"},{"line_number":896,"context_line":"either."},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"Possibly, services are more exposed to this kind of situation."},{"line_number":899,"context_line":"Fortunately it exist a way for services to use asyncio executors to"}],"source_content_type":"text/x-rst","patch_set":19,"id":"3c235234_0eaa2722","line":896,"updated":"2024-04-08 16:45:35.000000000","message":"welll we cant force people to use the asyncio_hub\n\nfor the entire transsition period we will need to supprot runign with the normal hub or the asyncio hub.\n\nwhich means we will need to have two impliation of many things in the service and swap the the async version based on what has been enabeld.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"However, sometime that\u0027s could not possible to replace used libraries and"},{"line_number":895,"context_line":"that\u0027s not possible to modify the code of these third parties libraries"},{"line_number":896,"context_line":"either."},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"Possibly, services are more exposed to this kind of situation."},{"line_number":899,"context_line":"Fortunately it exist a way for services to use asyncio executors to"}],"source_content_type":"text/x-rst","patch_set":19,"id":"c77840b9_4b3ca5a8","line":896,"in_reply_to":"3c235234_0eaa2722","updated":"2024-04-30 10:04:49.000000000","message":"Indeed. It would be cheaper to simply swap the hub everywhere though. It would be mostly transparent for all services. That would really simplify our life, and that will reduce the number hacks to maintain.\n\nAs the asyncio hub is compatible with asyncio and with current epoll implementation - regarless of the multi writer debug feature which is not supported and which is a **DEBUG** feature that should be banned from production codes implementation - and as the epoll hub is not compatible with asyncio, I don\u0027t see reasons to not move by default to the asyncio hub. It would be meaningless to keeps the epoll hub just to keep the epoll hub...","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b26f128aa3fbf414718c0a8b8513d02d6e32c575","unresolved":true,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"However, sometime that\u0027s could not possible to replace used libraries and"},{"line_number":895,"context_line":"that\u0027s not possible to modify the code of these third parties libraries"},{"line_number":896,"context_line":"either."},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"Possibly, services are more exposed to this kind of situation."},{"line_number":899,"context_line":"Fortunately it exist a way for services to use asyncio executors to"}],"source_content_type":"text/x-rst","patch_set":19,"id":"3d6f4b0c_16fb4847","line":896,"in_reply_to":"c77840b9_4b3ca5a8","updated":"2024-05-09 17:26:32.000000000","message":"swapping the hub IMO can be done but we cant do it till the F cycle.\n\nwe need to deprecate the old hub in the E cycle and remove it in the F cycle.\n\nwe can do that as a comunity in one release but it means by the E cycle everyon that has eventlet need to be able to work with the ayncio_hub.\n\nthe default is not really the issue here its really when can we drop support for epoll or the windows hub.\n\nwe removed the hyperv driver recently so we may have looked out on not needing to supprot windows  but until Caracal that was still a concern too.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":901,"context_line":"responsible of transforming their own code base to rely on asyncio executor"},{"line_number":902,"context_line":"when blocking libraries are used in their code base, and, then,"},{"line_number":903,"context_line":"become fully based on Asyncio (against, for services currently relying on"},{"line_number":904,"context_line":"Eventlet)."},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"As for the oslo.demo example, let\u0027s consider an hypothetical Openstack service"},{"line_number":907,"context_line":"named `supernova`. Migrating a service like `supernova` would mean:"}],"source_content_type":"text/x-rst","patch_set":19,"id":"d772ff73_d2b39847","line":904,"updated":"2024-04-08 16:45:35.000000000","message":"one way to do that is to start explcitly using an executor where applciable using an in indirection such as futureist","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":909,"context_line":"#. As a service migration could represent an heavy workload, and as Openstack"},{"line_number":910,"context_line":"   resources are more decreasing than increasing, we recommend to split"},{"line_number":911,"context_line":"   the transition into subtopics. Firstly we would recommend migrating one"},{"line_number":912,"context_line":"   by one all usage of Openstack libraries to their async based facade."},{"line_number":913,"context_line":"   By example, in supernova, starting migrating oslo.messaging first, once"},{"line_number":914,"context_line":"   done, start migrate oslo.cache, and so on. Then, once all Openstack library"},{"line_number":915,"context_line":"   usages are transitioned then, start migrating third parties libraries calls"}],"source_content_type":"text/x-rst","patch_set":19,"id":"6b23377c_6f1cc3aa","line":912,"updated":"2024-04-08 16:45:35.000000000","message":"by async based facade.\n\nyou mean a non \"async def\" function wraper that does somthing like\n\nqueue the request to be processed and returns a future right.\n\nwe cant really just call \"async def\" function in the code without a  lot of work otherwise.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b26f128aa3fbf414718c0a8b8513d02d6e32c575","unresolved":true,"context_lines":[{"line_number":909,"context_line":"#. As a service migration could represent an heavy workload, and as Openstack"},{"line_number":910,"context_line":"   resources are more decreasing than increasing, we recommend to split"},{"line_number":911,"context_line":"   the transition into subtopics. Firstly we would recommend migrating one"},{"line_number":912,"context_line":"   by one all usage of Openstack libraries to their async based facade."},{"line_number":913,"context_line":"   By example, in supernova, starting migrating oslo.messaging first, once"},{"line_number":914,"context_line":"   done, start migrate oslo.cache, and so on. Then, once all Openstack library"},{"line_number":915,"context_line":"   usages are transitioned then, start migrating third parties libraries calls"}],"source_content_type":"text/x-rst","patch_set":19,"id":"c7d824e8_2938485e","line":912,"in_reply_to":"0bf36860_d177dcd7","updated":"2024-05-09 17:26:32.000000000","message":"sure that organisation makes sense but in the context of OpenStack specifically for each of those concepts we would want to mention other tools beyond asyncio\n\ni.e. under 3 and 5 mention the use of futurists futures and executors rather then just asyncio.Future  or : run_in_executor(), asyncio.subprocess","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":909,"context_line":"#. As a service migration could represent an heavy workload, and as Openstack"},{"line_number":910,"context_line":"   resources are more decreasing than increasing, we recommend to split"},{"line_number":911,"context_line":"   the transition into subtopics. Firstly we would recommend migrating one"},{"line_number":912,"context_line":"   by one all usage of Openstack libraries to their async based facade."},{"line_number":913,"context_line":"   By example, in supernova, starting migrating oslo.messaging first, once"},{"line_number":914,"context_line":"   done, start migrate oslo.cache, and so on. Then, once all Openstack library"},{"line_number":915,"context_line":"   usages are transitioned then, start migrating third parties libraries calls"}],"source_content_type":"text/x-rst","patch_set":19,"id":"0bf36860_d177dcd7","line":912,"in_reply_to":"6b23377c_6f1cc3aa","updated":"2024-04-30 10:04:49.000000000","message":"Yep.\n\nI think this kind of architecture details still have to find a place in an official migration guide which reference the different kind of use case that libraries and services code would may meet.\n\nThis document does not claim to cover all these architectural elements. This document just brings the facade pattern as a root mechanism behind the architecture would can allow using Asyncio in an optional way. Decide when using futures and when using queuing could be detailed in this advanced guide with specific use case examples.\n\nI personally don\u0027t have the big picture of all the elements of the current the architecture in use in Openstack. This guide should be the result of a collegial work to gather all the specific use cases and to oppose them architecture patterns based on asyncio, queue, future, etc.\n\nAsyncio target two main audiences:\n- end-users developers who wants to make applications using asyncio - Openstack services (neutron, nova, etc);\n- framework developers who wants to make frameworks and libraries that end-users developers can use in their applications - Openstack shared libraries (oslo, etc).\n\nThe asyncio doc is designed by taking account of these audiences.\n\nI think we have to organize our guide by concepts:\n1. __coroutines:__ async def, async with, async for, await\n2. __event loop:__ asyncio.run(), BaseEventLoop\n3. __Futures:__ asyncio.Future\n4. __Tasks:__ asyncio.Task, asyncio.create_task()\n5. __Subprocess \u0026 threads:__ run_in_executor(), asyncio.subprocess\n6. __Tools:__ asyncio.Queue\n7. ___Network (transport):__ BaseTransport\n8. __Network (TCP \u0026 UDP):__ Protocol\n9. __Network (streams):__ StreamReader, StreamWriter, asyncio.open_connection(), asyncio.start_server()\n\nFollowing the above organization, developers, depending on their group (end-users developers, framework developers), would be able to grab patterns that would correspond to their use cases.\n\nI\u0027m going to add the content of this comment directly in that goal proposal.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"86a12cd4fc50aaef4bb0dd0ced6ccdf06a3c2355","unresolved":true,"context_lines":[{"line_number":1078,"context_line":"Because... implicit comes with hidden complexity. Simplicity is better than"},{"line_number":1079,"context_line":"complexity. Obvious. Ockham wouldn\u0027t disagree."},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"We can\u0027t count the number of `bug opened \u003chttps://bugs.launchpad.net/openstack/+bugs?field.searchtext\u003deventlet\u0026orderby\u003d-importance\u0026search\u003dSearch\u0026assignee_option\u003dany\u0026field.assignee\u003d\u0026field.bug_reporter\u003d\u0026field.bug_commenter\u003d\u0026field.subscriber\u003d\u0026field.structural_subscriber\u003d\u0026field.tag\u003d\u0026field.tags_combinator\u003dANY\u0026field.has_cve.used\u003d\u0026field.omit_dupes.used\u003d\u0026field.omit_dupes\u003don\u0026field.affects_me.used\u003d\u0026field.has_patch.used\u003d\u0026field.has_branches.used\u003d\u0026field.has_branches\u003don\u0026field.has_no_branches.used\u003d\u0026field.has_no_branches\u003don\u0026field.has_blueprints.used\u003d\u0026field.has_blueprints\u003don\u0026field.has_no_blueprints.used\u003d\u0026field.has_no_blueprints\u003don\u003e`_ in the past and even today and who are related to Eventlet. Also we"},{"line_number":1082,"context_line":"can\u0027t ignore the time the community gained in the past by using Eventlet. By"},{"line_number":1083,"context_line":"using Eventlet the community avoided to have to rewrite every piece of code to"},{"line_number":1084,"context_line":"implement async. However, that was a time where the gap between CPython and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"881ef7ef_4ed8a2eb","line":1081,"range":{"start_line":1081,"start_character":656,"end_line":1081,"end_character":659},"updated":"2024-04-03 10:18:02.000000000","message":"I\u0027m not english native spreaker but shouldn\u0027t be \u0027which\u0027 here?","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":1078,"context_line":"Because... implicit comes with hidden complexity. Simplicity is better than"},{"line_number":1079,"context_line":"complexity. Obvious. Ockham wouldn\u0027t disagree."},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"We can\u0027t count the number of `bug opened \u003chttps://bugs.launchpad.net/openstack/+bugs?field.searchtext\u003deventlet\u0026orderby\u003d-importance\u0026search\u003dSearch\u0026assignee_option\u003dany\u0026field.assignee\u003d\u0026field.bug_reporter\u003d\u0026field.bug_commenter\u003d\u0026field.subscriber\u003d\u0026field.structural_subscriber\u003d\u0026field.tag\u003d\u0026field.tags_combinator\u003dANY\u0026field.has_cve.used\u003d\u0026field.omit_dupes.used\u003d\u0026field.omit_dupes\u003don\u0026field.affects_me.used\u003d\u0026field.has_patch.used\u003d\u0026field.has_branches.used\u003d\u0026field.has_branches\u003don\u0026field.has_no_branches.used\u003d\u0026field.has_no_branches\u003don\u0026field.has_blueprints.used\u003d\u0026field.has_blueprints\u003don\u0026field.has_no_blueprints.used\u003d\u0026field.has_no_blueprints\u003don\u003e`_ in the past and even today and who are related to Eventlet. Also we"},{"line_number":1082,"context_line":"can\u0027t ignore the time the community gained in the past by using Eventlet. By"},{"line_number":1083,"context_line":"using Eventlet the community avoided to have to rewrite every piece of code to"},{"line_number":1084,"context_line":"implement async. However, that was a time where the gap between CPython and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"8cd4c9dc_9f51d0df","line":1081,"range":{"start_line":1081,"start_character":656,"end_line":1081,"end_character":659},"in_reply_to":"12dccc26_db34c910","updated":"2024-04-30 10:04:49.000000000","message":"ack thanks, will reword it.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":1078,"context_line":"Because... implicit comes with hidden complexity. Simplicity is better than"},{"line_number":1079,"context_line":"complexity. Obvious. Ockham wouldn\u0027t disagree."},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"We can\u0027t count the number of `bug opened \u003chttps://bugs.launchpad.net/openstack/+bugs?field.searchtext\u003deventlet\u0026orderby\u003d-importance\u0026search\u003dSearch\u0026assignee_option\u003dany\u0026field.assignee\u003d\u0026field.bug_reporter\u003d\u0026field.bug_commenter\u003d\u0026field.subscriber\u003d\u0026field.structural_subscriber\u003d\u0026field.tag\u003d\u0026field.tags_combinator\u003dANY\u0026field.has_cve.used\u003d\u0026field.omit_dupes.used\u003d\u0026field.omit_dupes\u003don\u0026field.affects_me.used\u003d\u0026field.has_patch.used\u003d\u0026field.has_branches.used\u003d\u0026field.has_branches\u003don\u0026field.has_no_branches.used\u003d\u0026field.has_no_branches\u003don\u0026field.has_blueprints.used\u003d\u0026field.has_blueprints\u003don\u0026field.has_no_blueprints.used\u003d\u0026field.has_no_blueprints\u003don\u003e`_ in the past and even today and who are related to Eventlet. Also we"},{"line_number":1082,"context_line":"can\u0027t ignore the time the community gained in the past by using Eventlet. By"},{"line_number":1083,"context_line":"using Eventlet the community avoided to have to rewrite every piece of code to"},{"line_number":1084,"context_line":"implement async. However, that was a time where the gap between CPython and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"12dccc26_db34c910","line":1081,"range":{"start_line":1081,"start_character":656,"end_line":1081,"end_character":659},"in_reply_to":"881ef7ef_4ed8a2eb","updated":"2024-04-08 16:45:35.000000000","message":"yes\n\nif it was a person not a bug then whom would be ok too.\n\n\u0027which\u0027 or \u0027that\u0027 are more correct in this context","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"| Removing Eventlet is not an option, that\u0027s an obligation."},{"line_number":1131,"context_line":"| Without action we will soon face a brutal discontinuation."},{"line_number":1132,"context_line":"| Using Asyncio is a logical continuation."},{"line_number":1133,"context_line":"| Asyncio is the solution."},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"| A solution proposing a smooth migration."},{"line_number":1136,"context_line":"| A solution offering visible gains to our customers."}],"source_content_type":"text/x-rst","patch_set":19,"id":"2dd464a6_5e3db642","line":1133,"range":{"start_line":1132,"start_character":0,"end_line":1133,"end_character":26},"updated":"2024-04-08 16:45:35.000000000","message":"so these statement are only partly correct.\n\nusing a facility provided by the standard libary and broadly adopted by the python comunity is a logcial thing.\n\nasyncio may or may not be the correct choice in all cases.\n\ni generally like it but im alos not convied that asyncio in the standard lib does what we want until about 3.12\n\nmany of hte building blocks are two low level espically since we are limited to the fucntionaliy provide in python 3.9 at the current time of writhing\nhttps://docs.python.org/3.9/library/asyncio.html\n\n\nby 2026 we may be able to raise the min python version to 3.11\nto levage the task and taskgroup apis\n\nwe really should be thinking of oour cucounatn acctivies as tasks and not raw courtines.\n\ni think an abstracion like anyio  that will backport the task/taskgroup functionaly t to 3.9 will be reuqired to avoid a lot of pain.\n\nalthernitivly we will have to maintain our own small lib to provide that tasking level of obsrations.\n\nhttps://anyio.readthedocs.io/en/stable/tasks.html","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"| Removing Eventlet is not an option, that\u0027s an obligation."},{"line_number":1131,"context_line":"| Without action we will soon face a brutal discontinuation."},{"line_number":1132,"context_line":"| Using Asyncio is a logical continuation."},{"line_number":1133,"context_line":"| Asyncio is the solution."},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"| A solution proposing a smooth migration."},{"line_number":1136,"context_line":"| A solution offering visible gains to our customers."}],"source_content_type":"text/x-rst","patch_set":19,"id":"98835977_fe8cbff0","line":1133,"range":{"start_line":1132,"start_character":0,"end_line":1133,"end_character":26},"in_reply_to":"2dd464a6_5e3db642","updated":"2024-04-30 10:04:49.000000000","message":"\u003e i generally like it but im alos not convied that asyncio in the standard lib does what we want until about 3.12\n\nIf we target 2025.1 to really init the migration, I think we won\u0027t have to worry about old versions of python anymore... at least for Python 3.8 and 3.9.\n\nAccounting that the approval of this goal is still under discussion, 2024 don\u0027t seems to be a valid candidate where we should expect significant progress concerning this topic.\n\n\u003e \n\u003e many of hte building blocks are two low level espically since we are limited to the fucntionaliy provide in python 3.9 at the current time of writhing\n\u003e https://docs.python.org/3.9/library/asyncio.html\n\nAs I said in one of my other comments, the asyncio doc should be seen as targeting two kinds of audience. Many aspects of these building blocks are targeting framework developers, this is why they could seems low level. If we see them over the logical organization I propose, they won\u0027t remain low level. People using our future guide will only see the part related to the audience where they are members.\n\n\u003e \n\u003e by 2026 we may be able to raise the min python version to 3.11\n\u003e to levage the task and taskgroup apis\n\u003e \n\u003e we really should be thinking of oour cucounatn acctivies as tasks and not raw courtines.\n\u003e \n\u003e i think an abstracion like anyio  that will backport the task/taskgroup functionaly t to 3.9 will be reuqired to avoid a lot of pain.\n\nAs said above, Python 3.9 will be soon behind us...\nhttps://governance.openstack.org/tc/reference/runtimes/2024.2.html\n\nI don\u0027t think we should worry about Python 3.9, if I\u0027m right, it won\u0027t part of our supported runtimes once 2024.2 will be done. And as I said, I don\u0027t think we will be able to provide significant progress concerning this migration during 2024.2.\n\n\u003e \n\u003e althernitivly we will have to maintain our own small lib to provide that tasking level of obsrations.\n\u003e \n\u003e https://anyio.readthedocs.io/en/stable/tasks.html","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":true,"context_lines":[{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"| Removing Eventlet is not an option, that\u0027s an obligation."},{"line_number":1131,"context_line":"| Without action we will soon face a brutal discontinuation."},{"line_number":1132,"context_line":"| Using Asyncio is a logical continuation."},{"line_number":1133,"context_line":"| Asyncio is the solution."},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"| A solution proposing a smooth migration."},{"line_number":1136,"context_line":"| A solution offering visible gains to our customers."}],"source_content_type":"text/x-rst","patch_set":19,"id":"412255c6_d95aedbe","line":1133,"range":{"start_line":1132,"start_character":0,"end_line":1133,"end_character":26},"in_reply_to":"98835977_fe8cbff0","updated":"2024-05-13 13:39:34.000000000","message":"Acknowledged","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"| The TC is responsible in providing an ultimate appeals board for technical decisions."},{"line_number":1142,"context_line":"| If TC members simply reject this proposal without proposing anything else,"},{"line_number":1143,"context_line":"  they will have made a technical decision, but they will not be showing"},{"line_number":1144,"context_line":"  leadership."},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"We ask TC to provide leadership!"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"a6a346c5_be9625ee","line":1144,"updated":"2024-04-08 16:45:35.000000000","message":"i think its imporatn t to mention here that\nwhile \"The TC is responsible in providing an ultimate appeals board\"\nthe actual tecnial descion are not made by the TC\n\nthey are made by the concent of the project teams and contributors\n\nso even if the goal is accpet then each project team need to design and agree a specific proposal for how they will implmenet the goal.\n\nif the SRBAC debacle has thought use anything is simpley have a centralised goal document is not enough. we need detailed technical specs for how to apply the high level goal to each component.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"| The TC is responsible in providing an ultimate appeals board for technical decisions."},{"line_number":1142,"context_line":"| If TC members simply reject this proposal without proposing anything else,"},{"line_number":1143,"context_line":"  they will have made a technical decision, but they will not be showing"},{"line_number":1144,"context_line":"  leadership."},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"We ask TC to provide leadership!"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"b047397d_f371385b","line":1144,"in_reply_to":"a6a346c5_be9625ee","updated":"2024-04-30 10:04:49.000000000","message":"\u003e i think its imporatn t to mention here that\n\u003e while \"The TC is responsible in providing an ultimate appeals board\"\n\u003e the actual tecnial descion are not made by the TC\n\u003e \n\u003e they are made by the concent of the project teams and contributors\n\nTrue.\n\n\u003e \n\u003e so even if the goal is accpet then each project team need to design and agree a specific proposal for how they will implmenet the goal.\n\u003e \n\u003e if the SRBAC debacle has thought use anything is simpley have a centralised goal document is not enough. we need detailed technical specs for how to apply the high level goal to each component.\n\nI think that that\u0027s the goal of our future guide. Provide global guidance that each components could reuse to manage its own transition. Sharing experiences, observations, and feedback.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"| The TC is responsible in providing an ultimate appeals board for technical decisions."},{"line_number":1142,"context_line":"| If TC members simply reject this proposal without proposing anything else,"},{"line_number":1143,"context_line":"  they will have made a technical decision, but they will not be showing"},{"line_number":1144,"context_line":"  leadership."},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"We ask TC to provide leadership!"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"e5633c7c_f7a4a43b","line":1144,"in_reply_to":"b047397d_f371385b","updated":"2024-05-13 13:39:34.000000000","message":"Acknowledged","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":1157,"context_line":"To facilitate tracking, commits related to this goal should use the"},{"line_number":1158,"context_line":"gerrit topic::"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"  modernize-networking-model"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":""},{"line_number":1163,"context_line":"Completion Criteria"}],"source_content_type":"text/x-rst","patch_set":19,"id":"a1c597ac_91cd2d31","line":1160,"updated":"2024-04-08 16:45:35.000000000","message":"this is not about the networkign model \nits about the concuancy model\n\nnetworking is secondary so lets use a diffent topic\n\nlike eventlet-removeal or modernize-concurancy-model","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":true,"context_lines":[{"line_number":1157,"context_line":"To facilitate tracking, commits related to this goal should use the"},{"line_number":1158,"context_line":"gerrit topic::"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"  modernize-networking-model"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":""},{"line_number":1163,"context_line":"Completion Criteria"}],"source_content_type":"text/x-rst","patch_set":19,"id":"21c00077_364c12f1","line":1160,"in_reply_to":"57a4f42d_fc15cfe4","updated":"2024-05-13 13:39:34.000000000","message":"Acknowledged","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":1157,"context_line":"To facilitate tracking, commits related to this goal should use the"},{"line_number":1158,"context_line":"gerrit topic::"},{"line_number":1159,"context_line":""},{"line_number":1160,"context_line":"  modernize-networking-model"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":""},{"line_number":1163,"context_line":"Completion Criteria"}],"source_content_type":"text/x-rst","patch_set":19,"id":"57a4f42d_fc15cfe4","line":1160,"in_reply_to":"a1c597ac_91cd2d31","updated":"2024-04-30 10:04:49.000000000","message":"`eventlet-removal` seems a good one. Let\u0027s update it.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"97a5db0f12a3d9cd52a364af13c35a6f01a2a113","unresolved":true,"context_lines":[{"line_number":1214,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"Openstack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1217,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1218,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1219,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"},{"line_number":1220,"context_line":"using this convenience mean allowing readers to read from the same socket and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"c82362a2_9ee9e520","line":1217,"updated":"2024-04-08 16:45:35.000000000","message":"for what its worth this was only recently added to oslo.log and most openstack service that have this enabeld do not rely on this protection being disabled intentionally.\n\nif this is fixed in oslo then for most project it should be fine.\n\nswift has had that code for longer since the current solution was ported form it\nso it may have started to rely on this in other places but we do not dependnd on this fuctionlaity as a design aspect in nova.\n\nwe were unware that this protection was disabeld as a side effect of the oslo.logging bug fix.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"506767b25c0c8b577f495279d6fc2718815da65d","unresolved":true,"context_lines":[{"line_number":1214,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"Openstack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1217,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1218,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1219,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"},{"line_number":1220,"context_line":"using this convenience mean allowing readers to read from the same socket and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"a9b3d896_4984bae7","line":1217,"in_reply_to":"53eeb6d2_45c8d79e","updated":"2024-05-13 13:39:34.000000000","message":"thats an intersting question.\n\nwe coudl have a blocking section but i would not dedicate it to swift.\ni.e. just call out specific anti-pattarens or functionality  that project would have to adress before they can proceed.\n\neven if 99% of those examples came form swift i would not assume those patterns have not spread to other services but in general i think they are contained.\n\nthe oslo.log porting is the only example i am aware of but theyre might be others that others know of.\n\nin general i dont like signling out any given project if an open question/bockers section would be applicable ot others.","commit_id":"9999cef65230d871c3d808908ae54e8432503824"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9972307ea602b2ffba990247361229a3e0aef922","unresolved":true,"context_lines":[{"line_number":1214,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"Openstack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1217,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1218,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1219,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"},{"line_number":1220,"context_line":"using this convenience mean allowing readers to read from the same socket and"}],"source_content_type":"text/x-rst","patch_set":19,"id":"53eeb6d2_45c8d79e","line":1217,"in_reply_to":"c82362a2_9ee9e520","updated":"2024-04-30 10:04:49.000000000","message":"\u003e for what its worth this was only recently added to oslo.log and most openstack service that have this enabeld do not rely on this protection being disabled intentionally.\n\nThe protection was disabled two years ago in oslo.log... that\u0027s not as recent than that. I think this hack is in use in Openstack at least since our alphabet reboot. 3 or 4 Openstack series at least.\n\nOn the other hand, the option to disable this feature is really recent. It was introduced well after the original feature addition.\n\nIn all case that\u0027s not an aspect that really matter here.\n\n\u003e \n\u003e if this is fixed in oslo then for most project it should be fine.\n\nTrue. Refactoring oslo.log to not rely on this eventlet debug hack would unlock our path. It would be transparent for all the projects.\n\n\u003e \n\u003e swift has had that code for longer since the current solution was ported form it\n\u003e so it may have started to rely on this in other places but we do not dependnd on this fuctionlaity as a design aspect in nova.\n\u003e \n\nI think Swift also have other specific eventlet tricks that could be blockers from a global perspective for the migration.\n\nSwift may remains the only part where using the epoll hub would not be an option. However, it would be easy to only pins the requirements of swift rather than constraining all the requirements of all components in the same time. I\u0027d suggest to consider Swift as a really particular use case of the migration.\n\nDo you think we should add a blocking section in this document dedicated to Swift?","commit_id":"9999cef65230d871c3d808908ae54e8432503824"}],"goals/proposed/modernize-openstack-async-model.rst":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"3bffebb1f9486da829ecb63a88bf7edcc38626c2","unresolved":true,"context_lines":[{"line_number":108,"context_line":"asynchronous backend. All the problems described above inherit from choices"},{"line_number":109,"context_line":"made in eventlet, several years ago, to improve older versions of Python,"},{"line_number":110,"context_line":"2.7 at least. All the current issues are related to eventlet design"},{"line_number":111,"context_line":"implementations made for Python EOL versions."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Even if Python 2.7 is now EOL and even if its support have been dropped from"},{"line_number":114,"context_line":"Openstack years ago, nowaday we are still impacted by previous design choices"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a6f41180_dcf4276c","line":111,"updated":"2023-12-04 21:46:04.000000000","message":"One thing that might be worth calling out is that eventlet provides greenthreads which run in a way that feels preemptive even if in a way they are cooperative by calling into monkey patched code paths that allow for context switches. On the other hand asyncio tends to be very cooperative.\n\nI can\u0027t say for sure, but I woudn\u0027t be surprised if a move from eventlet to asyncio also requires a fair bit of rewriting/refactoring of applications to handle the logical change in control flow that happens as a result.\n\nBasically its more than what library do you choose to use; the entire approach to concurrency differs.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"af661229b76a2428b2bcf63b173637666cc120bb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"asynchronous backend. All the problems described above inherit from choices"},{"line_number":109,"context_line":"made in eventlet, several years ago, to improve older versions of Python,"},{"line_number":110,"context_line":"2.7 at least. All the current issues are related to eventlet design"},{"line_number":111,"context_line":"implementations made for Python EOL versions."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Even if Python 2.7 is now EOL and even if its support have been dropped from"},{"line_number":114,"context_line":"Openstack years ago, nowaday we are still impacted by previous design choices"}],"source_content_type":"text/x-rst","patch_set":2,"id":"faf82412_3d2f7a9e","line":111,"in_reply_to":"7a0a2240_827fe86b","updated":"2023-12-22 15:53:22.000000000","message":"I spoke about aioeventlet in this document, we will inspire from aioeventlet, which is a dead and a non official project, to implement aiohub in an official way.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8b55c9083a6df9c222a58e995fc644ae1ee7f4af","unresolved":true,"context_lines":[{"line_number":108,"context_line":"asynchronous backend. All the problems described above inherit from choices"},{"line_number":109,"context_line":"made in eventlet, several years ago, to improve older versions of Python,"},{"line_number":110,"context_line":"2.7 at least. All the current issues are related to eventlet design"},{"line_number":111,"context_line":"implementations made for Python EOL versions."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Even if Python 2.7 is now EOL and even if its support have been dropped from"},{"line_number":114,"context_line":"Openstack years ago, nowaday we are still impacted by previous design choices"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a0a2240_827fe86b","line":111,"in_reply_to":"a6f41180_dcf4276c","updated":"2023-12-05 12:08:49.000000000","message":"Indeed that point needs more focus on this document.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"As Openstack heavily rely on eventlet, and as eventlet manage async and"},{"line_number":145,"context_line":"coroutines by using monkeypatching, that\u0027s not possible to move away from"},{"line_number":146,"context_line":"eventlet without rewriting all Openstack compounents."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"The solution described here propose to smoothly migrate from a broken"},{"line_number":149,"context_line":"eventlet network programming model, to a running asyncio network programming"}],"source_content_type":"text/x-rst","patch_set":2,"id":"591aaa83_b2d728b3","line":146,"range":{"start_line":146,"start_character":41,"end_line":146,"end_character":52},"updated":"2023-12-08 18:59:06.000000000","message":"nit: compounents -\u003e components","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"As Openstack heavily rely on eventlet, and as eventlet manage async and"},{"line_number":145,"context_line":"coroutines by using monkeypatching, that\u0027s not possible to move away from"},{"line_number":146,"context_line":"eventlet without rewriting all Openstack compounents."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"The solution described here propose to smoothly migrate from a broken"},{"line_number":149,"context_line":"eventlet network programming model, to a running asyncio network programming"}],"source_content_type":"text/x-rst","patch_set":2,"id":"8dcbeafc_aa1c5442","line":146,"range":{"start_line":146,"start_character":41,"end_line":146,"end_character":52},"in_reply_to":"591aaa83_b2d728b3","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"   In this case, the Openstack community would win the writing rights in the"},{"line_number":197,"context_line":"   current existing repository and the eventlet library"},{"line_number":198,"context_line":"   would remains a mainstream third party library of the Python community."},{"line_number":199,"context_line":"   That would be a win-win;"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"#. if the current maintainers do not agree with the previous proposal then the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"986d94ec_35d347aa","line":198,"range":{"start_line":198,"start_character":9,"end_line":198,"end_character":16},"updated":"2023-12-08 18:59:06.000000000","message":"nit: remains -\u003e remain","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"   In this case, the Openstack community would win the writing rights in the"},{"line_number":197,"context_line":"   current existing repository and the eventlet library"},{"line_number":198,"context_line":"   would remains a mainstream third party library of the Python community."},{"line_number":199,"context_line":"   That would be a win-win;"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"#. if the current maintainers do not agree with the previous proposal then the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"176b2ebf_f4fd1641","line":198,"range":{"start_line":198,"start_character":9,"end_line":198,"end_character":16},"in_reply_to":"986d94ec_35d347aa","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"#. if the current maintainers do not agree with the previous proposal then the"},{"line_number":202,"context_line":"   Openstack community could try to propose to migrate the official repository"},{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4b059c53_0f13730c","line":203,"range":{"start_line":203,"start_character":36,"end_line":203,"end_character":46},"updated":"2023-12-08 18:59:06.000000000","message":"nit: for example?","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"#. if the current maintainers do not agree with the previous proposal then the"},{"line_number":202,"context_line":"   Openstack community could try to propose to migrate the official repository"},{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"}],"source_content_type":"text/x-rst","patch_set":2,"id":"22e6a68b_2ef78a38","line":203,"range":{"start_line":203,"start_character":36,"end_line":203,"end_character":46},"in_reply_to":"4b059c53_0f13730c","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"},{"line_number":207,"context_line":"   model \u003chttps://releases.openstack.org/reference/release_models.html#independent\u003e`_;"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"#. if the previous proposal do not works as expected, the Openstack community"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c0df74a6_74755dd7","line":206,"updated":"2023-12-08 18:59:06.000000000","message":"Just a small extra for this version that the same processes and CI could work for it what is well known for OS community (gerrit, zuul...) of course an extra burden for the infra team and for the ones who adapt the current CI for example to use zuul","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"28f0b5deb061a853dae1361eceb335a5f78eadb1","unresolved":true,"context_lines":[{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"},{"line_number":207,"context_line":"   model \u003chttps://releases.openstack.org/reference/release_models.html#independent\u003e`_;"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"#. if the previous proposal do not works as expected, the Openstack community"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bc6c7fc1_03982dbd","line":206,"in_reply_to":"b3c9dd47_eb343732","updated":"2023-12-11 09:18:31.000000000","message":"I agree with Jay, if we are not granted to maintain the current github repo of eventlet, a move of eventlet (fork, move) outside of the opendev infra could avoid many inconveniences.\n\nIn the same way, if we gain access to the existing eventlet org/repo, I\u0027d suggest to host the new aiohub project into the eventlet orga. As these 2 libs are closed from each other, I think it makes sense to develop them in parallel in the same org.\n\nThat could be a way to attract developers outside of openstack. Also that approach could help to indicate our intentions and could help to design and provide a global solution tidly coupled. That would help to shape the future of eventlet.\n\nI\u0027ll update the aiohub part below to speak about this option too.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"},{"line_number":207,"context_line":"   model \u003chttps://releases.openstack.org/reference/release_models.html#independent\u003e`_;"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"#. if the previous proposal do not works as expected, the Openstack community"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4ae0ea16_42371e20","line":206,"in_reply_to":"bc6c7fc1_03982dbd","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"267f2f1615efc38ad7ca93707b090072fe169a07","unresolved":true,"context_lines":[{"line_number":203,"context_line":"   into the Openstack organisation. By example by migrating this deliverable"},{"line_number":204,"context_line":"   into the Oslo team umbrella. We would became fully owner of this library"},{"line_number":205,"context_line":"   and this lib would became an Openstack library instead of a third party"},{"line_number":206,"context_line":"   library. It would be surely a deliverable with an `independent release"},{"line_number":207,"context_line":"   model \u003chttps://releases.openstack.org/reference/release_models.html#independent\u003e`_;"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"#. if the previous proposal do not works as expected, the Openstack community"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b3c9dd47_eb343732","line":206,"in_reply_to":"c0df74a6_74755dd7","updated":"2023-12-08 20:12:15.000000000","message":"I think that for this, and the option below, there is an additional, perhaps lower-effort option: fork without migrating infrastructure to OpenDev. Just because OpenStack contributors may come together to maintain eventlet and create an off-ramp for users of it does not mean it has to be under OpenStack governance or hosted in opendev.\n\nEspecially if the project is only going to be around for the short term, and if we want to pull existing project contributors with us, keeping it in the existing venue may be an option worth consideration. This would leave CI as a task for contributors working on eventlet to handle outside of opendev, using tools there (I personally would volunteer to help get CI for this running in Github actions, if this was a choice we made).\n\nI don\u0027t have a strong preference here, other than a general concern that pulling eventlet -- or a fork if needed -- into OpenStack governance / opendev hosting may lead us to leave more existing contributors behind than would be necessary otherwise.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"3bffebb1f9486da829ecb63a88bf7edcc38626c2","unresolved":true,"context_lines":[{"line_number":212,"context_line":"   Openstack community but who could still accept external contributions."},{"line_number":213,"context_line":"   Then we would have to also to fork the existing patches, by example those"},{"line_number":214,"context_line":"   we need to fix CI and Python 3.12, and would have to socialize that"},{"line_number":215,"context_line":"   point with their authors."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"We should notice that the most preferable solution would be to keep"},{"line_number":218,"context_line":"the eventlet library under its current organisation and repository. That"}],"source_content_type":"text/x-rst","patch_set":2,"id":"56c345e6_6d8bd429","line":215,"updated":"2023-12-04 21:46:04.000000000","message":"It may be worth noting here that if we fork that will almost certainly result in new imports for eventlet across all of our software. This is an added cost to going down this road.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8b55c9083a6df9c222a58e995fc644ae1ee7f4af","unresolved":true,"context_lines":[{"line_number":212,"context_line":"   Openstack community but who could still accept external contributions."},{"line_number":213,"context_line":"   Then we would have to also to fork the existing patches, by example those"},{"line_number":214,"context_line":"   we need to fix CI and Python 3.12, and would have to socialize that"},{"line_number":215,"context_line":"   point with their authors."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"We should notice that the most preferable solution would be to keep"},{"line_number":218,"context_line":"the eventlet library under its current organisation and repository. That"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9e8fcb7e_34b4648f","line":215,"in_reply_to":"56c345e6_6d8bd429","updated":"2023-12-05 12:08:49.000000000","message":"Yes, I\u0027ll gave more details about the associated cost and technical debt.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":212,"context_line":"   Openstack community but who could still accept external contributions."},{"line_number":213,"context_line":"   Then we would have to also to fork the existing patches, by example those"},{"line_number":214,"context_line":"   we need to fix CI and Python 3.12, and would have to socialize that"},{"line_number":215,"context_line":"   point with their authors."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"We should notice that the most preferable solution would be to keep"},{"line_number":218,"context_line":"the eventlet library under its current organisation and repository. That"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ad530e58_dc85a9c2","line":215,"in_reply_to":"8ad4eed7_352d7563","updated":"2023-12-22 08:59:01.000000000","message":"With eventlet being maintained again I think this is resolved.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"fcedbcd0633baecfa0c3fdd85326b944a84b4fda","unresolved":true,"context_lines":[{"line_number":212,"context_line":"   Openstack community but who could still accept external contributions."},{"line_number":213,"context_line":"   Then we would have to also to fork the existing patches, by example those"},{"line_number":214,"context_line":"   we need to fix CI and Python 3.12, and would have to socialize that"},{"line_number":215,"context_line":"   point with their authors."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"We should notice that the most preferable solution would be to keep"},{"line_number":218,"context_line":"the eventlet library under its current organisation and repository. That"}],"source_content_type":"text/x-rst","patch_set":2,"id":"8ad4eed7_352d7563","line":215,"in_reply_to":"9e8fcb7e_34b4648f","updated":"2023-12-05 17:37:33.000000000","message":"This would only be the case if we didn\u0027t have buy-in across the eventlet ecosystem to adopt any fork we made. I find it unlikely that eventlet users wouldn\u0027t flock to an actually-maintained version of the library.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"3bffebb1f9486da829ecb63a88bf7edcc38626c2","unresolved":true,"context_lines":[{"line_number":226,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":227,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":228,"context_line":"   #. or decide of fork the lib."},{"line_number":229,"context_line":"#. Merge existing patches;"},{"line_number":230,"context_line":"#. Release changes by creating a new version;"},{"line_number":231,"context_line":"#. Upgrade the Openstack requirements to match this new version;"},{"line_number":232,"context_line":"#. Validate that the main issues are now fixed;"}],"source_content_type":"text/x-rst","patch_set":2,"id":"994e9140_e99a1c58","line":229,"updated":"2023-12-04 21:46:04.000000000","message":"I think a step is missing before \"Merge existing patches\" and that is \"fix test suite for eventlet\" based on what is written above.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8b55c9083a6df9c222a58e995fc644ae1ee7f4af","unresolved":true,"context_lines":[{"line_number":226,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":227,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":228,"context_line":"   #. or decide of fork the lib."},{"line_number":229,"context_line":"#. Merge existing patches;"},{"line_number":230,"context_line":"#. Release changes by creating a new version;"},{"line_number":231,"context_line":"#. Upgrade the Openstack requirements to match this new version;"},{"line_number":232,"context_line":"#. Validate that the main issues are now fixed;"}],"source_content_type":"text/x-rst","patch_set":2,"id":"e470e64b_fa512073","line":229,"in_reply_to":"994e9140_e99a1c58","updated":"2023-12-05 12:08:49.000000000","message":"No, \"fix tests...\" is hidden behind the pluralize of the \"patches\" word. However, to avoid any confusion or doubt I\u0027ll give a more detailed action plan here.\n\nThanks for your remark, it is very valuable.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"b7b200cd4a1678e8accf12cc47609b9a11b10529","unresolved":false,"context_lines":[{"line_number":226,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":227,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":228,"context_line":"   #. or decide of fork the lib."},{"line_number":229,"context_line":"#. Merge existing patches;"},{"line_number":230,"context_line":"#. Release changes by creating a new version;"},{"line_number":231,"context_line":"#. Upgrade the Openstack requirements to match this new version;"},{"line_number":232,"context_line":"#. Validate that the main issues are now fixed;"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4dee8dba_f52f34d3","line":229,"in_reply_to":"e470e64b_fa512073","updated":"2023-12-22 15:45:06.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"At this point eventlet could consider as healthy and Openstack secured."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"As our goal is to move to asyncio, and as eventlet is everywher in Openstack,"},{"line_number":245,"context_line":"we should consider that that\u0027s not possible to make live together these"},{"line_number":246,"context_line":"models."},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"51a44be2_7bdba35e","line":244,"range":{"start_line":244,"start_character":54,"end_line":244,"end_character":63},"updated":"2023-12-08 18:59:06.000000000","message":"nit:everywhere?","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"At this point eventlet could consider as healthy and Openstack secured."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"As our goal is to move to asyncio, and as eventlet is everywher in Openstack,"},{"line_number":245,"context_line":"we should consider that that\u0027s not possible to make live together these"},{"line_number":246,"context_line":"models."},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"cb7e4c81_efb4dd24","line":244,"range":{"start_line":244,"start_character":54,"end_line":244,"end_character":63},"in_reply_to":"51a44be2_7bdba35e","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4b726761c6eed14bc3f6d230f9768c6241f1e19","unresolved":true,"context_lines":[{"line_number":260,"context_line":"   able to migrate their deliverables."},{"line_number":261,"context_line":"#. Maybe some kind of new tooling, like a new linter, who works more or less"},{"line_number":262,"context_line":"   like a kind of `black \u003chttps://github.com/psf/black\u003e`_ can help to identify"},{"line_number":263,"context_line":"   and reformate code that should be rewritten."},{"line_number":264,"context_line":"#. cross testing the 3 previously migrated libraries"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Long terms solutions"}],"source_content_type":"text/x-rst","patch_set":2,"id":"6e0167f3_f8130e11","line":263,"updated":"2023-12-08 18:59:06.000000000","message":"non-voting jobs at least periodic/weekly periodic as soon as possible to have the warning for everybody and have base for the discussions on the team meetings","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"3bffebb1f9486da829ecb63a88bf7edcc38626c2","unresolved":true,"context_lines":[{"line_number":266,"context_line":"Long terms solutions"},{"line_number":267,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated."},{"line_number":270,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":271,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":272,"context_line":"   should be based on asyncio."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bb74a4f2_a6e50846","line":269,"updated":"2023-12-04 21:46:04.000000000","message":"I think \"Migrate\" here isn\u0027t explicit enough. It isn\u0027t clear if the plan is to migrate all of OpenStack to eventlet + oslo.aiohub or simply asyncio and complete removal of eventlet.\n\nBased on the rest of the spec I think the plan is to completely get away from eventlet and that is what this migration refers to. However, that isn\u0027t very explicit and it probably should be to avoid any confusion.\n\nRelated I think we need a \"migrate openstack to eventlet + oslo.aiohub\" intermediate state step either here in long term solutions or the medium term solutions above lists.","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8b55c9083a6df9c222a58e995fc644ae1ee7f4af","unresolved":true,"context_lines":[{"line_number":266,"context_line":"Long terms solutions"},{"line_number":267,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated."},{"line_number":270,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":271,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":272,"context_line":"   should be based on asyncio."}],"source_content_type":"text/x-rst","patch_set":2,"id":"eeeb3f0f_13066260","line":269,"in_reply_to":"bb74a4f2_a6e50846","updated":"2023-12-05 12:08:49.000000000","message":"I agree with you I\u0027ll give a more explicit and detailed plan.\nThanks 😊","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"b7b200cd4a1678e8accf12cc47609b9a11b10529","unresolved":false,"context_lines":[{"line_number":266,"context_line":"Long terms solutions"},{"line_number":267,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated."},{"line_number":270,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":271,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":272,"context_line":"   should be based on asyncio."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7374eb3a_c4007898","line":269,"in_reply_to":"eeeb3f0f_13066260","updated":"2023-12-22 15:45:06.000000000","message":"Done","commit_id":"d95a2302a33d87f2ebf1fae45f5df95d13161df2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"fcedbcd0633baecfa0c3fdd85326b944a84b4fda","unresolved":true,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Here is the plan to success this milestone:"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":259,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"}],"source_content_type":"text/x-rst","patch_set":3,"id":"2b715f23_288352ef","line":256,"updated":"2023-12-05 17:37:33.000000000","message":"I\u0027m afraid this is ... optimistic. I don\u0027t think they are responsive right now on Github, to comments or changes or really anything. Just noting that while we *should* do this for completeness, we shouldn\u0027t wait for a response or expect much from this contact.","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f219e8630ef513e7a24944e2677e44b441def355","unresolved":true,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Here is the plan to success this milestone:"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":259,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"}],"source_content_type":"text/x-rst","patch_set":3,"id":"efe9f828_d0693a5f","line":256,"in_reply_to":"2b715f23_288352ef","updated":"2023-12-05 18:08:52.000000000","message":"Yeah I\u0027m also afraid of that. I\u0027ll init this discussion in the coming days, even if the proposal is not fully finished, to allow us to win time.","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Here is the plan to success this milestone:"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":259,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f676bd28_8a2c121c","line":256,"in_reply_to":"efe9f828_d0693a5f","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"c3766db07b349ea7dd2787bf068acb8f4050fd26"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":119,"context_line":"made for it."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Is all this eventlet problem are solvable? Is the gap recoverable?"},{"line_number":122,"context_line":"Yes, but at at a significant cost."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Investing money, time, and engineering skills in a solution that will continue"},{"line_number":125,"context_line":"to diverge from the main runtime pillar of Openstack, Python, isn\u0027t something"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9edd0352_fcb3abaf","line":122,"range":{"start_line":122,"start_character":9,"end_line":122,"end_character":15},"updated":"2023-12-06 09:16:42.000000000","message":"nitty nit: double \"at\"","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"made for it."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Is all this eventlet problem are solvable? Is the gap recoverable?"},{"line_number":122,"context_line":"Yes, but at at a significant cost."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Investing money, time, and engineering skills in a solution that will continue"},{"line_number":125,"context_line":"to diverge from the main runtime pillar of Openstack, Python, isn\u0027t something"}],"source_content_type":"text/x-rst","patch_set":4,"id":"b4c3901a_3d5a1b69","line":122,"range":{"start_line":122,"start_character":9,"end_line":122,"end_character":15},"in_reply_to":"9edd0352_fcb3abaf","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"As Openstack heavily rely on eventlet, and as eventlet manage async and"},{"line_number":167,"context_line":"coroutines by using monkeypatching, that\u0027s not possible to move away from"},{"line_number":168,"context_line":"eventlet without rewriting all Openstack compounents."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The solution described here propose to smoothly migrate from a broken"},{"line_number":171,"context_line":"eventlet network programming model, to a running asyncio network programming"}],"source_content_type":"text/x-rst","patch_set":4,"id":"cb1246cd_e758f56b","line":168,"range":{"start_line":168,"start_character":41,"end_line":168,"end_character":52},"updated":"2023-12-06 09:16:42.000000000","message":"components","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"As Openstack heavily rely on eventlet, and as eventlet manage async and"},{"line_number":167,"context_line":"coroutines by using monkeypatching, that\u0027s not possible to move away from"},{"line_number":168,"context_line":"eventlet without rewriting all Openstack compounents."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"The solution described here propose to smoothly migrate from a broken"},{"line_number":171,"context_line":"eventlet network programming model, to a running asyncio network programming"}],"source_content_type":"text/x-rst","patch_set":4,"id":"6ee31815_5faa3c75","line":168,"range":{"start_line":168,"start_character":41,"end_line":168,"end_character":52},"in_reply_to":"cb1246cd_e758f56b","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The solution propose 3 global milestones, short, medium, and long term, and"},{"line_number":176,"context_line":"plan to try to define to how to migrate a single deliverable. Those plans"},{"line_number":177,"context_line":"are discribed in the following sections."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"The global duration of this goal could at least two or three years and could"},{"line_number":180,"context_line":"be run over five to six series."}],"source_content_type":"text/x-rst","patch_set":4,"id":"e7a591ef_a489ceb4","line":177,"range":{"start_line":177,"start_character":4,"end_line":177,"end_character":13},"updated":"2023-12-06 09:16:42.000000000","message":"described","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"The solution propose 3 global milestones, short, medium, and long term, and"},{"line_number":176,"context_line":"plan to try to define to how to migrate a single deliverable. Those plans"},{"line_number":177,"context_line":"are discribed in the following sections."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"The global duration of this goal could at least two or three years and could"},{"line_number":180,"context_line":"be run over five to six series."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5afefae3_5302bb16","line":177,"range":{"start_line":177,"start_character":4,"end_line":177,"end_character":13},"in_reply_to":"e7a591ef_a489ceb4","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":202,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."},{"line_number":203,"context_line":"- The broken support of Python 3.12 (https://github.com/eventlet/eventlet/pull/817)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"The main problemfor the Openstack community, with these patches, is now to see"},{"line_number":206,"context_line":"them merged in time to match the Openstack calendar."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Three paths exists to hope to see these merger happens:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"572e51c3_7ec8556b","line":205,"range":{"start_line":205,"start_character":9,"end_line":205,"end_character":19},"updated":"2023-12-06 09:16:42.000000000","message":"problem for","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":202,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."},{"line_number":203,"context_line":"- The broken support of Python 3.12 (https://github.com/eventlet/eventlet/pull/817)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"The main problemfor the Openstack community, with these patches, is now to see"},{"line_number":206,"context_line":"them merged in time to match the Openstack calendar."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Three paths exists to hope to see these merger happens:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ac1246d5_e08ad299","line":205,"range":{"start_line":205,"start_character":9,"end_line":205,"end_character":19},"in_reply_to":"572e51c3_7ec8556b","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":260,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":261,"context_line":"   #. or decide of fork the lib."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"#. (optional - fork and move only) If eventlet will be forked or moved into"},{"line_number":264,"context_line":"   the Openstack organization then we would have to adapt testing and project"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e956b738_85ed8d92","line":261,"range":{"start_line":259,"start_character":0,"end_line":261,"end_character":32},"updated":"2023-12-06 09:16:42.000000000","message":"do we want to set any deadline to try to reach out to the current maintainers? When we should say \"ok, we tried but they didn\u0027t respond at all so we need to fork it\"?","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":260,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":261,"context_line":"   #. or decide of fork the lib."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"#. (optional - fork and move only) If eventlet will be forked or moved into"},{"line_number":264,"context_line":"   the Openstack organization then we would have to adapt testing and project"}],"source_content_type":"text/x-rst","patch_set":4,"id":"cc9b068c_8c43c989","line":261,"range":{"start_line":259,"start_character":0,"end_line":261,"end_character":32},"in_reply_to":"74bfe0b3_2d4e8806","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":true,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"#. Start the discussion with current maintainers;"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"#. gain write access to the current repo and if not:"},{"line_number":260,"context_line":"   #. propse to migrate the lib into the Openstack organisation;"},{"line_number":261,"context_line":"   #. or decide of fork the lib."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"#. (optional - fork and move only) If eventlet will be forked or moved into"},{"line_number":264,"context_line":"   the Openstack organization then we would have to adapt testing and project"}],"source_content_type":"text/x-rst","patch_set":4,"id":"74bfe0b3_2d4e8806","line":261,"range":{"start_line":259,"start_character":0,"end_line":261,"end_character":32},"in_reply_to":"e956b738_85ed8d92","updated":"2023-12-22 15:57:49.000000000","message":"I added some sort of deadlines, let me know if they match your expectations.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":278,"context_line":"   especially to inform authors of eventlets pull requests and allow them"},{"line_number":279,"context_line":"   to migrate their works."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. (optional - for and move only) Cherry pick the existing CI fix into the"},{"line_number":282,"context_line":"   new repository of eventlet into the Openstack organisation"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"#. Merge the CI patches."}],"source_content_type":"text/x-rst","patch_set":4,"id":"d36824d3_cdb38ddd","line":281,"range":{"start_line":281,"start_character":15,"end_line":281,"end_character":18},"updated":"2023-12-06 09:16:42.000000000","message":"fork","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":278,"context_line":"   especially to inform authors of eventlets pull requests and allow them"},{"line_number":279,"context_line":"   to migrate their works."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. (optional - for and move only) Cherry pick the existing CI fix into the"},{"line_number":282,"context_line":"   new repository of eventlet into the Openstack organisation"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"#. Merge the CI patches."}],"source_content_type":"text/x-rst","patch_set":4,"id":"d50d8844_c2ef77d4","line":281,"range":{"start_line":281,"start_character":15,"end_line":281,"end_character":18},"in_reply_to":"d36824d3_cdb38ddd","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":300,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":301,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":302,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":303,"context_line":"   out that we must still avoid at all costs."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":306,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":4,"id":"2be76bc5_d6400287","line":303,"updated":"2023-12-06 09:16:42.000000000","message":"what will be default Python version in Ubuntu 24.04? Is it known already?","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2f0038440bcdbd381d42eb27de7dc197c69269d2","unresolved":true,"context_lines":[{"line_number":300,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":301,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":302,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":303,"context_line":"   out that we must still avoid at all costs."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":306,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":4,"id":"dee99474_b1422e27","line":303,"in_reply_to":"2be76bc5_d6400287","updated":"2023-12-06 14:35:50.000000000","message":"Apparently 3.11 and 3.12 https://launchpad.net/ubuntu/noble/+package/python3-all","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"b7b200cd4a1678e8accf12cc47609b9a11b10529","unresolved":false,"context_lines":[{"line_number":300,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":301,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":302,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":303,"context_line":"   out that we must still avoid at all costs."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":306,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7838067d_0f2a90ec","line":303,"in_reply_to":"afa0154b_f40e1b6b","updated":"2023-12-22 15:45:06.000000000","message":"ok","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":true,"context_lines":[{"line_number":300,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":301,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":302,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":303,"context_line":"   out that we must still avoid at all costs."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":306,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":4,"id":"afa0154b_f40e1b6b","line":303,"in_reply_to":"dee99474_b1422e27","updated":"2023-12-22 08:59:01.000000000","message":"that will be the available versions. afaict the default will still be 3.11? https://launchpad.net/ubuntu/noble/+package/python3\n\nbut also I think we have pretty good chances now that this option won\u0027t be needed, as it would have strong effects on at least Debian and Fedora.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":399,"context_line":"   please refer to the following section named \"How to migrate a library or a"},{"line_number":400,"context_line":"   service\""},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":403,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":404,"context_line":"   should be based on asyncio."},{"line_number":405,"context_line":"#. Once all the Openstack migration would be done we would have to Plan the"},{"line_number":406,"context_line":"   retirement of eventlet in the case the Openstack community own its"},{"line_number":407,"context_line":"   repository, or we at least we would have to socialize the fact that we don\u0027t "}],"source_content_type":"text/x-rst","patch_set":4,"id":"a4d1ba64_62c5616d","line":404,"range":{"start_line":402,"start_character":3,"end_line":404,"end_character":30},"updated":"2023-12-06 09:16:42.000000000","message":"practically speaking IMHO most problematic may be not \"big\" components like Nova but smaller ones which aren\u0027t really well maintained. I think we will need to set some deadline for that at some point (not now of course), otherwise we will never reach the point where everything is using only asyncio and oslo.aiohub can be retired","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":399,"context_line":"   please refer to the following section named \"How to migrate a library or a"},{"line_number":400,"context_line":"   service\""},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":403,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":404,"context_line":"   should be based on asyncio."},{"line_number":405,"context_line":"#. Once all the Openstack migration would be done we would have to Plan the"},{"line_number":406,"context_line":"   retirement of eventlet in the case the Openstack community own its"},{"line_number":407,"context_line":"   repository, or we at least we would have to socialize the fact that we don\u0027t "}],"source_content_type":"text/x-rst","patch_set":4,"id":"ee726623_e6acb199","line":404,"range":{"start_line":402,"start_character":3,"end_line":404,"end_character":30},"in_reply_to":"0131b871_750f4fcd","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2f0038440bcdbd381d42eb27de7dc197c69269d2","unresolved":true,"context_lines":[{"line_number":399,"context_line":"   please refer to the following section named \"How to migrate a library or a"},{"line_number":400,"context_line":"   service\""},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"#. Once all the deliverables are migrated, it would be time to retire the"},{"line_number":403,"context_line":"   previously created oslo.aiohub project because every Openstack pieces"},{"line_number":404,"context_line":"   should be based on asyncio."},{"line_number":405,"context_line":"#. Once all the Openstack migration would be done we would have to Plan the"},{"line_number":406,"context_line":"   retirement of eventlet in the case the Openstack community own its"},{"line_number":407,"context_line":"   repository, or we at least we would have to socialize the fact that we don\u0027t "}],"source_content_type":"text/x-rst","patch_set":4,"id":"0131b871_750f4fcd","line":404,"range":{"start_line":402,"start_character":3,"end_line":404,"end_character":30},"in_reply_to":"a4d1ba64_62c5616d","updated":"2023-12-06 14:35:50.000000000","message":"good point","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":484,"context_line":"puppet or ansible based Openstack deliverables."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Migrating a library would mean:"},{"line_number":487,"context_line":"#. forking the library"},{"line_number":488,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":489,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":490,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"cf24d547_ece7bf99","line":487,"range":{"start_line":487,"start_character":3,"end_line":487,"end_character":22},"updated":"2023-12-06 09:16:42.000000000","message":"wouldn\u0027t it be too much work for infra team to actually create so many new repositories?","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ec3ac6ae11399edca47f76170f8749329f9d9708","unresolved":true,"context_lines":[{"line_number":484,"context_line":"puppet or ansible based Openstack deliverables."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Migrating a library would mean:"},{"line_number":487,"context_line":"#. forking the library"},{"line_number":488,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":489,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":490,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"81020537_8a661fd5","line":487,"range":{"start_line":487,"start_character":3,"end_line":487,"end_character":22},"in_reply_to":"4b72ccab_b4762855","updated":"2023-12-26 15:23:30.000000000","message":"that\u0027s correct, os-brick doesn\u0027t import/use eventlet directly","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":484,"context_line":"puppet or ansible based Openstack deliverables."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Migrating a library would mean:"},{"line_number":487,"context_line":"#. forking the library"},{"line_number":488,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":489,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":490,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"2d85664a_3ce28c88","line":487,"range":{"start_line":487,"start_character":3,"end_line":487,"end_character":22},"in_reply_to":"81020537_8a661fd5","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2f0038440bcdbd381d42eb27de7dc197c69269d2","unresolved":true,"context_lines":[{"line_number":484,"context_line":"puppet or ansible based Openstack deliverables."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Migrating a library would mean:"},{"line_number":487,"context_line":"#. forking the library"},{"line_number":488,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":489,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":490,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df9ba4e3_2acacc20","line":487,"range":{"start_line":487,"start_character":3,"end_line":487,"end_character":22},"in_reply_to":"cf24d547_ece7bf99","updated":"2023-12-06 14:35:50.000000000","message":"As the migration rely mainly on human resources, I don\u0027t think we have to fork everything at the same time, the forks could be created one at time, when people start migrating one specific deliverable. In other words, one or a couple of deliverable at time for a given team, depending on the free human resources related to this team.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f52cae18e243cf1c7a3464cab64f0dc626ccf37","unresolved":true,"context_lines":[{"line_number":484,"context_line":"puppet or ansible based Openstack deliverables."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Migrating a library would mean:"},{"line_number":487,"context_line":"#. forking the library"},{"line_number":488,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":489,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":490,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4b72ccab_b4762855","line":487,"range":{"start_line":487,"start_character":3,"end_line":487,"end_character":22},"in_reply_to":"df9ba4e3_2acacc20","updated":"2023-12-20 19:55:25.000000000","message":"for some libs like os-vif we already have a policy of never directly calling eventlet. i belive the same was or should eb true ro os-brick.\n\nso i dont thnk we will need to fork many libs.\n\nbut i also dont th9ink forking is the best approch here\nif we can supprot both modes of operation in the same code base we should for the openstack libs.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":498,"context_line":"   original version of that library"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Migrating a service would mean:"},{"line_number":501,"context_line":"#. (optional) forking the service"},{"line_number":502,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":503,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":504,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"f4557034_82026c50","line":501,"range":{"start_line":501,"start_character":3,"end_line":501,"end_character":33},"updated":"2023-12-06 09:16:42.000000000","message":"and even more with this optional step","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03a4949da8415b353cec7b68f69df00e3c72494e","unresolved":true,"context_lines":[{"line_number":498,"context_line":"   original version of that library"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Migrating a service would mean:"},{"line_number":501,"context_line":"#. (optional) forking the service"},{"line_number":502,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":503,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":504,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"a374a194_e3190dec","line":501,"range":{"start_line":501,"start_character":3,"end_line":501,"end_character":33},"in_reply_to":"03f55f41_20cd4953","updated":"2023-12-21 15:38:26.000000000","message":"for nova specificaly we currently have the following binaries\n\nconsole_scripts \u003d\n    nova-api \u003d nova.cmd.api:main\n    nova-api-metadata \u003d nova.cmd.api_metadata:main\n    nova-api-os-compute \u003d nova.cmd.api_os_compute:main\n    nova-compute \u003d nova.cmd.compute:main\n    nova-conductor \u003d nova.cmd.conductor:main\n    nova-manage \u003d nova.cmd.manage:main\n    nova-novncproxy \u003d nova.cmd.novncproxy:main\n    nova-policy \u003d nova.cmd.policy:main\n    nova-rootwrap \u003d oslo_rootwrap.cmd:main\n    nova-rootwrap-daemon \u003d oslo_rootwrap.cmd:daemon\n    nova-scheduler \u003d nova.cmd.scheduler:main\n    nova-serialproxy \u003d nova.cmd.serialproxy:main\n    nova-spicehtml5proxy \u003d nova.cmd.spicehtml5proxy:main\n    nova-status \u003d nova.cmd.status:main\n    \n\nrest apis    \nnova-api \u003d nova.cmd.api:main\nnova-api-metadata \u003d nova.cmd.api_metadata:main\nnova-api-os-compute \u003d nova.cmd.api_os_compute:main\n\nall three of these entry points use eventlet to serve the wsgi applciation via a python webserver. nova-api just servers both the metadata and comptue endpoint form teh same webserver\n\nthe metadtaa api does not actuly use eventlet explcitly so that should jsut work under a diffent webserver either the built in oen form the python stdlib or we can use a alternitve such as flask or grnicorn to have the same effect\n\nwe could also just remove these entirly and only supprot wsgi script and leave the webserver to the user.\n\nthe compute api currently has a direct eventlet dep btu it did not for years and we have plans to remove that again https://review.opendev.org/c/openstack/nova/+/650172\n\nso i think nova can remove all useage of eventlet form our rest apis in the caracal cycle with little direct impact.\n\n\nnova does not actully use rootwap os-brick does\nso these are largely irrlevent i dont think we need eventlet in them so we can ignore them for now.\n    nova-rootwrap \u003d oslo_rootwrap.cmd:main\n    nova-rootwrap-daemon \u003d oslo_rootwrap.cmd:daemon\n\nthe command line clients \nnova-policy \u003d nova.cmd.policy:main\nnova-status \u003d nova.cmd.status:main\nnova-manage \u003d nova.cmd.manage:main\nare monkey patch but i dont belive we use eventlet directly in any of them and it woudl be trivial to use somethign else if we are.\ni think it would be very simple to make them not use eventlet and keep it that way goign forward.\n\nThe proxies are basically using websockify to serve a tcp session as a websocket\nwhile they use eventlet we coudl liketly rewrite those with litlel efferot to\nwork using flask or fastapi and asyncio perhaps making them a wsgi/asgi applicaiton\nalthough since they export long lived seesion it may not fit with that model.\nnova-novncproxy \u003d nova.cmd.novncproxy:main\nnova-serialproxy \u003d nova.cmd.serialproxy:main\nnova-spicehtml5proxy \u003d nova.cmd.spicehtml5proxy:main\n\n\nThat just leave the nova deliveables that do the heavy lifting\n\n nova-compute \u003d nova.cmd.compute:main\n nova-conductor \u003d nova.cmd.conductor:main\n nova-scheduler \u003d nova.cmd.scheduler:main\n \nthese will be the hardest ot decouple\nthe schduler will be the simplest of the 3 followed likely by the conductor and then compute\n\nwhile it wont require an entire rewite of those three it will require a signifcant rewrite.\n\nmy proposal would be to have a spec to remove the use of eventlet form everythign excpet  nova-compute, nova-conductor, and nova-scheduler in D which we can even start making progress on in caracal by removing the usage in teh nova api adn metadta api which melany has already started.\n\nthe proxies would allwo us to prototype an asycio based nova-servce binary that can then be reused for the schduler and conductor.\n\nnova-comptue may well be the hardest to refactor which is why i woudl do that last.\n\nso to your question of tracking when its compelted i think we can use spec to track that and have the project teams self report there progress.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ee0cf602112b91db19c64f40dc8dbb9a040ecf2e","unresolved":true,"context_lines":[{"line_number":498,"context_line":"   original version of that library"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Migrating a service would mean:"},{"line_number":501,"context_line":"#. (optional) forking the service"},{"line_number":502,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":503,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":504,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"03f55f41_20cd4953","line":501,"range":{"start_line":501,"start_character":3,"end_line":501,"end_character":33},"in_reply_to":"678b5c45_dd37403c","updated":"2023-12-21 15:07:20.000000000","message":"Thanks Sean for your feedback, your perspective is really interesting. I agree with you. I\u0027ll try to rework my proposal to adapt to your proposed solution.\n\nHow do you think we can know if a service like nova is fully migrated? In other words, how do you think we can measure the advancement of the migration in services like nova?\n\nI think migrations should happen in 2 times, firstly, we migrate the runtime code, and secondly we migrate the unit tests. If aiohub is in the middle, I don\u0027t think it will be an issue. Migrating tests in a second time would warrant that runtime  things are not broken and that CI are not green because we adapted the tests in the same time.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"12da463a5ab8dd3e7eb28793f878005791d71234","unresolved":true,"context_lines":[{"line_number":498,"context_line":"   original version of that library"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Migrating a service would mean:"},{"line_number":501,"context_line":"#. (optional) forking the service"},{"line_number":502,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":503,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":504,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"166b7566_dacdde05","line":501,"range":{"start_line":501,"start_character":3,"end_line":501,"end_character":33},"in_reply_to":"a374a194_e3190dec","updated":"2023-12-21 15:52:58.000000000","message":"by the way im currently leanign toward using \nhttps://fastapi.tiangolo.com/ flask or https://docs.python.org/3/library/http.server.html#http.server.ThreadingHTTPServer as apprpirate to remove some of oru dependence on our custom wsgi frameworks like paste/paste deploy.\n\n\nim currently adding a new healtcheck endpoint to nova that would be exposed usign the eventlet webserver and im stongly considerign rewriting that o just use\n\nThreadingHTTPServer to serve it as a flask or fastapi app based on this and other converstaions to not add any more debth we will need to port.\n\nmoving away form some of our custom wsgi tooling is a sliightly diffent topic.\nbut i do see advanages in fastapi/flask as a way to reduce related tech debt in the api space. in general providing wsgi/asgi applciation that can be used with any web server that support those protocal i think will be better in in teh long run instead of haveing console script spin up a webserver to serve them. so the solution might be to jsut remove those console script and move to that model for all rest api. i.e. tell people if they want to run nova-api use gunicorn or uwsgi or mod_wsgi which is what keystone did years ago.\n\nif think fastapi/flask will be what we should use to reimplement our console proxies for example and then jsut run them as a wsgi app. we can deprecate teh console script in D/E and remove them in F using ThreadingHTTPServer instead of eventlests webserver for the transiton period while tooling catches up with usign them as wsgi applciations.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f52cae18e243cf1c7a3464cab64f0dc626ccf37","unresolved":true,"context_lines":[{"line_number":498,"context_line":"   original version of that library"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"Migrating a service would mean:"},{"line_number":501,"context_line":"#. (optional) forking the service"},{"line_number":502,"context_line":"#. creating a new release deliverable corresponding to this instance"},{"line_number":503,"context_line":"#. starting by moving requirements to versions of libraries already fully"},{"line_number":504,"context_line":"   migrated"}],"source_content_type":"text/x-rst","patch_set":4,"id":"678b5c45_dd37403c","line":501,"range":{"start_line":501,"start_character":3,"end_line":501,"end_character":33},"in_reply_to":"f4557034_82026c50","updated":"2023-12-20 19:55:25.000000000","message":"forking nova is not something that is goingto happen imo\n\nwe need a way to opt into one or the other modle\n\nwaht that might mean is providing 2 console script entry points \n\nnova-compute would becoem\n\nnova-compute, nova-compute-eventlet and nova-comptue-asyncio\nwith nova-comptue initally being an alias for nova-compute-eventlet\n\n\nalternitivly we could supprot the diffent code paths via config options or envionement variabels.\n\nit reallly depend on what the incremental improment looks like.\n\nif we fork however we are going to have the python2 python 3 problem of on going code devleopemtn happing in both in parallel\n\nin my view that will make this unacivhable and fork our comunity so i dont think this is a good approch to take at all.","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3ecbb78007fbe1df3667fcae35295cdc0e6fea2b","unresolved":true,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"The Openstack community could continue to take advantage of this position."},{"line_number":522,"context_line":"Indeed, if needed, the Openstack community could also afford its help to the"},{"line_number":523,"context_line":"Python ommunity and propose PEP that could be shared topics between the"},{"line_number":524,"context_line":"communities, and that could benefit to every Python developer across the"},{"line_number":525,"context_line":"world."},{"line_number":526,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"a57a2137_f0ff3594","line":523,"range":{"start_line":523,"start_character":7,"end_line":523,"end_character":15},"updated":"2023-12-06 09:16:42.000000000","message":"nitty nit: community","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"The Openstack community could continue to take advantage of this position."},{"line_number":522,"context_line":"Indeed, if needed, the Openstack community could also afford its help to the"},{"line_number":523,"context_line":"Python ommunity and propose PEP that could be shared topics between the"},{"line_number":524,"context_line":"communities, and that could benefit to every Python developer across the"},{"line_number":525,"context_line":"world."},{"line_number":526,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f7109ae_23caf388","line":523,"range":{"start_line":523,"start_character":7,"end_line":523,"end_character":15},"in_reply_to":"a57a2137_f0ff3594","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"ff3620f6a97325417df544a599d0040011274296"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"267f2f1615efc38ad7ca93707b090072fe169a07","unresolved":true,"context_lines":[{"line_number":269,"context_line":"Indeed moving or forking eventlet into the Openstack organization also mean"},{"line_number":270,"context_line":"adapting all the project structure to become compatible with the Openstack"},{"line_number":271,"context_line":"machinery (zuul, gerrit, sphinx, pbr, reno, ...). That\u0027s lot of works to do"},{"line_number":272,"context_line":"before being ready for the main part of this topic."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Here is a plan proposal to see this milestone succeed:"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"81cb2301_71c4b30d","line":272,"updated":"2023-12-08 20:12:15.000000000","message":"See above comment. I think there are middle grounds where we could retain much of the existing infrastructure even if we had to fork into a different github organization and pypi project name.","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":false,"context_lines":[{"line_number":269,"context_line":"Indeed moving or forking eventlet into the Openstack organization also mean"},{"line_number":270,"context_line":"adapting all the project structure to become compatible with the Openstack"},{"line_number":271,"context_line":"machinery (zuul, gerrit, sphinx, pbr, reno, ...). That\u0027s lot of works to do"},{"line_number":272,"context_line":"before being ready for the main part of this topic."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Here is a plan proposal to see this milestone succeed:"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4bd2296d_bb04abbd","line":272,"in_reply_to":"08afdba4_f4dae2ca","updated":"2023-12-22 08:59:01.000000000","message":"Done","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"28f0b5deb061a853dae1361eceb335a5f78eadb1","unresolved":true,"context_lines":[{"line_number":269,"context_line":"Indeed moving or forking eventlet into the Openstack organization also mean"},{"line_number":270,"context_line":"adapting all the project structure to become compatible with the Openstack"},{"line_number":271,"context_line":"machinery (zuul, gerrit, sphinx, pbr, reno, ...). That\u0027s lot of works to do"},{"line_number":272,"context_line":"before being ready for the main part of this topic."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Here is a plan proposal to see this milestone succeed:"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"08afdba4_f4dae2ca","line":272,"in_reply_to":"81cb2301_71c4b30d","updated":"2023-12-11 09:18:31.000000000","message":"Yes, I\u0027ll update this proposal to add your option","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"912d400fe1979c5942b85b39beb310c739ba6378","unresolved":true,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b0dca66a_ae11b9be","line":361,"updated":"2023-12-07 22:59:00.000000000","message":"Some notes on how aiohub might be implemented:\n\n# Asyncio compatibility in eventlet\n\nIt should be possible to:\n\n* Run eventlet and asyncio in the same thread.\n* Allow asyncio and eventlet to interact: eventlet code can use asyncio-based libraries, asyncio-based code can get results out of eventlet.\n\nIf this works, it would allow migrating from eventlet to asyncio in a gradual manner both within and across projects:\n\n1. Within an OpenStack library, code could be a mixture of asyncio and eventlet code.\n   This means migration doesn\u0027t have to be done in one stop, neither in libraries nor in the applications that depend on them.\n2. Even when an OpenStack library fully migrates to asyncio, it will still be usable by anything that is still running on eventlet.\n\n## Prior art\n\n* Gevent has a similar model to eventlet.\n  There exists an integration between gevent and asyncio that follows model proposed below: https://pypi.org/project/asyncio-gevent/\n* Twisted can run on top of the asyncio event loop.\n  Separately, it includes utilities for mapping its `Deferred` objects (similar to a JavaScript Promise) to the async/await model introduced in newer versions in Python 3, and in the opposite direction it added support for turning async/await functions into `Deferred`s.\n  In an eventlet context, `GreenThread` would need a similar former of integration to Twisted\u0027s `Deferred`.\n\n## Part 1: Implementing asyncio/eventlet interoperability\n\nThere are three different parts involved in integrating eventlet and asyncio for purposes\n\n### 1. Create a hub that runs on asyncio\n\nLike many networking frameworks, eventlet has pluggable event loops, in this case called a \"hub\". Typically hubs wrap system APIs like `select()` and `epoll()`, but there also used to be a hub that ran on Twisted.\nCreating a hub that runs on top of the asyncio event loop should be fairly straightforward.\n\nOnce this is done, eventlet and asyncio code can run in the same process and the same thread, but they would still have difficulties talking to each other.\nThis latter requirement requires additional work, as covered by the next two items.\n\n### 2. Calling `async def` functions from eventlet\n\nThe goal is to allow something like this:\n\n```python\nimport aiohttp\nfrom eventlet_asyncio import future_to_greenlet  # hypothetical API\n\nasync def get_url_body(url):\n    async with aiohttp.ClientSession() as session:\n        async with session.get(url) as response:\n            return await response.text()\n\ndef eventlet_code():\n    green_thread \u003d future_to_greenlet(get_url_body(\"https://example.com\"))\n    return green_thread.wait()\n```\n\nThe code would presumably be similar to https://github.com/gfmio/asyncio-gevent/blob/main/asyncio_gevent/future_to_greenlet.py\n\n### 3. Calling eventlet code from asyncio\n\nThe goal is to allow something like this:\n\n```python\nfrom urllib.request import urlopen\nfrom eventlet import spawn\nfrom eventlet_asyncio import greenlet_to_future  # hypothetical API\n\ndef get_url_body(url):\n    # Looks blocking, but actually isn\u0027t\n    return urlopen(url).read()\n\n# This would likely be common pattern, so could be implemented as decorator...\nasync def asyncio_code():\n    greenlet \u003d eventlet.spawn(get_url_body, \"https://example.com\")\n    future \u003d greenlet_to_future(greenlet)\n    return await future\n```\n\nThe code would presumably be similar to https://github.com/gfmio/asyncio-gevent/blob/main/asyncio_gevent/future_to_greenlet.py\n\n## Part 2: How a port would work on a technical level\n\n### Porting a library\n\n1. Usage of eventlet-based APIs would be replaced with usage of asyncio APIs.\n   For example, `urllib` or `requests` might be replaced with [`aiohttp`](https://docs.aiohttp.org/en/stable/).\n   The interoperability above can be used to make sure this continues to work with eventlet-based APIs.\n2. Over time, APIs would need be migrated to be `async` function, but in the intermediate time frame a standard `def` can still be used, again using the interoperability layer above.\n3. Eventually all \"blocking\" APIs have been removed, at which point everything can be switched to `async def` and `await`, including external API, and the library will no longer depend on eventlet.\n\n### Porting an application\n\nAn application would need to install the asyncio hub before kicking off eventlet.\nBeyond that porting would be the same as a library.\n\nOnce all libraries are purely asyncio-based, eventlet usage can be removed and an asyncio loop run instead.","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ffdbc874_c7feb6dd","line":361,"in_reply_to":"0b7ae4e7_2a362cc4","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9dbc2c35758bae97254bae7a2cf2904d9be3b599","unresolved":true,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e890882f_e3748ac5","line":361,"in_reply_to":"606f56f0_34ed95e8","updated":"2023-12-11 10:32:44.000000000","message":"These notes and the next related ones are now hosted in https://wiki.openstack.org/wiki/Aiohub-Discussion","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2421d8610058e87fc90c5d97ae6caeeda013238d","unresolved":true,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"606f56f0_34ed95e8","line":361,"in_reply_to":"b0dca66a_ae11b9be","updated":"2023-12-08 13:11:51.000000000","message":"Awesome, thank you","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"fe05894e1f66cc94acce308a081ef0bfa00a4d9d","unresolved":true,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0b7ae4e7_2a362cc4","line":361,"in_reply_to":"b8216367_45e05807","updated":"2023-12-22 13:25:14.000000000","message":"Yes","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":true,"context_lines":[{"line_number":358,"context_line":"   rewrite/refactor of applications to handle the logical change in control"},{"line_number":359,"context_line":"   flow that happens as a result."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":362,"context_line":"(2024.10/D) to design and implement the transitive engine (oslo.aiohub) that"},{"line_number":363,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":364,"context_line":"first bricks:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b8216367_45e05807","line":361,"in_reply_to":"e890882f_e3748ac5","updated":"2023-12-22 08:59:01.000000000","message":"does it make sense to link to that wiki page from this doc so that this comment can be marked as resolved?","commit_id":"bda0a40d22dd6ba49ef3dbf69bb8886329647ac4"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3886aa5f6dc17a7bd02eec0a6f0a2643dcfde220","unresolved":true,"context_lines":[{"line_number":107,"context_line":"Thinking that the recent lack of maintenance in eventlet explain our current"},{"line_number":108,"context_line":"issue and hoping that simply fixing two or three things will unlock our"},{"line_number":109,"context_line":"problem is just hypothetical. When the `GIL removal (for now just optional) \u003chttps://peps.python.org/pep-0703/\u003e`_"},{"line_number":110,"context_line":"will become a reality we will surely live in a nightmare. Thinking that way"},{"line_number":111,"context_line":"will sooner lead us toward deeper moats which are impossible to cross."},{"line_number":112,"context_line":"Thinking that way already led us to stick to EOLed design of CPython."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"6203bbb3_bfb8c744","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":56},"updated":"2023-12-12 18:55:15.000000000","message":"I\u0027m not onboard with the rhethorical flourish. Compiling estimates regarding number of programmers required to maintain forks or something else that is more rational may drive the point across more effectively.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"Thinking that the recent lack of maintenance in eventlet explain our current"},{"line_number":108,"context_line":"issue and hoping that simply fixing two or three things will unlock our"},{"line_number":109,"context_line":"problem is just hypothetical. When the `GIL removal (for now just optional) \u003chttps://peps.python.org/pep-0703/\u003e`_"},{"line_number":110,"context_line":"will become a reality we will surely live in a nightmare. Thinking that way"},{"line_number":111,"context_line":"will sooner lead us toward deeper moats which are impossible to cross."},{"line_number":112,"context_line":"Thinking that way already led us to stick to EOLed design of CPython."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"77125a74_602096af","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":56},"in_reply_to":"36f59624_a8e1a5fb","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"31ad6c5821a84fbe19b4be37d39786da52b95fe7","unresolved":true,"context_lines":[{"line_number":107,"context_line":"Thinking that the recent lack of maintenance in eventlet explain our current"},{"line_number":108,"context_line":"issue and hoping that simply fixing two or three things will unlock our"},{"line_number":109,"context_line":"problem is just hypothetical. When the `GIL removal (for now just optional) \u003chttps://peps.python.org/pep-0703/\u003e`_"},{"line_number":110,"context_line":"will become a reality we will surely live in a nightmare. Thinking that way"},{"line_number":111,"context_line":"will sooner lead us toward deeper moats which are impossible to cross."},{"line_number":112,"context_line":"Thinking that way already led us to stick to EOLed design of CPython."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"36f59624_a8e1a5fb","line":110,"range":{"start_line":110,"start_character":22,"end_line":110,"end_character":56},"in_reply_to":"6203bbb3_bfb8c744","updated":"2023-12-13 10:41:32.000000000","message":"I agree with you, I will try to update this sentence with mandates and support to strengthen this argument.\n\nI think the current length of the eventlets backlog and the delay in compatibility with python are good ones that are more effective.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"75b3d4c96256bae1584918350526f62033383414","unresolved":true,"context_lines":[{"line_number":218,"context_line":"The main problem for the Openstack community, with these patches, is now to"},{"line_number":219,"context_line":"see them merged in time to match the Openstack calendar."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Three paths exists to hope to see these merger happens:"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"#. The first one would be open a discussion with current eventlet maintainers,"},{"line_number":224,"context_line":"   to explain the importance of eventlet in the Openstack context. The goal of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"79cfa2fa_852e2e34","line":221,"updated":"2023-12-11 23:09:42.000000000","message":"We now can update this to reflect that the eventlet maintainer has given over keys to active members of the eventlet community. Even though no OpenStackers have direct maintainer access yet, I think it\u0027s fairly clear a path has been put forward for an in-place maintainership handover of eventlet \\o/","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"82ddba8bd267513d87ed83abcd839efef2d84016","unresolved":true,"context_lines":[{"line_number":218,"context_line":"The main problem for the Openstack community, with these patches, is now to"},{"line_number":219,"context_line":"see them merged in time to match the Openstack calendar."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Three paths exists to hope to see these merger happens:"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"#. The first one would be open a discussion with current eventlet maintainers,"},{"line_number":224,"context_line":"   to explain the importance of eventlet in the Openstack context. The goal of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"f26615d1_decde681","line":221,"in_reply_to":"0bf93fb8_7d7bd0da","updated":"2023-12-13 10:43:43.000000000","message":"Good news, https://github.com/eventlet/eventlet/issues/824#issuecomment-1853128741\n\nI think we are now able to update this to reflect the recent decisions.\nWe can remove all the fork/move details and be more focused on the rest.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"7f80f587ff18f129881ed1bce1278db79f7c5b56","unresolved":true,"context_lines":[{"line_number":218,"context_line":"The main problem for the Openstack community, with these patches, is now to"},{"line_number":219,"context_line":"see them merged in time to match the Openstack calendar."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Three paths exists to hope to see these merger happens:"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"#. The first one would be open a discussion with current eventlet maintainers,"},{"line_number":224,"context_line":"   to explain the importance of eventlet in the Openstack context. The goal of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"0bf93fb8_7d7bd0da","line":221,"in_reply_to":"79cfa2fa_852e2e34","updated":"2023-12-12 08:29:03.000000000","message":"I agree this is a significant move forward. If patches are merged I think this is a win win. Granting Openstackers writing rights would be awesome. Itamar is already really active, John and myself started to review and doing things on eventlet. I don\u0027t see why that won\u0027t continue that way.\n\nHowever, for now the situation remain the same, and, while, no patches are merged, I\u0027d prefer to keep this document as it is now.\n\nIf you agree with that, I\u0027d suggest to wait a bit before updating this document. I think we can wait early next week, and, then, take a decision.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"The main problem for the Openstack community, with these patches, is now to"},{"line_number":219,"context_line":"see them merged in time to match the Openstack calendar."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Three paths exists to hope to see these merger happens:"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"#. The first one would be open a discussion with current eventlet maintainers,"},{"line_number":224,"context_line":"   to explain the importance of eventlet in the Openstack context. The goal of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fb00318a_0cb67bcf","line":221,"in_reply_to":"8a4cfcd6_2e06e7be","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"db5e269e20b58167b7ad41f23ee7c5a8079dfe80","unresolved":true,"context_lines":[{"line_number":218,"context_line":"The main problem for the Openstack community, with these patches, is now to"},{"line_number":219,"context_line":"see them merged in time to match the Openstack calendar."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Three paths exists to hope to see these merger happens:"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"#. The first one would be open a discussion with current eventlet maintainers,"},{"line_number":224,"context_line":"   to explain the importance of eventlet in the Openstack context. The goal of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"8a4cfcd6_2e06e7be","line":221,"in_reply_to":"f26615d1_decde681","updated":"2023-12-14 12:53:04.000000000","message":"Done with PS13","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3886aa5f6dc17a7bd02eec0a6f0a2643dcfde220","unresolved":true,"context_lines":[{"line_number":353,"context_line":"   So, either the migration should be a all in one and fully ready to go,"},{"line_number":354,"context_line":"   or a smooth shift from one lib to another and by using some glue that can"},{"line_number":355,"context_line":"   make the magic happens and allow us to run both libraries in the same"},{"line_number":356,"context_line":"   process. A full one solution is not something feasible."},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"#. One thing that might be worth calling out is that eventlet provides"},{"line_number":359,"context_line":"   greenthreads which run in a way that feels preemptive even if in a way they"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5b3ecbf0_83a3f2bc","line":356,"range":{"start_line":356,"start_character":12,"end_line":356,"end_character":58},"updated":"2023-12-12 18:55:15.000000000","message":"I don\u0027t understand. The \"some glue\" described above allows for a gradual migration, doesn\u0027t it? What else is there that is desirable but not feasible?","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"31ad6c5821a84fbe19b4be37d39786da52b95fe7","unresolved":true,"context_lines":[{"line_number":353,"context_line":"   So, either the migration should be a all in one and fully ready to go,"},{"line_number":354,"context_line":"   or a smooth shift from one lib to another and by using some glue that can"},{"line_number":355,"context_line":"   make the magic happens and allow us to run both libraries in the same"},{"line_number":356,"context_line":"   process. A full one solution is not something feasible."},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"#. One thing that might be worth calling out is that eventlet provides"},{"line_number":359,"context_line":"   greenthreads which run in a way that feels preemptive even if in a way they"}],"source_content_type":"text/x-rst","patch_set":12,"id":"6430154e_7f66d407","line":356,"range":{"start_line":356,"start_character":12,"end_line":356,"end_character":58},"in_reply_to":"5b3ecbf0_83a3f2bc","updated":"2023-12-13 10:41:32.000000000","message":"Here I was speaking about \"a all in one migration and fully ready to go\". We can\u0027t migrate everything in one shot, so, the migration should be graduale. I\u0027ll reword that sentence to avoid confusing.\n\nThanks for your comment.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"42e5260e8e497aea8b012ce18ad3461036f2819c","unresolved":false,"context_lines":[{"line_number":353,"context_line":"   So, either the migration should be a all in one and fully ready to go,"},{"line_number":354,"context_line":"   or a smooth shift from one lib to another and by using some glue that can"},{"line_number":355,"context_line":"   make the magic happens and allow us to run both libraries in the same"},{"line_number":356,"context_line":"   process. A full one solution is not something feasible."},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"#. One thing that might be worth calling out is that eventlet provides"},{"line_number":359,"context_line":"   greenthreads which run in a way that feels preemptive even if in a way they"}],"source_content_type":"text/x-rst","patch_set":12,"id":"e62eb5f1_f07c9341","line":356,"range":{"start_line":356,"start_character":12,"end_line":356,"end_character":58},"in_reply_to":"6430154e_7f66d407","updated":"2023-12-22 15:57:49.000000000","message":"done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3886aa5f6dc17a7bd02eec0a6f0a2643dcfde220","unresolved":true,"context_lines":[{"line_number":421,"context_line":"   involving cross team expertness to inspect their deliverables. That would"},{"line_number":422,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":423,"context_line":"   remaining workload."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Long terms solutions"},{"line_number":426,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"80568a67_d1db7f48","line":424,"updated":"2023-12-12 18:55:15.000000000","message":"I think the library-out approach needs a reference user, or a particular service. I\u0027d start with glance-api and see that goes. It is relatively small and typical.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4b3ffdcc5435cc579e9830a566f8316b03f3fc2a","unresolved":true,"context_lines":[{"line_number":421,"context_line":"   involving cross team expertness to inspect their deliverables. That would"},{"line_number":422,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":423,"context_line":"   remaining workload."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Long terms solutions"},{"line_number":426,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"6bd86459_090d454d","line":424,"in_reply_to":"2d03d3dd_1787307d","updated":"2024-01-10 20:21:54.000000000","message":"i proposed https://review.opendev.org/c/openstack/nova/+/904424 to do all the low hanging furit in nova\n\nbasically none of our clis like nova-manage actully need evently nor did the proxies so i just moved them to not be patched.\n\nim sure the same is true in most other proejcts with clis.\n\ni think we coudl proably add nova-api to that list in C if we tried but it would be doable in D in either case.\n\nnova-api historiclly was not using eventlet when run as a wsgi application for year but it gained an eventlet dep for one specific fucntion call where we do a scater gather request to multiple database in parlles.\n\nwe are planning to refactor that to use a trhead pool instead anyway.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":421,"context_line":"   involving cross team expertness to inspect their deliverables. That would"},{"line_number":422,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":423,"context_line":"   remaining workload."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Long terms solutions"},{"line_number":426,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"8ffc46be_a3d6cba9","line":424,"in_reply_to":"6bd86459_090d454d","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"31ad6c5821a84fbe19b4be37d39786da52b95fe7","unresolved":true,"context_lines":[{"line_number":421,"context_line":"   involving cross team expertness to inspect their deliverables. That would"},{"line_number":422,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":423,"context_line":"   remaining workload."},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"Long terms solutions"},{"line_number":426,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"2d03d3dd_1787307d","line":424,"in_reply_to":"80568a67_d1db7f48","updated":"2023-12-13 10:41:32.000000000","message":"Indeed that\u0027s a good idea. We can add glance-api here https://wiki.openstack.org/wiki/Eventlet-Based-Deliverables-Easily-Migrated.\n\nPlease, do you mind adding it to the wiki above, by adding more details about your thoughts and why you think this is a typical deliverable.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3886aa5f6dc17a7bd02eec0a6f0a2643dcfde220","unresolved":true,"context_lines":[{"line_number":428,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"},{"line_number":429,"context_line":"would surely be our deadline."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Deliverables like nova or swift could be the hard ones to migrate."},{"line_number":432,"context_line":"Also we could face difficulty with non active deliverables. They could slow"},{"line_number":433,"context_line":"down our progress."},{"line_number":434,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"e627c0d9_16ac66e3","line":431,"updated":"2023-12-12 18:55:15.000000000","message":"Agreed, although Swift has a solid engineering team that can tackle anything.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":428,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"},{"line_number":429,"context_line":"would surely be our deadline."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Deliverables like nova or swift could be the hard ones to migrate."},{"line_number":432,"context_line":"Also we could face difficulty with non active deliverables. They could slow"},{"line_number":433,"context_line":"down our progress."},{"line_number":434,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"a15332c5_46f5b489","line":431,"in_reply_to":"8f50ff0a_fa92513d","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":true,"context_lines":[{"line_number":428,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"},{"line_number":429,"context_line":"would surely be our deadline."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"Deliverables like nova or swift could be the hard ones to migrate."},{"line_number":432,"context_line":"Also we could face difficulty with non active deliverables. They could slow"},{"line_number":433,"context_line":"down our progress."},{"line_number":434,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"8f50ff0a_fa92513d","line":431,"in_reply_to":"e627c0d9_16ac66e3","updated":"2023-12-22 08:59:01.000000000","message":"That sounds pretty confident, so you may want to take a look at the swift failures in the eventlet bump https://review.opendev.org/c/openstack/requirements/+/904147","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3886aa5f6dc17a7bd02eec0a6f0a2643dcfde220","unresolved":true,"context_lines":[{"line_number":452,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated:"},{"line_number":453,"context_line":"   - Remaining libraries should be migrated first."},{"line_number":454,"context_line":"   - Easily one should be migrated as soon as possible to allow harvesting"},{"line_number":455,"context_line":"   feedback and experience easily acquired."},{"line_number":456,"context_line":"   - Easily one should be migrated as soon as possible to free the maximum of"},{"line_number":457,"context_line":"   available resources to focus efforts on the hardest deliverables to"},{"line_number":458,"context_line":"   migrate."}],"source_content_type":"text/x-rst","patch_set":12,"id":"6f3d1907_36b524c1","line":455,"updated":"2023-12-12 18:55:15.000000000","message":"I don\u0027t think you\u0027ll be able to separate this from the migration of libraries. I suppose that a library does have to deliver a minimally viable implementation first, but beyond that, the reference user is essential to guide the library.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"31ad6c5821a84fbe19b4be37d39786da52b95fe7","unresolved":true,"context_lines":[{"line_number":452,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated:"},{"line_number":453,"context_line":"   - Remaining libraries should be migrated first."},{"line_number":454,"context_line":"   - Easily one should be migrated as soon as possible to allow harvesting"},{"line_number":455,"context_line":"   feedback and experience easily acquired."},{"line_number":456,"context_line":"   - Easily one should be migrated as soon as possible to free the maximum of"},{"line_number":457,"context_line":"   available resources to focus efforts on the hardest deliverables to"},{"line_number":458,"context_line":"   migrate."}],"source_content_type":"text/x-rst","patch_set":12,"id":"d3629d31_68083b0d","line":455,"in_reply_to":"6f3d1907_36b524c1","updated":"2023-12-13 10:41:32.000000000","message":"Indeed, maybe we need to be more focused on a team view, with an approach more based on team\u0027s libs and the team\u0027s services like you suggested with glance, rather than all libs and then all services.\n\nOnly oslo would remain more or less apart of this approach, as oslo is everywhere. But even oslo at some points would require a reference user.","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":452,"context_line":"#. Migrate all the Openstack remaining deliverables not yet migrated:"},{"line_number":453,"context_line":"   - Remaining libraries should be migrated first."},{"line_number":454,"context_line":"   - Easily one should be migrated as soon as possible to allow harvesting"},{"line_number":455,"context_line":"   feedback and experience easily acquired."},{"line_number":456,"context_line":"   - Easily one should be migrated as soon as possible to free the maximum of"},{"line_number":457,"context_line":"   available resources to focus efforts on the hardest deliverables to"},{"line_number":458,"context_line":"   migrate."}],"source_content_type":"text/x-rst","patch_set":12,"id":"f75af85d_5770da42","line":455,"in_reply_to":"d3629d31_68083b0d","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"0af3c86a022ec0b89fd48c69be45eac11566ac49"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"85bcd11c442a8afb00186f8965476ba3d8a9c1a4","unresolved":true,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"#. Merge the fix for introduce the support of Python 3.12."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"#. Release the latest changes by creating a new version;"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"#. Upgrade the Openstack requirements to match this new version;"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"d2fb4fb0_6f057b9e","line":255,"updated":"2023-12-22 08:59:01.000000000","message":"iiuc we are at this point currently with 0.34.1 released? not sure whether it makes sense to rewrite everything once more, but updating with progress might be helpful?","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"b7b200cd4a1678e8accf12cc47609b9a11b10529","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"#. Merge the fix for introduce the support of Python 3.12."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"#. Release the latest changes by creating a new version;"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"#. Upgrade the Openstack requirements to match this new version;"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"2a7ccce7_e06ce3ab","line":255,"in_reply_to":"d2fb4fb0_6f057b9e","updated":"2023-12-22 15:45:06.000000000","message":"Yeah, I won\u0027t rewrite everything, I\u0027ll simply update the \"current state\" section at the end of the document.\n\nThis is a complexe topic with actions parallelized, I won\u0027t rewrite everything at each new crossed gap.","commit_id":"4f66295486e870d533f6ab43fa2a2dbcd36107dd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e542931cf578b3ef5f763d41dadf1267c1805a8","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"e863b629_d0529291","line":173,"updated":"2024-01-11 17:29:57.000000000","message":"Moving away from eventlet doesn\u0027t necessarily mean a move to asyncio, IMHO. Since the point of eventlet is to provide a native threads experience with green threads underneath, I feel like moving to native threads is less of a change. It\u0027s something that *can* be done incrementally and also provides potential for performance improvement for areas of the code that already would benefit from actual parallelism.\n\nIn short, just because python\u0027s choice of async programming model is asyncio doesn\u0027t mean we need to move to it, IMHO.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"bbfd183e8102c312d8f05d1c74905ff6b871246f","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"fb6af254_727ef8ab","line":173,"in_reply_to":"0077c369_041e8ca3","updated":"2024-01-16 16:49:34.000000000","message":"While this is true, I think it\u0027s useful to identify a framework for OpenStack projects to use moving forward, if not eventlet. Even if that is \"just use natvie threads\" (I suspect this may not be sufficient for all use cases).\n\nI would think a major failure of this initiative would be if multiple OpenStack projects are using different approaches to this problemset after a project to sunset use of eventlet.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6b33ea3ba80ae8b8d3475373435b95525059f474","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"54d8aa55_54f1ad11","line":173,"in_reply_to":"4b0f680b_b5a0be2d","updated":"2024-01-18 19:53:50.000000000","message":"the main caveat i would say is while we dont need to have a single implementation across all of opensstack we need need compatiblity within the common libs and withing a given project.\n\ni.e. we woudl need the share code to supprot being used from an async eventloop (async def funtions) or just with native threads.\n\nrather then using raw thread directly i think nova would likely continue to use futureist executors with the threadpool executor in the event we dont ues syncio/trio/anyio \n\nif we were ot use any of the async framewroks above i would use anyio personally as it provides trio\u0027s api/taskgroup (now in python 3.11) on asyncio on py3.8 +\n\nbut the first place i tried to use anyio/asyncio i realliese without a async rest client i really needed to use thread pool instead so ... i kidn of agree that one size proably does not fit all in this regard.\n\nwe are fortunet that sqlachemy supprots asyncio and or async frameworks but we also need to be carful with our other external deps\n\nnot all will but perhaps we can look at how they approch this for some pointers.\nhttps://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html\nhttps://github.com/sqlalchemy/sqlalchemy/tree/main/lib/sqlalchemy/ext/asyncio\nhttps://gist.github.com/zzzeek/6287e28054d3baddc07fa21a7227904e\n\nif we want to make progress on this we need an approch that crosses the blue/green fucntion devied.\nhttps://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"9db7d819ab7c1a8a575b56cb0c98a6da67295a86","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"6d81bc29_80f62789","line":173,"in_reply_to":"54d8aa55_54f1ad11","updated":"2024-01-23 14:36:48.000000000","message":"In a perfect world, I\u0027d prefer an unified approach. An approach retained by all Openstack deliverables. An approach that fit all scenario. Unfortunatelly, we are not living in a perfect world, and, I think that, comments from Sean and Dan, reflects the complexity of this topic and the lack of clarity within this proposal.\n\nWe are facing an emergency, i.e the non-sustainable maintainability of eventlet.  However, the proposal as currently formulated is poorly worded. I think that Sean and Dan concerns are relevant and legit. The title of this proposal well justifies their concerns.\n\nWithout these considerations, we would introduce changes that will lead us to reinvent the wheel for every Openstack component. That\u0027s not the goal of this proposal.\n\nThis proposal was implicitly focused on Openstack deliverables that relies on Eventlet. With potential unforseen side effects, thanks Sean and Dan for your thoughts. That\u0027s why, no matter the context, implicit is a bad idea...\n\nThis proposal should simply advocate to move away from eventlet, rather than, advocate for a new \"Openstack Networking Programming Model\".\n\nAgain, our goal is to respond to the emergency that arises, i.e the growing gaps between Eventlet and CPython.\n\nAFAIK, on Openstack, Eventlet is mostly used to allow async things. So replacing eventlet mean, we need a replacent for async features. Asyncio is designed for that usage. Hence, this proposal advocate to use Asyncio as replacent for Eventlet. This proposal won\u0027t propose any other alternatives.\n\nHowever, as I suggested in my other comment, this proposal needs adjustements [1]:\n\n* this proposal should encourage the migration of common libs toward Asyncio but by offering synchronous facade, to avoid contamination of higher level components, deliverables that do not rely on eventlet, by the Asyncio model.\n* this proposal should ONLY encourage the migration of services that relies on eventlet and advocate for an asyncio approach.\n\nOther approaches exists (threading etc). If someone volunteer to advocate and document a different approach, then that\u0027s not a problem, that will offer other alternatives to services developers. I think, they should be discussed in a separated thread, thoughs. Services maintainers would be able to weight pros and cons of proposed approaches and then decide then one to use. However, IMO, this proposal should only focus on proposing the Asyncio approach. An approach to replace async functionalities poorly maintained by async functionalities who are long term maintained. With the adjustments listed here [1].\n\n[1] https://review.opendev.org/c/openstack/governance/+/902585/comment/d6f0ae46_f505ea4f/","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"5e1f25cc_b69d7eed","line":173,"in_reply_to":"6d81bc29_80f62789","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"01feabd1fbacd51b024b6183f3c38c27ce8e0c37","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"0077c369_041e8ca3","line":173,"in_reply_to":"e863b629_d0529291","updated":"2024-01-11 20:12:23.000000000","message":"We will also have to decide upon the webserver if we move to asyncio, be it aiohttp, aiowsgi, or something else. Swift in particular runs outside of Apache often, even predominantly.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d73884f37d8191c5fe66dee9e3cd1268422b228","unresolved":true,"context_lines":[{"line_number":170,"context_line":"the long run."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The proposed solution is to move away from eventlet incrementally and"},{"line_number":173,"context_line":"start using asyncio in the long run."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"This solution proposed here aim to reduce the gap between Openstack and the"},{"line_number":176,"context_line":"Python stdlib to remains close from the stability offered by CPython and"}],"source_content_type":"text/x-rst","patch_set":14,"id":"4b0f680b_b5a0be2d","line":173,"in_reply_to":"fb6af254_727ef8ab","updated":"2024-01-18 15:15:59.000000000","message":"I don\u0027t think we need to come up with a single replacement technology for eventlet across the board. We already have projects using different things for WSGI frameworks or task management. The fact that we\u0027re \"all using eventlet\" isn\u0027t even really accurate. Since the eventlet programming model is identical to native threads, it is/was a fairly easy sell for people. Asyncio itself is very different (from eventlet, from native threads, and really anything else), and even with a wrapper around it that makes it \"look more normal\", is quite a bit more polarizing.\n\nI think this is my primary concern here - that we not assume everything that is eventlet today must be converted to a single solution as a community. For eventlet haters (I\u0027m not an eventlet lover by any means), the fact that eventlet is a pseudo-default in our community is not a good thing. As I note below, some projects (and/or services in those projects) aren\u0027t even dependent on eventlet today. Moving them to proper asyncio-native code is a very big change that effectively keeps them tied to asyncio at a syntax level.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ec3ac6ae11399edca47f76170f8749329f9d9708","unresolved":true,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Secondly, once gates would be fixed, it would be possible to fix the SSL issue"},{"line_number":219,"context_line":"and so to support Python 3.12. That would be possible by fixing"},{"line_number":220,"context_line":"`this existing issue \u003chttps://github.com/eventlet/eventlet/issues/795\u003e`_. "},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The good news is that patches fixing problems have been already proposed:"},{"line_number":223,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."}],"source_content_type":"text/x-rst","patch_set":14,"id":"116f2c36_51a9c65e","line":220,"range":{"start_line":220,"start_character":73,"end_line":220,"end_character":74},"updated":"2023-12-26 15:23:30.000000000","message":"nit: whitespace","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Secondly, once gates would be fixed, it would be possible to fix the SSL issue"},{"line_number":219,"context_line":"and so to support Python 3.12. That would be possible by fixing"},{"line_number":220,"context_line":"`this existing issue \u003chttps://github.com/eventlet/eventlet/issues/795\u003e`_. "},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The good news is that patches fixing problems have been already proposed:"},{"line_number":223,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."}],"source_content_type":"text/x-rst","patch_set":14,"id":"a77cd8d1_bc987914","line":220,"range":{"start_line":220,"start_character":73,"end_line":220,"end_character":74},"in_reply_to":"116f2c36_51a9c65e","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":220,"context_line":"`this existing issue \u003chttps://github.com/eventlet/eventlet/issues/795\u003e`_. "},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The good news is that patches fixing problems have been already proposed:"},{"line_number":223,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."},{"line_number":224,"context_line":"- The broken support of Python 3.12 (https://github.com/eventlet/eventlet/pull/817)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"The main problem for the Openstack community, with these patches, is now to"}],"source_content_type":"text/x-rst","patch_set":14,"id":"be27198d_b38fbd80","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":1},"updated":"2024-01-10 19:49:57.000000000","message":"This should be * to be a list I think (in the rendered html it is not a list for sure)","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":220,"context_line":"`this existing issue \u003chttps://github.com/eventlet/eventlet/issues/795\u003e`_. "},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The good news is that patches fixing problems have been already proposed:"},{"line_number":223,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."},{"line_number":224,"context_line":"- The broken support of Python 3.12 (https://github.com/eventlet/eventlet/pull/817)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"The main problem for the Openstack community, with these patches, is now to"}],"source_content_type":"text/x-rst","patch_set":14,"id":"d9fc50c3_840d09a2","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":1},"in_reply_to":"a043a7be_1fd255c3","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"bbfd183e8102c312d8f05d1c74905ff6b871246f","unresolved":true,"context_lines":[{"line_number":220,"context_line":"`this existing issue \u003chttps://github.com/eventlet/eventlet/issues/795\u003e`_. "},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"The good news is that patches fixing problems have been already proposed:"},{"line_number":223,"context_line":"- The broken CI (https://github.com/eventlet/eventlet/pull/823)."},{"line_number":224,"context_line":"- The broken support of Python 3.12 (https://github.com/eventlet/eventlet/pull/817)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"The main problem for the Openstack community, with these patches, is now to"}],"source_content_type":"text/x-rst","patch_set":14,"id":"a043a7be_1fd255c3","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":1},"in_reply_to":"be27198d_b38fbd80","updated":"2024-01-16 16:49:34.000000000","message":"To make it render as a list, I think you\u0027ll need two spaces before the -","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":267,"context_line":"   - https://pypi.org/project/eventlet/0.34.2/"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Upgrade the Openstack requirements to match this new version. (in progress)"},{"line_number":270,"context_line":"   - https://review.opendev.org/c/openstack/requirements/+/904147?usp\u003dsearch"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"#. Validate that the main issues are now fixed;"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"938219e2_8187e7cd","line":270,"range":{"start_line":270,"start_character":65,"end_line":270,"end_character":76},"updated":"2024-01-10 19:49:57.000000000","message":"nit: usp\u003dsearch is not necessary for the link (just some gerrit anchor)","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":267,"context_line":"   - https://pypi.org/project/eventlet/0.34.2/"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"#. Upgrade the Openstack requirements to match this new version. (in progress)"},{"line_number":270,"context_line":"   - https://review.opendev.org/c/openstack/requirements/+/904147?usp\u003dsearch"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"#. Validate that the main issues are now fixed;"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"db00322e_22f04ad8","line":270,"range":{"start_line":270,"start_character":65,"end_line":270,"end_character":76},"in_reply_to":"938219e2_8187e7cd","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":269,"context_line":"#. Upgrade the Openstack requirements to match this new version. (in progress)"},{"line_number":270,"context_line":"   - https://review.opendev.org/c/openstack/requirements/+/904147?usp\u003dsearch"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"#. Validate that the main issues are now fixed;"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"#. Announce the current state of the art after the previous steps are done."},{"line_number":275,"context_line":"   The goal would be to offer visibility to Openstack maintainers."}],"source_content_type":"text/x-rst","patch_set":14,"id":"f4e4bc67_85b8806e","line":272,"range":{"start_line":272,"start_character":3,"end_line":272,"end_character":47},"updated":"2024-01-10 19:49:57.000000000","message":"shall we have periodic jobs in the main projects to test with eventlet master (or do we have alredy, like for sqlalchemy?)","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"51d4f66e1a8f14222897eb2071a522cf4fe96bd6","unresolved":true,"context_lines":[{"line_number":269,"context_line":"#. Upgrade the Openstack requirements to match this new version. (in progress)"},{"line_number":270,"context_line":"   - https://review.opendev.org/c/openstack/requirements/+/904147?usp\u003dsearch"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"#. Validate that the main issues are now fixed;"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"#. Announce the current state of the art after the previous steps are done."},{"line_number":275,"context_line":"   The goal would be to offer visibility to Openstack maintainers."}],"source_content_type":"text/x-rst","patch_set":14,"id":"26c824f1_d58976f6","line":272,"range":{"start_line":272,"start_character":3,"end_line":272,"end_character":47},"in_reply_to":"f4e4bc67_85b8806e","updated":"2024-01-26 10:13:13.000000000","message":"IMO that can\u0027t hurt. Please can you point me where I can find the sqlalchemy periodic jobs? I\u0027m not sure.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4b3ffdcc5435cc579e9830a566f8316b03f3fc2a","unresolved":true,"context_lines":[{"line_number":277,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":278,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":279,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":280,"context_line":"   out that we must still avoid at all costs."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":283,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":14,"id":"c811e88d_58bc82d4","line":280,"updated":"2024-01-10 20:21:54.000000000","message":"so python 3.12 wont be officaly supproted in caracal regardels of if we merge this\n\nunoffially i hope the eventlet changes cna make it work but we select our suported testing runtime at the start of each cycle and 3.12 is not on that list for caracal.\n\nhttps://github.com/openstack/governance/blob/master/reference/runtimes/2024.1.rst\n\nso the first realeast that would have 3.12 as a testing runtim will be the D cycle.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"51d4f66e1a8f14222897eb2071a522cf4fe96bd6","unresolved":false,"context_lines":[{"line_number":277,"context_line":"#. (optional) Decide with the TC to postpone the support of Python 3.12 within"},{"line_number":278,"context_line":"   the next series (\"D\") if the validation failed and if we are to close from"},{"line_number":279,"context_line":"   the deadline. Socialize that point to the community. This is a possible way"},{"line_number":280,"context_line":"   out that we must still avoid at all costs."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"#. (optional) If we previously postponed the support of Python 3.12 due to"},{"line_number":283,"context_line":"   validation issue, see what happens and try to fix it during \"D\"."}],"source_content_type":"text/x-rst","patch_set":14,"id":"c60750cf_4bd15ca5","line":280,"in_reply_to":"c811e88d_58bc82d4","updated":"2024-01-26 10:13:13.000000000","message":"Yes, our runtimes for Caracal are already set and runtimes are set at the start of each cycle. This sentence is related to 2024.2/dalmatian \"Decide with the TC to postpone the support of Python 3.12 within the next series (\"D\")\"","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":320,"context_line":"   flow that happens as a result."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":323,"context_line":"(2024.10/D) to design and implement the transitive engine (aiohub) that"},{"line_number":324,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":325,"context_line":"first bricks:"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"35bbce15_77af9117","line":323,"range":{"start_line":323,"start_character":6,"end_line":323,"end_character":8},"updated":"2024-01-10 19:49:57.000000000","message":"nit: 2024.1","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"51d4f66e1a8f14222897eb2071a522cf4fe96bd6","unresolved":true,"context_lines":[{"line_number":320,"context_line":"   flow that happens as a result."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":323,"context_line":"(2024.10/D) to design and implement the transitive engine (aiohub) that"},{"line_number":324,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":325,"context_line":"first bricks:"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"a6a3597b_071f07bf","line":323,"range":{"start_line":323,"start_character":6,"end_line":323,"end_character":8},"in_reply_to":"35bbce15_77af9117","updated":"2024-01-26 10:13:13.000000000","message":"Dalmatian \u003d 2024.2","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":320,"context_line":"   flow that happens as a result."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":323,"context_line":"(2024.10/D) to design and implement the transitive engine (aiohub) that"},{"line_number":324,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":325,"context_line":"first bricks:"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"a9293321_bfb36939","line":323,"range":{"start_line":323,"start_character":6,"end_line":323,"end_character":8},"in_reply_to":"a6a3597b_071f07bf","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":323,"context_line":"(2024.10/D) to design and implement the transitive engine (aiohub) that"},{"line_number":324,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":325,"context_line":"first bricks:"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"#. design specs of the aiohub or similar that has an asyncio"}],"source_content_type":"text/x-rst","patch_set":14,"id":"ab21f5b5_adf489e3","line":324,"range":{"start_line":324,"start_character":54,"end_line":324,"end_character":59},"updated":"2024-01-10 19:49:57.000000000","message":"nit:2025.1","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"This milestone would surely require at least two series. One series"},{"line_number":323,"context_line":"(2024.10/D) to design and implement the transitive engine (aiohub) that"},{"line_number":324,"context_line":"will allow us to start the migration and one series (2025.3/E) to migrate the"},{"line_number":325,"context_line":"first bricks:"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"#. design specs of the aiohub or similar that has an asyncio"}],"source_content_type":"text/x-rst","patch_set":14,"id":"95f5a9f3_2db09e72","line":324,"range":{"start_line":324,"start_character":54,"end_line":324,"end_character":59},"in_reply_to":"ab21f5b5_adf489e3","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e542931cf578b3ef5f763d41dadf1267c1805a8","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"d94bc911_a735d166","line":337,"updated":"2024-01-11 17:29:57.000000000","message":"Maybe I\u0027m missing something, but purely replacing the eventlet hub with asyncio in the background is a major change to how a service that depends on this works. Right now, we are able to tightly interleave things we pretend are parallel (but aren\u0027t) because of the monkeypatching. By just moving the dispatching to asyncio but still considering each thing a monolithic non-async operation, our actual concurrency will go from reasonably fine-grained today (i.e. from yields injected in the monkeypatches) to extremely coarse-grained, no?\n\nIf, as described in the above discussion page, we hand-edit every call we need to make to an otherwise-blocking API, we\u0027ll have moved to using asyncio for the actual switching, but without moving any of our actual code to async routines, which will then require another re-write after we\u0027re ready to move on. It seems to me like if we move to using real threads, the immediate and future programming models are the same, and the only thing we need to work through is making sure that our locking in critical code is corrent, where now we\u0027re getting some isolation due to the lack of switches.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8f92fc0669c497ae95511104bf3bdbe120d9875f","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"c64ed701_9cd1bfee","line":337,"in_reply_to":"1fa9775a_e3ffdc32","updated":"2024-01-17 21:42:29.000000000","message":"\"Migrating from eventlet to regular threads requires addressing thread safety\"\n\nthat a fundemental misunderstading of how eventlest works\n\neventlet code already has to be written in a thread safe manner with locks and explcit scynoistation as the implict context swtiching can cause the same race condtions as real thread.\n\nany eventlet code that is not thread safe is also not eventlet safe in general.\n\nso movign to explcit treading is less work then moving to asyncio","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"7b9daf5aad957a6ca41d5a47f365ab087e31699f","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3989d0ab_43953bc6","line":337,"in_reply_to":"3935ded4_4c3a0194","updated":"2024-01-17 21:05:23.000000000","message":"Hm, no editing capabilities. To clarify, the three bullet points under the first heading refer to problems with pure blocking APIs. And I meant to say \"out of luck\", not \"out of lock\" 😊","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"c8c7cc28432edef892426f87e3fa15d3fc294088","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"cae5b3d5_8674a0c4","line":337,"in_reply_to":"3989d0ab_43953bc6","updated":"2024-01-17 21:22:02.000000000","message":"## Migrating from eventlet to regular threads requires addressing thread safety\n\nEventlet is essentially running as a single thread, so problems of thread safety are much more limited. So long as you don\u0027t call a function that causes a context switch to another greenlet, only one thread is running. So for example data structures can be mutated safely without worrying about locking. \n\nMigrating to blocking threads would involve auditing all code for places that are potentially not thread-safe, and adding locking (while avoiding deadlocks). This is possible, of course; I can\u0027t speak to how much work it would be compared to an asyncio migration, but it is work that will need to be done.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"061e150c387349bdb3ee315fc984a2ddd33f683b","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1fa9775a_e3ffdc32","line":337,"in_reply_to":"3989d0ab_43953bc6","updated":"2024-01-17 21:39:27.000000000","message":"there is a key diffent between eventlet and asyncio  with regards to the model\n\none is implict the other is explcity\n\ncurrently every io (http request, unix socket read/write, file io) or process spawn like calling oslo process ustils even privsep calls are an implict yeild to the eventloop\n\nif nothing is pending that as if we blocked but if other eventlets need to run we get concuancy while waiting.\n\nnow the actual concurrency is the same in that we are using userland coperative mulit thread but the mechaium by which that happens is very diffent.\n\nwith wregards to thirdpary libs and what get monkey patched.\n\nwe monkey patch very very early to ensure that modules are moneky patched before any third party libs are imported.\n\nthat should mean that unless that lib has explcit code to detect eventlets, and un monkey patch its locally copy of the std lib moduels we can expect all third party libs to be un in a monkey patched context. if the third party lib spwans a thread via the threading module for example that will be monkey patched.\n\n\nwith asyncio we would have to manually wrap all blockign api calls to use a future adn dispatch it to a thread pool then await the future or we would have to similarly swap form the blocking api to a non blockign api.\n\nwhat that means in practic is in codebases that have to supprot both models\nwe need to build  a libary of wrapper code that can work correctly with or without eventlest in use to make sure our code works in both modles.\n\nthis is complciated by the fact that you cant call \"async def\" fucntions form a non \"asycn def\" function  so we have to keep declaring the function with the \nnon async sysntax and return a future/awaiable instead.\n\n\nthat means doign things like this \nhttps://review.opendev.org/c/openstack/nova/+/904425/10/nova/context.py\n\nthat ^ is also not providing concurrancy.\nnote the comment inlien, because it was using the oepsntack sdk and request \nthe  async def gather_result fucntion woudl actully block the main loop\n\nso we would need to first port the OpenStack SDK to provide async_def fucntions for all the api (perhaps using aiohttp instead of requests) and then swap between \nwhich openstack sdk client method we use based on if its eventlet or not.\n\n\none approch that might work to enabel a migration is what dan was saying.\n\nin the core of our service eventlopp we can have a singel thread pooling for rpc messages. when it recives one it can spwan the request handleing into an thread pool, each request to the service and then run in a blocking manner in the thread.\n\nthat will reulst in very course granulatiy which can be refiend using seperate async io eventloops within those treads as we migrate but that will increase memroy usage and while the gil extis will be less performant then usign eventlest today.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"d9d88f49a6762bdceafe9124d03abc67aaed6058","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"6d447ed3_bacc9927","line":337,"in_reply_to":"65b9fde3_80f23a73","updated":"2024-01-19 14:37:34.000000000","message":"\u003e I think your point here is really that asyncio/eventlet make it easier to leak stuck threads, not that threads no longer get stuck. Delegating something synchronous we have no control over to a worker thread is still the same model. We may be able to stop waiting for it, but the result is really the same under the covers.\n\nIf you have a blocking API you need threads, no way around that. The nice thing about `asyncio` is that you have the option of replacing many APIs with a non-blocking API, with superior timeouts and cancellation. And there are _many_ APIs you can replace with non-blocking alternatives, e.g. https://github.com/timofurrer/awesome-asyncio has database drivers, HTTP clients, DNS, Kafka client, websockets, AMQP, SSH, GraphQL, etc..\n\nSo the question is whether or not replacing blocking APIs with non-blocking APIs is worth it. That is problem-specific. For example, here are some cases where async is pointless:\n\n* **Service is unusable if upstream service goes down:** A Django web server where all data is in a PostgreSQL database may in theory suffer from issues with blocking API to the database, but in practice if the database go down the website is unusable, so using an async database connection usually has no benefit.\n* **Write-only operations, especially to a single destination:** Writing logs to a remote service is something you never want to block, but you can have a single writer thread, buffer on disk primarily and secondarily in memory in case disk blocks, and then in extreme cases drop old messages. Even if the implementation is async, the API exposed to users can be synchronous \"queue this log message\" operation that returns immediately.\n\nBlocking APIs become much more problematic when they\u0027re interactive (you need to rely on responses in the business logic), especially when they\u0027re high frequency, and when you have services whose uptime needs to be decoupled. If service A is down and service B relies on it for _some_ of its functionality, with infinitely-blocking APIs and limited size thread pools it\u0027s easy to end up with a situation where all of service B\u0027s threads are blocked waiting on A. At that point requests to B that don\u0027t need A can\u0027t proceed. \n\nIn other words, one service being down can lead to cascades where everything is down. Even worse, sufficiently _slow_ services can take down downstream services with blocking APIs, because thread pools fill up.\n\nAsync frameworks are typically much better programming model for systems where these situations are possible, since one can use timeouts and cancellation appropriately. Again, only if you can have non-blocking APIs, but that is quite likely in a wide range of cases.\n\n(Separately, blocking APIs are much more of a pain from an ergonomics perspective if the API model is asynchronous, e.g. a chat server with streaming going both ways.)\n\nSo there is of course no one-size-fits-all answer, but there is a reason why async networking is so useful for distributed systems.\n\n\u003e I\u0027d also like to point out that python has been on a breaking-things streak lately unlike anything we\u0027ve seen. They have deprecated and removed things in asyncio since the start of python3 (in fact asyncio code looks a lot different now than it did in the earlier versions). Not only is async code in python incompatible (without work) with regular synchronous code, but moving code syntax to that mechanism also invites (IMHO) more potential for \"oh well, python 3.20 has removed async def in favor of def async, time to change all the code again\" sorts of liabilities.\n\nCan you give some specific examples of deprecated APIs in `asyncio` that you think were very difficult for upstream users to deal with? All the `asyncio`-based libraries I\u0027ve seen work with a decent range of Python versions (3.8 or later, i.e. the ones that aren\u0027t EOL).\n\nIf you really are worried about Python changing from `async def` to `def async`, there\u0027s no reason to think that couldn\u0027t happen to any part of the language, and perhaps OpenStack would be better off moving off of Python. But since Python devs have made clear they have learned their lesson from 2 to 3 transition and won\u0027t do that again, that kind of change seems highly improbable.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f5ef52333eca081ce7a73ccc8e0950973cd05481","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"d681a203_43bab774","line":337,"in_reply_to":"6d447ed3_bacc9927","updated":"2024-01-19 18:17:01.000000000","message":"openstack is much less tightly coupled then that\n\ncinder crashign wont break nova.\n\nit may prevent you attachign or detaching volumes form a vm\nbut you can still boot new vms that dont use cinder or even reboot vms taht have cinder volumes provided the storage backend is still alive.\n\nkeystone going offline breaks everything but that just because without auth we cant confirm if the request is correct from a policy perspective.\n\nto be clear we already have async networkign capablity provided by eventlet.\nwe are not using it becasue we have hight data throughput.\n\nwe  are using eventlet so that we can start many request in paralel and interleave them to make forward progress when we would otherwise stall waitign on the io without havign the memory overhead fo userland threads.\n\nie. rpc_one ask us to stop a vm so that can run until we call livbirt to stop the vm and whiled then in the mean time we dequeue the next request to detach a volume form a diffent vm. that can proceed until we make the next io and we can result the livbirt stop ectra.\n\n\nso networking is not really our probelm for nova at least. we use eventlet more to for concurancy then anythign else. sometiem explcitly by spwaning greenthread sometiems implictly via io or in the backgound with perodic tasks.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6b33ea3ba80ae8b8d3475373435b95525059f474","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"65b9fde3_80f23a73","line":337,"in_reply_to":"b0b9f227_fc98c7d5","updated":"2024-01-18 19:53:50.000000000","message":"here are just some of the exampel of the exisign lock we have to maintain in nvoa with eventltets\n\nhttps://codesearch.opendev.org/?q\u003dutils.synchronized\u0026i\u003dnope\u0026literal\u003dnope\u0026files\u003d.py\u0026excludeFiles\u003dtest\u0026repos\u003dopenstack%2Fnova\n\neach of those @utils.synchronized decorators are creating a file to ack as a lock when we are perfoaming operatios that cannot happen conncurently either on an instance or on our shared memory datastucrue liek the resouce tracker.\n\nany time we have a share datastucre in memory or we preform operatoins on the hypervier liek addding a prot to a vm we need to lock to prevent concurrent rpc calls or perodic tasks that get interleaved form currpting the shared state.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d73884f37d8191c5fe66dee9e3cd1268422b228","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"b0b9f227_fc98c7d5","line":337,"in_reply_to":"b1ce7b3f_43530ac5","updated":"2024-01-18 15:15:59.000000000","message":"\u003e If an API is blocking... that\u0027s it, you\u0027re stuck. You can\u0027t kill a thread, you can\u0027t cancel an operation.\n\nI think your point here is really that asyncio/eventlet make it easier to leak stuck threads, not that threads no longer get stuck. Delegating something synchronous we have no control over to a worker thread is still the same model. We may be able to stop waiting for it, but the result is really the same under the covers.\n\n\u003e Asyncio gives you the exact same context switching locations.\n\nBut not natively, right? Asyncio gives you the same ability to delegate things to worker threads and wait/yield while it runs, but without monkeypatching calls to synchronous calls, I don\u0027t see how this doesn\u0027t involve an additional layer. Perhaps eventlet in asyncio-compat mode is that layer for the time being, but that doesn\u0027t really help us get off eventlet.\n\nSean\u0027s point about `async def` methods is exactly my point about the second step of actually cleaning things up. If we assume everything that currently appears to be synchronous stays that way, then we\u0027re forever in the situation where we only yield when we explicitly delegate a subroutine call to a worker thread until we have `async def`\u0027d everything up the stack. That\u0027s a much worse place to be in than we are today, IMHO.\n\nI\u0027d also like to point out that python has been on a breaking-things streak lately unlike anything we\u0027ve seen. They have deprecated and removed things in asyncio since the start of python3 (in fact asyncio code looks a lot different now than it did in the earlier versions). Not only is async code in python incompatible (without work) with regular synchronous code, but moving code _syntax_ to that mechanism also invites (IMHO) more potential for \"oh well, python 3.20 has removed `async def` in favor of `def async`, time to change all the code again\" sorts of liabilities.\n\n\u003e Anything like this would not need locks in eventlet:\n\nPlease don\u0027t assume that we\u0027re ignorant about eventlet and how it works. Sean is right that any code that is not native-thread safe today isn\u0027t safe under eventlet either. There are probably plenty of places where we\u0027re not thread safe and don\u0027t realize it because of how coarse the thread switching is with eventlet. However, if we start wrapping synchronous code in thread workers with asyncio, we\u0027re going to expose the same thread safety things as if we were running things in native threads ourselves, AFAIK. I think it\u0027s important to keep in mind that any change we make here is going to be destabilizing and require a lot more verification. Just saying \"meh, they\u0027re the same model\" is way too naive for a system as complicated as this, IMHO.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"495eae84aeedcbb5185261af9b2a906514c5a71f","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"b1ce7b3f_43530ac5","line":337,"in_reply_to":"c64ed701_9cd1bfee","updated":"2024-01-18 13:31:45.000000000","message":"## Locking\n\nAnything like this would not need locks in eventlet:\n\n```\nclass Counter:\n    def increment(self):\n        self.x +\u003d 1\n```\n\nBut would need locks with blocking threads. It\u0027s possible that the OpenStack codebase has enough discipline to already add locking everywhere pure data structure manipulation is susceptible to race conditions, but I\u0027m skeptical.\n\nSee my comments elsewhere re the problem with blocking APIs as regards timeouts.\n\nMore broadly: I don\u0027t think the question is purely about what is easiest; switching to blocking+normal threading is definitely easiest. It\u0027s about what will result in robust, functioning software at the end of the process. An easy transition to buggy software isn\u0027t very helpful. So there\u0027s a need to think about sources of bugs as well.\n\n## Asyncio\n\nAgain, to be clear, the proposal is that asyncio and eventlet can call each other directly. It\u0027s not a giant switch you turn on one day, it\u0027s a gradual migration and in the short term you can have a mixture both. So you don\u0027t need if statements, you just use transformation APIs.\n\nhttps://github.com/eventlet/eventlet/blob/ddb29e09fe0d8e5e4e52d3065f62e63f910f3ef9/doc/source/migration.rst#step-2-migrate-code-to-asyncio has some examples.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"20f33f09_f6c74a1f","line":337,"in_reply_to":"d681a203_43bab774","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":36603,"name":"Itamar Turner-Trauring","display_name":"Itamar Turner-Trauring","email":"itamar@pythonspeed.com","username":"itamarst2"},"change_message_id":"b4e3a1d7dbc5837556ae7555f114890c8f945755","unresolved":true,"context_lines":[{"line_number":334,"context_line":"   to design aiohub."},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"   Current design discussions can be found here https://github.com/eventlet/aiohub"},{"line_number":337,"context_line":"   and there https://wiki.openstack.org/wiki/Aiohub-Discussion."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"#. implementing `aiohub \u003chttps://github.com/eventlet/aiohub/\u003e`_. Some works"},{"line_number":340,"context_line":"   have been already initiated. For now this is an non functional repo but"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3935ded4_4c3a0194","line":337,"in_reply_to":"d94bc911_a735d166","updated":"2024-01-17 21:00:46.000000000","message":"## Threads lose a key capability vs eventlet\n\nThe problem with real threads is that it\u0027s very difficult to make robust software with blocking APIs. Moving from eventlet to normal threaded blocking APIs loses the ability to have high-level timeouts and high-level cancellation, which tend to be pretty important when writing a distributed system!\n\nAll of these problems are solved, or much more solvable, with an async event loop.\n\n### 1. Timeouts may not be available\n\nTimeouts are at the discretion of the library you\u0027re using. If they didn\u0027t provide them, you\u0027re stuck with potentially infinite blocking.\n\n### 2. Even when available, timeouts are typically at the wrong granularity\n\nConsider an HTTP request; the timeout you want is usually \"the whole operation didn\u0027t finish within N seconds.\" A blocking library cannot provide this without significant difficulty, so typically it won\u0027t. Thus `requests` provides timeouts on connecting, and a timeout on _individual reads_, but there\u0027s no way to say \"the whole request didn\u0027t finish after 10 seconds, cancel it.\"\n\n### 3. Cancellation is not possible\n\nIf an API is blocking... that\u0027s it, you\u0027re stuck. You can\u0027t kill a thread, you can\u0027t cancel an operation.\n\n## eventlet and asyncio are essentially the same model\n\nReferring to:\n\n\u003e Right now, we are able to tightly interleave things we pretend are parallel (but aren\u0027t) because of the monkeypatching. By just moving the dispatching to asyncio but still considering each thing a monolithic non-async operation, our actual concurrency will go from reasonably fine-grained today (i.e. from yields injected in the monkeypatches) to extremely coarse-grained, no?\n\nEventlet essentially gives you context switching on things like socket reads, socket writes, socket connects, and scheduled events/sleeps, with the massive caveat that this only applies to places that got monkeypatched. Not everything got monkeypatched so for some third-party libraries you\u0027re out of lock...\n\nAsyncio gives you the exact same context switching locations.\n\n## How porting would work\n\nReferring to:\n\n\u003e If, as described in the above discussion page, we hand-edit every call we need to make to an otherwise-blocking API, we\u0027ll have moved to using asyncio for the actual switching, but without moving any of our actual code to async routines, which will then require another re-write after we\u0027re ready to move on.\n\nA port to asyncio would therefore involve:\n\n1. Switching all networking functions to be Python `async` functions.\n2. Add an `await` on all places where pretending-to-block happened. This means places where undesired _real_ blocking happened become much more obvious.\n3. Switch from \"we monkeypatched this into pseudo-blocking\" APIs to async APIs (e.g. `urllib`/`requests` to `aiohttp`.)\n\nEventlet now has initial APIs for mixing Eventlet and `asyncio` code in the same library/application, so this can be a gradual process. It does not require two passes.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4b3ffdcc5435cc579e9830a566f8316b03f3fc2a","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"d6f0ae46_f505ea4f","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"updated":"2024-01-10 20:21:54.000000000","message":"by the way not all openstack service use oslo service.\nit might be worth considering if we can reire oslo service isnstead of proting it and instead just port to an eqiuvelnt python lib that is mainted by others.\n\nor if we do we might want to port it in a reduced form.\n\noslo privsep does not use oslo.service for example but it uses its own lightwhete deamon loop\n\nhttps://github.com/openstack/oslo.privsep/blob/master/oslo_privsep/daemon.py\n\nnova may currenly depend on many of the internal so oslo.service but we will be refactiong with the porting anyway and i think we can simplfy alot.\n\njsut somethign to think about.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6b33ea3ba80ae8b8d3475373435b95525059f474","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"bd2a883e_a1c6ce7f","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"14721dae_f61e17f4","updated":"2024-01-18 19:53:50.000000000","message":"placement form day one had a policy fo no eventlet and i thinke keystone dropped it when they moved to wsgi only. so ya not all projects use eventlet today.\n\nnova, neutron, cinder, swift all do as do other but its not universal","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c5416c6b3975a4040765886219dad6a95f297c85","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"ecb427c3_70a875c7","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"bd2a883e_a1c6ce7f","updated":"2024-01-22 17:56:38.000000000","message":"Yeah, so this is sort of my point. Code that is asyncio-only is \"incompatible[0]\" with regular/synchronous code. It would be really unfortunate if all our libraries assume everything calling them is running in an asyncio loop. For widely-used libraries, both need to be supported (an unfortunate but very clear reality of the current situation). That would be the ideal for our own (because of keystone, placement, nova-api, glance, etc not running in asyncio) but I don\u0027t want libraries to assume *everyone* will only/always be asyncio.\n\n0: Yes, I know there are ways to dispatch async methods synchronously so it doesn\u0027t become a hard break, but it is very not ideal to have to do that everywhere.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"a4f6ea7d97639f7b51a2f8e0429512f2be8a78a2","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"ea7228fc_c26e23a7","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"d1c11806_84f09ba9","updated":"2024-01-23 15:06:38.000000000","message":"@Sean: Concerning the oslo.service topic, what equivalent/alternative are you suggesting to use? \n\nI think this oslo.service topic is a side topic, though. I\u0027m not against removing and replacing oslo.service, however, I think that this topic will have impact even outside of the scope of of this goal proposal, e.g even on services that could not relies on eventlet. I\u0027d prefer to manage that point throughout an oslo blue print proposal or something like that.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d73884f37d8191c5fe66dee9e3cd1268422b228","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"14721dae_f61e17f4","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"d6f0ae46_f505ea4f","updated":"2024-01-18 15:15:59.000000000","message":"It\u0027s also worth noting that not all services are really using eventlet either. Glance can run in eventlet or native thread mode, depending on how it\u0027s being run. If in a wsgi container, it uses native threads to do the few things it needs to offload, which plays very well with uwsgi, et al. If it\u0027s running standalone, then it uses eventlet. Dropping eventlet from glance\u0027s repo would be trivial.\n\nI\u0027d also point out that nova-api isn\u0027t really using eventlet (properly) right now either, which is why we\u0027ve got an effort underway to make it usable in native thread mode. I certainly wouldn\u0027t want to derail that effort as I think it\u0027s probably the best option for it anyway. If nova-api goes native-threads and the rest of nova remains eventlet-on-asyncio or native-asyncio, there will be places where we have to handle (yes, I know it can be done) that because of how incompatible asyncio code is with synchronous code.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"96800e79_df115233","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"ea7228fc_c26e23a7","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"1fd0174121a3018f708d59ba32082cabb0008142","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"d1c11806_84f09ba9","line":357,"range":{"start_line":357,"start_character":5,"end_line":357,"end_character":17},"in_reply_to":"ecb427c3_70a875c7","updated":"2024-01-23 13:28:19.000000000","message":"I agree with all the remarks and comments made by Sean and Dan.\nMoving to asyncio is not a solution that fit all the case.\n\nAs Sean and Dan said, some services doesn\u0027t even relies on eventlet.\nForcing common libs, like oslo, or even sdk, to adopt the asyncio model will surely force all the pieces of openstack to adopt this model (the asyncio model).\n\nThat\u0027s not what we want here. I think we should clarify that aspect in this proposal.\n\nIndeed, the way asyncio is designed divides code into two islands - async and non-async. If our low level components (common libs) adopt a strict async approach, then all the higher level components (services) will be also forced to adopt this approach, even if  they not uses eventlet currently. I think that\u0027s the main point of the remarks of Sean and Dan.\n\nImplementing asyncio in our common libs, will spreads its usage throughout the stack unless we specifically adopt a facade approach. Tiny synchronous facades for make both worlds happy. \nCommon libs would use async/await for literally everything internally, and would provide a tiny synchronous facade on top. \n\nEdgedb-python [1] is based on this paradigm and we could inspire from it to, at least, migrate our libraries. Edgedb-python provide an Asyncio API [2] and a blocking API [3]. Islands are no more isolated worlds. Bridges connect both worlds.\n\nOnly services that relies on eventlet would really have to decide for their own design. One thing is sure, they have to migrate away from eventlet. They could decide to rely on asyncio, or rather, as you said, to use native threads.\n\nEach approach, threading based network programming, or asyncio based network programming, have downsides [4][5]. Developers should weight each pros and cons of the available solutions.\n\nHowever, for services that should abandon eventlet, as this document advocate to promote the use of Asyncio, I\u0027ll add that there are two reasons to use async-based concurrency over thread-based concurrency:\n\n- Asyncio offers a safer alternative to preemptive multitasking (i.e., using threads), thereby avoiding the bugs, race conditions, and other nondeterministic dangers that frequently occur in nontrivial threaded applications.\n- Asyncio offers a simple way to support many thousands of simultaneous socket connections, including being able to handle many long-lived connections for technologies like WebSockets, or MQTT etc.\n\nBoth reasons should be considered. Arguments gave by Itamar in his comments are also good ones and can\u0027t be ignored.\n\nTo summarize, I think this proposal need to be adjusted, at least, to reflect:\n- the non-propagation of concurrency models changes in common libraries, i.e synchronous facades.\n- the fact that services not relying on eventlet are not concerned by this proposal, i.e this community goal only concern services that rely on eventlet.\n\nThe \"How to migrate a library or a service\" sections needs a refactor with more details and precisions.\n\nTo finish, I recognize the magnitude of the impact of this proposal. We, the Openstack community, have to deal with limited resources. Openstack reached a kind of stability point. We are now in maintenance mode, and resources are more decreasing than they increase. It\u0027s not the right timing for such a work. Unfortunately, we don\u0027t really have choice. Python is maintained by at least 95 core developers and thousand contributors, while Eventlet rest on the shoulder of 3 active people. It\u0027s not possible, on the long term, to keep eventlet up-to-date with all the supported versions of Python and with coming versions of Python. If we want to keep Openstack going on the long run, we have to divorce from Eventlet.\n\n[1] https://github.com/edgedb/edgedb-python\n[2] https://www.edgedb.com/docs/clients/python/api/asyncio_client\n[3] https://www.edgedb.com/docs/clients/python/api/blocking_client\n[4] Threads downsides:\n\nThreading is an inefficient model for large-scale concurrency (thousands of con‐ current tasks), because...\n\nUsing threads is resource-intensive. Threads require extra operating system resources to create, such as preallocated, per-thread stack space that consumes process virtual memory up front. 8Mb stack space per thread...\n\nUsing threading can affect throughput. At very high concurrency levels (say, \u003e5,000 threads), there can also be an impact on throughput due to context-switching costs.\n\nThreading is inflexible. The operating system will continually share CPU time with all threads regardless of whether a thread is ready to do work or not. For instance, a thread may be waiting for data on a socket, but the OS scheduler may still switch to and from that thread thousands of times before any actual work needs to be done. In the async world, the select() system call is used to check whether a socket-awaiting coroutine needs a turn; if not, that coroutine isn’t even woken up, avoiding any switching costs completely.\n\n[5] Asyncio downsides:\n\nSince Asyncio is single-threaded (almost by definition), it is unaffected by the GIL, but it cannot benefit from multiple CPU cores either.\n\nAsyncio won\u0027t make concurrent programming more easy. Asyncio makes it a little easier to avoid certain kinds of truly nightmarish race condition bugs, but even with Asyncio there is still a great deal of complexity to deal with. How will our applications support health checks? How will our programs terminate connections gracefully when we receive a signal to shut down? How will we handle (blocking!) disk access and logging? These are just a few of the many complex design decisions that we will have to answer.\n\nWithout a clear vision during implementation Asyncio could propagate its model to higher level modules in the stack.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"   These deliverables heavily relies on eventlet and their design are"},{"line_number":362,"context_line":"   tiddly coupled to this library, so moving them first would be a first"}],"source_content_type":"text/x-rst","patch_set":14,"id":"6b59f7e4_90762ed8","line":359,"range":{"start_line":357,"start_character":3,"end_line":359,"end_character":21},"updated":"2024-01-10 19:49:57.000000000","message":"nit: in the rendered html these are not in a list","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"   These deliverables heavily relies on eventlet and their design are"},{"line_number":362,"context_line":"   tiddly coupled to this library, so moving them first would be a first"}],"source_content_type":"text/x-rst","patch_set":14,"id":"93ea1f75_ab329ec3","line":359,"range":{"start_line":357,"start_character":3,"end_line":359,"end_character":21},"in_reply_to":"2d47c3b3_49e5d7d4","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4b3ffdcc5435cc579e9830a566f8316b03f3fc2a","unresolved":true,"context_lines":[{"line_number":354,"context_line":"   https://github.com/eventlet/aiohub/issues/2"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"#. migrate the first Openstack bricks by relying on aiohub:"},{"line_number":357,"context_line":"   - oslo.service;"},{"line_number":358,"context_line":"   - oslo.messaging;"},{"line_number":359,"context_line":"   - oslo.concurrency"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"   These deliverables heavily relies on eventlet and their design are"},{"line_number":362,"context_line":"   tiddly coupled to this library, so moving them first would be a first"}],"source_content_type":"text/x-rst","patch_set":14,"id":"2d47c3b3_49e5d7d4","line":359,"range":{"start_line":357,"start_character":3,"end_line":359,"end_character":21},"in_reply_to":"6b59f7e4_90762ed8","updated":"2024-01-10 20:21:54.000000000","message":"one large depensicy to call out as well is the entiry Openstack sdk need to be ported to support asyncio.\n\nwithout a full reimplmation of the sdk to nativly support async io and provide no blocking client lib we will have to wrap all rest calls made to other sevice in a thread disptached to a thread pool.\n\nthat is a viable approch in the very short term but not long term so in the mediaum term native asyncio support in the sdk is required.\n\ni dont think the sdk has any eventlet dep but its a blocking lib so we need an async version fo it to replace the current blocking api or reset request will block the event loop. currently with eventlet all io including rest calles yeild the curernt eventlet to the envent loop until the request is compelte.\n\nwe will need to await a future/awaitable returned by an \"async def\" version of the sdk methods so that other async task can execute while we are waitign.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e542931cf578b3ef5f763d41dadf1267c1805a8","unresolved":true,"context_lines":[{"line_number":393,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":394,"context_line":"   remaining workload."},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Long terms solutions"},{"line_number":397,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"}],"source_content_type":"text/x-rst","patch_set":14,"id":"a4a7d854_2a907fbf","line":396,"updated":"2024-01-11 17:29:57.000000000","message":"I feel like this is a lot longer of a target than is maybe being presented or assumed here. This change would be, IMHO, the largest migration we\u0027ve ever undertaken, at a time when development resources are historically low. We\u0027ve still got rootwrap in the major projects (not like we used to, but I wouldn\u0027t say we ever finished that transition) for example. Developer resources for the RBAC have been difficult to come by for years, and that\u0027s work that actually brings important new functionality, not just what would be perceived as invisible hygeine maintenance from the outside. And of course, using RBAC as an example, I think this is likely to be a moving target over time, as we determine the best way to make these things happen as we convert actual code, monitor actual performance and behavior regressions, etc.\n\nSo if we\u0027re going to go this way, I think we need to be realistic and honest about how long it\u0027s going to take, and at what point we expect migration to stop (not be finished). Like, I expect much of nova will move to the explicit wait-for-async call points, but never move past that. Actual use of async methods for RPC-serving manager calls I can imagine never happening and just remaining effectively in compatibility mode forever.\n\nMigrating to \"good enough to drop eventlet but far from done\" and never moving past that means a lot of cruft in the code base and a very non-ideal situation from a performance perspective, I think.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"51d4f66e1a8f14222897eb2071a522cf4fe96bd6","unresolved":true,"context_lines":[{"line_number":393,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":394,"context_line":"   remaining workload."},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Long terms solutions"},{"line_number":397,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"}],"source_content_type":"text/x-rst","patch_set":14,"id":"f445a74e_ef06d2e8","line":396,"in_reply_to":"a4a7d854_2a907fbf","updated":"2024-01-26 10:13:13.000000000","message":"Indeed, the estimated deadline is surely undervalued. It is difficult to evaluate it properly.\n\nMoving the deadline too far could counter productive while proposing a closer deadline could be unrealistic.\n\n\u003e Actual use of async methods for RPC-serving manager calls I can imagine never happening and just remaining effectively in compatibility mode forever.\n\nWhat do you mean by compatibility mode? Please describe your thinking.\n\n\u003e Migrating to \"good enough to drop eventlet but far from done\" and never moving past that means a lot of cruft in the code base and a very non-ideal situation from a performance perspective, I think.\n\nI\u0027d expect that if we are able to drop eventlet, then we would be iso, in terms of IO concurrency/async, with our current runtime. In other words, green things would have been replaced by their asyncio equivalent, and where the asyncio paradigm is enough isolated to do not propagate to service that do not relied on eventlet before. So, I\u0027m not sure what you mean by saying:\n\n\u003e lot of cruft in the code base and a very non-ideal situation from a performance perspective.\n\nAfter the migration I\u0027d expect, at least, identical performances, or even improved performance. Asyncio, by design, would reduce CPU usages (virtual memory concontext switching) and things like that.","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":393,"context_line":"   help making a list of migration priority and give a big picture of the"},{"line_number":394,"context_line":"   remaining workload."},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Long terms solutions"},{"line_number":397,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"This milestone would surely require at least two or three series. 2026.10/H"}],"source_content_type":"text/x-rst","patch_set":14,"id":"348f94a2_e7b8789a","line":396,"in_reply_to":"f445a74e_ef06d2e8","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ec3ac6ae11399edca47f76170f8749329f9d9708","unresolved":true,"context_lines":[{"line_number":429,"context_line":"   available resources to focus efforts on the hardest deliverables to"},{"line_number":430,"context_line":"   migrate."},{"line_number":431,"context_line":"   - Easily one should be migrated as soon as possible to allow cross"},{"line_number":432,"context_line":"   integration testing to be ran early during the migration of the"},{"line_number":433,"context_line":"   hardest one."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"   For more details about how to conduct a migration for a single deliverable"}],"source_content_type":"text/x-rst","patch_set":14,"id":"d76b4ab9_e01adb18","line":432,"range":{"start_line":432,"start_character":29,"end_line":432,"end_character":32},"updated":"2023-12-26 15:23:30.000000000","message":"nit: run","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":429,"context_line":"   available resources to focus efforts on the hardest deliverables to"},{"line_number":430,"context_line":"   migrate."},{"line_number":431,"context_line":"   - Easily one should be migrated as soon as possible to allow cross"},{"line_number":432,"context_line":"   integration testing to be ran early during the migration of the"},{"line_number":433,"context_line":"   hardest one."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"   For more details about how to conduct a migration for a single deliverable"}],"source_content_type":"text/x-rst","patch_set":14,"id":"75ad1a2e_aea87701","line":432,"range":{"start_line":432,"start_character":29,"end_line":432,"end_character":32},"in_reply_to":"d76b4ab9_e01adb18","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f72f20a9f9ce3117bb2d85f39c5e41276c3e8d5c","unresolved":true,"context_lines":[{"line_number":517,"context_line":"the name of library in requirements file to move back to the original version."},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"The same is not true for services who are not present in requirements file."},{"line_number":520,"context_line":"Services."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"So either services are migrated with incremental steps or they are forked,"},{"line_number":523,"context_line":"migrated, and then their official usages switched in deployment tools, like"}],"source_content_type":"text/x-rst","patch_set":14,"id":"63b4e49b_8074b8ad","line":520,"range":{"start_line":520,"start_character":0,"end_line":520,"end_character":9},"updated":"2024-01-10 19:49:57.000000000","message":"Is this a new paragraph?","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"0138859fd9063e053252074c10c12508748cc740","unresolved":false,"context_lines":[{"line_number":517,"context_line":"the name of library in requirements file to move back to the original version."},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"The same is not true for services who are not present in requirements file."},{"line_number":520,"context_line":"Services."},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"So either services are migrated with incremental steps or they are forked,"},{"line_number":523,"context_line":"migrated, and then their official usages switched in deployment tools, like"}],"source_content_type":"text/x-rst","patch_set":14,"id":"ce6cd475_71b19f7c","line":520,"range":{"start_line":520,"start_character":0,"end_line":520,"end_character":9},"in_reply_to":"63b4e49b_8074b8ad","updated":"2024-02-21 09:57:47.000000000","message":"Done","commit_id":"a0d828ea7ad58f7e0102bb91da927bc0ccbe2a32"}],"goals/proposed/remove-eventlet.rst":[{"author":{"_account_id":15993,"name":"Amy Marrich","display_name":"Amy Marrich (spotz)","email":"amy@demarco.com","username":"amarrich"},"change_message_id":"77844f1f6eb297ca5d0d1ebb2f51746092bd589e","unresolved":true,"context_lines":[{"line_number":487,"context_line":"   So, in a first time will have to deprecate oslo.service, and to provide"},{"line_number":488,"context_line":"   migration paths toward Cotyledon and Futurist."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"   Once oslo.service won\u0027t be used anymore in Openstack, we will be free to"},{"line_number":491,"context_line":"   abandon it."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"#. Introduce Asyncio in the first Openstack bricks (a couple of identified"}],"source_content_type":"text/x-rst","patch_set":21,"id":"a782053a_6b4e4a5e","line":490,"range":{"start_line":490,"start_character":46,"end_line":490,"end_character":55},"updated":"2024-06-10 22:25:38.000000000","message":"Openstack should be OpenStack everywhere","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":false,"context_lines":[{"line_number":487,"context_line":"   So, in a first time will have to deprecate oslo.service, and to provide"},{"line_number":488,"context_line":"   migration paths toward Cotyledon and Futurist."},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"   Once oslo.service won\u0027t be used anymore in Openstack, we will be free to"},{"line_number":491,"context_line":"   abandon it."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"#. Introduce Asyncio in the first Openstack bricks (a couple of identified"}],"source_content_type":"text/x-rst","patch_set":21,"id":"b963e5c4_3722a0d1","line":490,"range":{"start_line":490,"start_character":46,"end_line":490,"end_character":55},"in_reply_to":"a782053a_6b4e4a5e","updated":"2024-07-09 05:42:24.000000000","message":"Done","commit_id":"ce9f6544e9a0337f670d1cc410e728dbf79da02b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":15,"context_line":"Problem"},{"line_number":16,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"OpenStack is build on the top of asynchronous mechanisms."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"All the OpenStack components heavily relies on the Eventlet library to"},{"line_number":21,"context_line":"obtain asynchronous features and greenlet coroutines, however, the OpenStack"}],"source_content_type":"text/x-rst","patch_set":26,"id":"aa4a886b_7497622f","line":18,"range":{"start_line":18,"start_character":13,"end_line":18,"end_character":18},"updated":"2024-07-09 05:42:24.000000000","message":"nit: built","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"OpenStack is build on the top of asynchronous mechanisms."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"All the OpenStack components heavily relies on the Eventlet library to"},{"line_number":21,"context_line":"obtain asynchronous features and greenlet coroutines, however, the OpenStack"},{"line_number":22,"context_line":"community currently suffer from many aspects of the usage of that library."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"c2fe092c_0e8359f9","line":20,"range":{"start_line":20,"start_character":37,"end_line":20,"end_character":43},"updated":"2024-07-09 05:42:24.000000000","message":"nit: rely","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":21,"context_line":"obtain asynchronous features and greenlet coroutines, however, the OpenStack"},{"line_number":22,"context_line":"community currently suffer from many aspects of the usage of that library."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Indeed this library currently do not support Python 3.12 and face many issues"},{"line_number":25,"context_line":"with Python 3.11 (those are described below)."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This new python version will be part of the supported runtime in the coming"}],"source_content_type":"text/x-rst","patch_set":26,"id":"860cd2a8_8f95ac7a","line":24,"range":{"start_line":24,"start_character":30,"end_line":24,"end_character":32},"updated":"2024-07-09 05:42:24.000000000","message":"nit: does","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":45,"context_line":"   as an active core member. The consequences of this inactivity are legion."},{"line_number":46,"context_line":"   Tests don\u0027t pass, locally or in CI. CI doesn\u0027t run at all for Python 3.11."},{"line_number":47,"context_line":"   The github pull requests and issues backlogs of Eventlet are growing"},{"line_number":48,"context_line":"   indefinitely. Legit bug are not fixed. Python 3.12 is not supported in"},{"line_number":49,"context_line":"   runtime."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"#. **The technological dead-end:** The premise of Eventlet is drop-in"}],"source_content_type":"text/x-rst","patch_set":26,"id":"46db0b30_471be5eb","line":48,"range":{"start_line":48,"start_character":23,"end_line":48,"end_character":26},"updated":"2024-07-17 12:27:55.000000000","message":"nitty nit: bugs","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"So, for these reasons, thinking that way will sooner lead us toward deeper"},{"line_number":128,"context_line":"moats which are impossible to cross. Thinking that way already led us to stick"},{"line_number":129,"context_line":"to EOLed design of CPython."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"One could think that the Eventlet case is an isolated case. Unfortunately not."},{"line_number":132,"context_line":"`Resources are scarce \u003chttps://www.sonatype.com/hubfs/9th-Annual-SSSC-Report.pdf\u003e`_."}],"source_content_type":"text/x-rst","patch_set":26,"id":"a3337dd4_710aabfa","line":129,"range":{"start_line":129,"start_character":3,"end_line":129,"end_character":26},"updated":"2024-07-21 12:18:45.000000000","message":"I\u0027m not getting what specifically is meant here? As that reads as CPython design is EOLed overall. But I guess what is meant, is that we\u0027re stick with some aspects/implementations that are not aligned with best practices of current CPython versions?\n\nAnd I think you are making exact same point in a better way 2 paragraphs below.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"So, for these reasons, thinking that way will sooner lead us toward deeper"},{"line_number":128,"context_line":"moats which are impossible to cross. Thinking that way already led us to stick"},{"line_number":129,"context_line":"to EOLed design of CPython."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"One could think that the Eventlet case is an isolated case. Unfortunately not."},{"line_number":132,"context_line":"`Resources are scarce \u003chttps://www.sonatype.com/hubfs/9th-Annual-SSSC-Report.pdf\u003e`_."}],"source_content_type":"text/x-rst","patch_set":26,"id":"2562e82c_0c953b8a","line":129,"range":{"start_line":129,"start_character":3,"end_line":129,"end_character":26},"in_reply_to":"a3337dd4_710aabfa","updated":"2024-07-22 10:25:40.000000000","message":"Honestly, much of this analysis is based more on a biased opinion than actual fact. i dont think a case can be made that eventlet is trying to maintain 2.7 design, eventlet was  updated to be compatible with Python 3 and a lot of work went into ensuring that compatibility before we added support for Python 3.4/3.5\n\nI don\u0027t think it\u0027s worth spending more time removing this section from this spec as there is some truth to the general premise that monkey patching inherently results in technical debt that in the long term is not sustainable especially when modules are reimplemented in C.\n\nwe did not select eventlets as a networking library, we selected it as a concurrency libary with explicit and importantly implicit cooperative concurrence as a reaction to our bad experience with using twisted. it was an intentional design choice to not have explicit async semantic and syntax expressed throughout the code bases. Chateriseing the feature of eventlet that we specifically selected it for (implicit concurrency via implicit yielding on io) as a design defincey form another time when we intentionally chose to moving away form and explcit concurrency model(twisted) undermines the credibility of the document in my view.\n\nasyncio is an explicit concurrency model, just like twisted, it is not clear to me that it would have been considered a valid choice at the time the desire to move away from explicit concurrency motivated the move to eventlet in the first place.\n\nif we were to update this I would remove the entirety fo the root cause section but i don\u0027t think we need to do that to move forward.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"486a1279c1bedf76837d41229365b29685aa2d3a","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"So, for these reasons, thinking that way will sooner lead us toward deeper"},{"line_number":128,"context_line":"moats which are impossible to cross. Thinking that way already led us to stick"},{"line_number":129,"context_line":"to EOLed design of CPython."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"One could think that the Eventlet case is an isolated case. Unfortunately not."},{"line_number":132,"context_line":"`Resources are scarce \u003chttps://www.sonatype.com/hubfs/9th-Annual-SSSC-Report.pdf\u003e`_."}],"source_content_type":"text/x-rst","patch_set":26,"id":"0f86f943_f6abc951","line":129,"range":{"start_line":129,"start_character":3,"end_line":129,"end_character":26},"in_reply_to":"a3337dd4_710aabfa","updated":"2024-07-22 09:04:36.000000000","message":"The RLock problem described just above is a perfect example of \"EOLed design of CPython\".\n\nEventlet use a forked version of a CPython internal feature, based on a previous and old implementation of this module...","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":133,"context_line":"The same observation is true for the vast majority of other third parties"},{"line_number":134,"context_line":"libraries. Almost all these libraries rest on the shoulders of one or two"},{"line_number":135,"context_line":"people. It\u0027s the harsh law of the open source ecosystem. **Scarcity lead the"},{"line_number":136,"context_line":"world**. Only mainstream projects like CPython or OpenStack has decent"},{"line_number":137,"context_line":"resources. **Winners take all**."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The root cause of the problems described here is due to the fact of using"}],"source_content_type":"text/x-rst","patch_set":26,"id":"e8ef8e3f_0f3b07b6","line":136,"range":{"start_line":136,"start_character":60,"end_line":136,"end_character":63},"updated":"2024-07-09 05:42:24.000000000","message":"nit: have","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"The same observation is true for the vast majority of other third parties"},{"line_number":134,"context_line":"libraries. Almost all these libraries rest on the shoulders of one or two"},{"line_number":135,"context_line":"people. It\u0027s the harsh law of the open source ecosystem. **Scarcity lead the"},{"line_number":136,"context_line":"world**. Only mainstream projects like CPython or OpenStack has decent"},{"line_number":137,"context_line":"resources. **Winners take all**."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The root cause of the problems described here is due to the fact of using"},{"line_number":140,"context_line":"a library without resources. A library that did not have the means to adapt"}],"source_content_type":"text/x-rst","patch_set":26,"id":"9f7d4f1a_134df2f5","line":137,"range":{"start_line":136,"start_character":50,"end_line":137,"end_character":9},"updated":"2024-07-21 12:18:45.000000000","message":"has it? 😄","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"486a1279c1bedf76837d41229365b29685aa2d3a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"The same observation is true for the vast majority of other third parties"},{"line_number":134,"context_line":"libraries. Almost all these libraries rest on the shoulders of one or two"},{"line_number":135,"context_line":"people. It\u0027s the harsh law of the open source ecosystem. **Scarcity lead the"},{"line_number":136,"context_line":"world**. Only mainstream projects like CPython or OpenStack has decent"},{"line_number":137,"context_line":"resources. **Winners take all**."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"The root cause of the problems described here is due to the fact of using"},{"line_number":140,"context_line":"a library without resources. A library that did not have the means to adapt"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d0cebf54_83adfb04","line":137,"range":{"start_line":136,"start_character":50,"end_line":137,"end_character":9},"in_reply_to":"9f7d4f1a_134df2f5","updated":"2024-07-22 09:04:36.000000000","message":"Yes, in comparison to other opensource projects...","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":true,"context_lines":[{"line_number":204,"context_line":"OpenStack team."},{"line_number":205,"context_line":"Our challenge is to find a solution which take account of the evolution"},{"line_number":206,"context_line":"of the Python ecosystem."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. _on-eventlet:"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"On Eventlet"}],"source_content_type":"text/x-rst","patch_set":26,"id":"67e36db3_ef05e1c5","line":207,"updated":"2024-07-21 12:18:45.000000000","message":"I think we\u0027re missing a challenge for new contributors not to get lost in frameworks and approaches used by different projects if everyone will follow their own path.\nWhich makes having a \"default\" solution even more important, while still letting projects some freedom if they are desperately need it.\n\nBut writing down how tricky it might be for new people onboarded to OpenStack when each project does exact same thing differently is important and a challenge, imo.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":204,"context_line":"OpenStack team."},{"line_number":205,"context_line":"Our challenge is to find a solution which take account of the evolution"},{"line_number":206,"context_line":"of the Python ecosystem."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. _on-eventlet:"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"On Eventlet"}],"source_content_type":"text/x-rst","patch_set":26,"id":"8ec4e543_b0090670","line":207,"in_reply_to":"67e36db3_ef05e1c5","updated":"2024-07-22 10:25:40.000000000","message":"I think we should avoid trying to prescribe a default beyond recommending \nfuturist executors and asycio as two equally applicable options.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"486a1279c1bedf76837d41229365b29685aa2d3a","unresolved":true,"context_lines":[{"line_number":204,"context_line":"OpenStack team."},{"line_number":205,"context_line":"Our challenge is to find a solution which take account of the evolution"},{"line_number":206,"context_line":"of the Python ecosystem."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. _on-eventlet:"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"On Eventlet"}],"source_content_type":"text/x-rst","patch_set":26,"id":"4be7027d_a9cddaeb","line":207,"in_reply_to":"67e36db3_ef05e1c5","updated":"2024-07-22 09:04:36.000000000","message":"I totally agree with you. That\u0027s a side effect of not having a single one solution.\nChallenges won\u0027t be the same depending on where we place the cursor of the solution.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":211,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"The purpose of Eventlet is to manage asynchronism. To achieve that goal"},{"line_number":214,"context_line":"Eventlet rely on concepts, `monkey patching"},{"line_number":215,"context_line":"\u003chttps://eventlet.readthedocs.io/en/latest/patching.html#greening-the-world\u003e`_,"},{"line_number":216,"context_line":"and `greenthread \u003chttps://eventlet.readthedocs.io/en/latest/modules/greenthread.html\u003e`."},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"01c1141a_a29f69e3","line":214,"range":{"start_line":214,"start_character":9,"end_line":214,"end_character":13},"updated":"2024-07-09 05:42:24.000000000","message":"nit: relies","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":235,"context_line":"There are two main use cases for Eventlet:"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"#. As a required networking framework, much like one would use AsyncIO, trio,"},{"line_number":238,"context_line":"   or older frameworks like Twisted and tornado;"},{"line_number":239,"context_line":"#. As an optional, pluggable backend that allows swapping out blocking APIs"},{"line_number":240,"context_line":"   for an event loop, transparently, without changing any code. This is how"},{"line_number":241,"context_line":"   Celery and Gunicorn use eventlet."}],"source_content_type":"text/x-rst","patch_set":26,"id":"0d46938c_19162e73","line":238,"updated":"2024-07-22 10:25:40.000000000","message":"nit: this is the secondaty usage of evenlet in openstack so perhaps that should be presented second.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":238,"context_line":"   or older frameworks like Twisted and tornado;"},{"line_number":239,"context_line":"#. As an optional, pluggable backend that allows swapping out blocking APIs"},{"line_number":240,"context_line":"   for an event loop, transparently, without changing any code. This is how"},{"line_number":241,"context_line":"   Celery and Gunicorn use eventlet."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Greenthreads, are inherited from the greenlet library. They are lightweight"},{"line_number":244,"context_line":"coroutines for in-process sequential concurrent programming. Greenlets can"}],"source_content_type":"text/x-rst","patch_set":26,"id":"edb70607_1dbe3603","line":241,"updated":"2024-07-22 10:25:40.000000000","message":"this is how OpenStack primarily uses eventlty too.\n\noutside of Swift we really don\u0027t use eventlet for networking primarily\nwe use it to transparely replace blocking api with async apis enabling cooperative multi-tasking while the os handles io.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":252,"context_line":"launch periodic tasks. A concrete example of greenlet usage in OpenStack is"},{"line_number":253,"context_line":"the thread launched to manage the RADOS Block Device (RDB) calls. Those calls"},{"line_number":254,"context_line":"are executed in Eventlet tpool while the current coroutine/greenthread is"},{"line_number":255,"context_line":"blocking until the method completes."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Disclaimers"},{"line_number":258,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":26,"id":"a7790372_fa015095","line":255,"updated":"2024-07-22 10:25:40.000000000","message":"just noting some other examples but you dont need to include them.\n\nwe use eventlet to schedule periodic tasks to execute in the background on a semi-fixed schedule  after an aproximate interval of time has elapsed.\n\nwe also use it whwen we need to implemnet a \"scatter-gather pattern\" i.e to make the same request to multiple databases in parallel.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"924a3b10b86f5a5f266dcd69b1f77315cb047862","unresolved":true,"context_lines":[{"line_number":252,"context_line":"launch periodic tasks. A concrete example of greenlet usage in OpenStack is"},{"line_number":253,"context_line":"the thread launched to manage the RADOS Block Device (RDB) calls. Those calls"},{"line_number":254,"context_line":"are executed in Eventlet tpool while the current coroutine/greenthread is"},{"line_number":255,"context_line":"blocking until the method completes."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"Disclaimers"},{"line_number":258,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":26,"id":"4f195181_1623743e","line":255,"in_reply_to":"a7790372_fa015095","updated":"2024-07-22 20:10:17.000000000","message":"+1","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":261,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"**The solution proposed below focus exclusively on OpenStack components that"},{"line_number":264,"context_line":"currently relies on Eventlet. OpenStack components which are not relying on"},{"line_number":265,"context_line":"Eventlet can safely ignore this proposal. The proposed solution is a by"},{"line_number":266,"context_line":"default solution. Like with all governance goals, OpenStack teams are free to"},{"line_number":267,"context_line":"design their own solution.**"}],"source_content_type":"text/x-rst","patch_set":26,"id":"3fb9b402_15f97181","line":264,"range":{"start_line":264,"start_character":10,"end_line":264,"end_character":16},"updated":"2024-07-09 05:42:24.000000000","message":"nit: rely","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":266,"context_line":"default solution. Like with all governance goals, OpenStack teams are free to"},{"line_number":267,"context_line":"design their own solution.**"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"We should notice that Many teams do not have time and resources to follow"},{"line_number":270,"context_line":"their own path. For many of these team, the threading model they have"},{"line_number":271,"context_line":"inherited through the usage of Eventlet is blackbox. These teams are afraid to"},{"line_number":272,"context_line":"touch this model."}],"source_content_type":"text/x-rst","patch_set":26,"id":"9265cf7e_7f7e22ad","line":269,"range":{"start_line":269,"start_character":22,"end_line":269,"end_character":26},"updated":"2024-07-09 05:42:24.000000000","message":"nit: many","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":267,"context_line":"design their own solution.**"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"We should notice that Many teams do not have time and resources to follow"},{"line_number":270,"context_line":"their own path. For many of these team, the threading model they have"},{"line_number":271,"context_line":"inherited through the usage of Eventlet is blackbox. These teams are afraid to"},{"line_number":272,"context_line":"touch this model."},{"line_number":273,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"6ecfdd17_962c884f","line":270,"range":{"start_line":270,"start_character":34,"end_line":270,"end_character":38},"updated":"2024-07-09 05:42:24.000000000","message":"nit: teams","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":".. _on-the-standards-of-the-industry:"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"On the Standards of the Industry"},{"line_number":290,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"The raise of parallelism and of concurrency are trends which are carried by"}],"source_content_type":"text/x-rst","patch_set":26,"id":"34dcc018_22a1cc0d","line":289,"updated":"2024-07-22 10:25:40.000000000","message":"the amount of extra prose colouring the substance of this secition makes it much harder to understand what is being said.\n\nas someone how has been tryign to engange in this discussion while being pressed for time with other commitment, the lacke fo consice statements makes it much harder form me to find time to review this.\n\ni hope that we wont follow this style for future propsoals, context matters but in this case the context overshadows the proposal to the point of obsciring the intent of the proposal.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"The fact is now the Python community wanted these 2 concepts, parallelism"},{"line_number":327,"context_line":"and concurrency. The utility of a creation cannot be decreed, it"},{"line_number":328,"context_line":"is discovered. The original utility of Python can\u0027t fight."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"We recently discovered native concurrency with the addition of AsyncIO in the"},{"line_number":331,"context_line":"stdlib. We are now in the face of discovering multiprocessing. It is"}],"source_content_type":"text/x-rst","patch_set":26,"id":"52eb9865_8a766f2d","line":328,"updated":"2024-07-22 10:25:40.000000000","message":"nit: the last sentence is really just flavor and not substance.\nagain this does not make this more readable as it just extend the document\nwithout actully adding any new insight.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"We recently discovered native concurrency with the addition of AsyncIO in the"},{"line_number":331,"context_line":"stdlib. We are now in the face of discovering multiprocessing. It is"},{"line_number":332,"context_line":"inevitable."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"Starting from `Python 3.13 \u003chttps://docs.python.org/3.13/whatsnew/3.13.html\u003e`_"},{"line_number":335,"context_line":"the `PEP 703 \u003chttps://peps.python.org/pep-0703/\u003e`_ will become a reality and"}],"source_content_type":"text/x-rst","patch_set":26,"id":"f64ffa6a_04fa6b5e","line":332,"updated":"2024-07-22 10:25:40.000000000","message":"nit: asycnio was not discovered it was designed to meet a need\n\nthis language in a technical document is mildly infuriating to read.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":true,"context_lines":[{"line_number":418,"context_line":"   OpenStack. This global schedule is composed of 3 global milestones, short,"},{"line_number":419,"context_line":"   medium, and long term. Each milestone is ordered in terms of priority"},{"line_number":420,"context_line":"   and of dependency. This section aim to define how to move from A to Z;"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Removing our dependency to Eventlet is a real challenge, and, we can\u0027t"},{"line_number":423,"context_line":"take such challenge without strategy and tactics. Each items which compose"},{"line_number":424,"context_line":"this solution is a tactics and the whole is the strategy."}],"source_content_type":"text/x-rst","patch_set":26,"id":"56f093ae_477fb492","line":421,"updated":"2024-07-21 12:18:45.000000000","message":"I _think_ this might be missing one more step - identify which of out other dependencies do still rely on Eventlet.\n\nAs you previously wrote, eventlet is used by Celery and gunicorn. And I bet there are many-many more.\nSo I guess we also need to have a plan for replacing such libraries as well, or be aware of their plans for the future.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"486a1279c1bedf76837d41229365b29685aa2d3a","unresolved":true,"context_lines":[{"line_number":418,"context_line":"   OpenStack. This global schedule is composed of 3 global milestones, short,"},{"line_number":419,"context_line":"   medium, and long term. Each milestone is ordered in terms of priority"},{"line_number":420,"context_line":"   and of dependency. This section aim to define how to move from A to Z;"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Removing our dependency to Eventlet is a real challenge, and, we can\u0027t"},{"line_number":423,"context_line":"take such challenge without strategy and tactics. Each items which compose"},{"line_number":424,"context_line":"this solution is a tactics and the whole is the strategy."}],"source_content_type":"text/x-rst","patch_set":26,"id":"77b2d9cb_9dbb1063","line":421,"in_reply_to":"56f093ae_477fb492","updated":"2024-07-22 09:04:36.000000000","message":"Good point, I take note and I\u0027ll add an item related to your comment.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":429,"context_line":"Removing Eventlet is not an option. That\u0027s a vital need."},{"line_number":430,"context_line":"Lets see how to do that removal."},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"The Alternatives"},{"line_number":433,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"We need alternatives to replace Eventlet. One Alternative one choice, many"}],"source_content_type":"text/x-rst","patch_set":26,"id":"70bf1d69_20f3d0b1","line":432,"updated":"2024-07-22 10:25:40.000000000","message":"nit: the alternitive section of a spec is normally used to present the altertinve approch that wont be taken not to preset a set of replacement libaries to use instead of the current one so this is not a great name for this section if you are used to how spec work in other projects.\n\ni was originally confused by this when reading the subsection and then realised you are usign it in a different context here.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":546,"context_line":"We think that Aiohttp is a credible alternative to many use cases"},{"line_number":547,"context_line":"provided by Eventlet\u0027s patterns."},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"Using aiohttp de facto lead us to using AsyncIO. Rewriting a server module"},{"line_number":550,"context_line":"with aiohttp may require a significant amounts of works. Fortunately for us"},{"line_number":551,"context_line":"Aiohttp can now be used through the mechanisms offered by Awaitlet."},{"line_number":552,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"455e3e31_1c76149f","line":549,"range":{"start_line":549,"start_character":31,"end_line":549,"end_character":39},"updated":"2024-07-17 12:27:55.000000000","message":"nitty nit: shouldn\u0027be \"to use AsyncIO\"?","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":553,"context_line":"Eventlet\u0027s AsyncIO Hub"},{"line_number":554,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"Eventlet\u0027s is `AsyncIO Hub"},{"line_number":557,"context_line":"\u003chttps://eventlet.readthedocs.io/en/latest/asyncio/compatibility.html#asyncio-compatibility\u003e`_"},{"line_number":558,"context_line":"is a compatibility layer between AsyncIO and"},{"line_number":559,"context_line":"Eventlet. This hub has been recently introduced. Like Awaitlet, the creation"}],"source_content_type":"text/x-rst","patch_set":26,"id":"440bdd92_61239b76","line":556,"range":{"start_line":556,"start_character":0,"end_line":556,"end_character":13},"updated":"2024-07-17 12:27:55.000000000","message":"nitty nit: \"Eventlet\u0027s\" or \"Eventlet\"?","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":573,"context_line":"To finish, threading and native threads could be used to run tasks in a"},{"line_number":574,"context_line":"parallel fashion."},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"As Eventlet rely on green threads and greenlet, in many aspects, it would"},{"line_number":577,"context_line":"surely more easier to migrate our Eventlet existing code to native threads."},{"line_number":578,"context_line":"On the other hand, using Awaitlet could provide a credible alternative to"},{"line_number":579,"context_line":"threads, depending on the context."}],"source_content_type":"text/x-rst","patch_set":26,"id":"34efa326_24113e3f","line":576,"range":{"start_line":576,"start_character":65,"end_line":576,"end_character":73},"updated":"2024-07-17 12:27:55.000000000","message":"nit: it would be","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":574,"context_line":"parallel fashion."},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"As Eventlet rely on green threads and greenlet, in many aspects, it would"},{"line_number":577,"context_line":"surely more easier to migrate our Eventlet existing code to native threads."},{"line_number":578,"context_line":"On the other hand, using Awaitlet could provide a credible alternative to"},{"line_number":579,"context_line":"threads, depending on the context."},{"line_number":580,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"12ffe501_63943352","line":577,"range":{"start_line":577,"start_character":7,"end_line":577,"end_character":11},"updated":"2024-07-17 12:27:55.000000000","message":"nit: I don\u0027t think this is necessary","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":590,"context_line":"*\"waiting for things to happen\"* and because of this, we don\u0027t need the"},{"line_number":591,"context_line":"operating system to efficiently distribute our tasks over multiple CPUs."},{"line_number":592,"context_line":"Furthermore, we don\u0027t need the risks that preemptive multitasking brings, such"},{"line_number":593,"context_line":"as race conditions when working with shared memory."},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"Threads consume a lot of preallocated virtual memory per thread (8Mb stack"},{"line_number":596,"context_line":"space per thread). Threads requires context switching even when threads are"}],"source_content_type":"text/x-rst","patch_set":26,"id":"1a244a6d_4d9b0d50","line":593,"updated":"2024-07-22 10:25:40.000000000","message":"i agree since network program in not the primary reason we use eventlets outside of swift that is why treading is indeed a suitable alternative for many OpenStack projects.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":true,"context_lines":[{"line_number":601,"context_line":"Threads are resources intensive and not particularly designed for non blocking"},{"line_number":602,"context_line":"IO."},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"In Python, threads are impacted by the GIL in many aspects. We won\u0027t repeat"},{"line_number":605,"context_line":"the problem with *parallelism* in Python in this section, rather we invite the"},{"line_number":606,"context_line":"reader to go to :ref:`on-the-standards-of-the-industry`."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"Other alternatives"},{"line_number":609,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"1fd20ba1_3daf9b61","line":606,"range":{"start_line":604,"start_character":0,"end_line":606,"end_character":56},"updated":"2024-07-21 12:18:45.000000000","message":"Well, but the the thing is, that we are _super_ close to the no-GIL world, and by the time we will accomplish the goal, we for sure will be quite firmly in this world.\n\nAs while async is not affected by GIL, it\u0027s still not very parallel, right?\n\nSo might be it\u0027s worth thinking strategically as if we already have no-GIL and take decision based on this?","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"486a1279c1bedf76837d41229365b29685aa2d3a","unresolved":true,"context_lines":[{"line_number":601,"context_line":"Threads are resources intensive and not particularly designed for non blocking"},{"line_number":602,"context_line":"IO."},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"In Python, threads are impacted by the GIL in many aspects. We won\u0027t repeat"},{"line_number":605,"context_line":"the problem with *parallelism* in Python in this section, rather we invite the"},{"line_number":606,"context_line":"reader to go to :ref:`on-the-standards-of-the-industry`."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"Other alternatives"},{"line_number":609,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"a7170fa1_9700790f","line":606,"range":{"start_line":604,"start_character":0,"end_line":606,"end_character":56},"in_reply_to":"1fd20ba1_3daf9b61","updated":"2024-07-22 09:04:36.000000000","message":"That\u0027s more or less what I tried to do with one of my recent (and previous) patch set:\n\nhttps://review.opendev.org/c/openstack/governance/+/902585/22..26\n\nMy goal with this patch set was to promote concurrency, but, at the same time, to offer a strong way to do parallelism, for threads based scenarios. See the `The Structured Parallel Patterns` section that I removed. \n\nThis section was dedicated to handle that GIL removal, but IMO, after thinking twice about it, I was think that this is a separated topic, this is why I finally decided to remove the structured parallel patterns from this proposal. IMO it should be a separated discussion.\n\nYes, Asyncio by itself, is not affected by GIL because, asyncio is concurrency [1] not parallelism [2]. Asyncio is ran in the main thread (1 thread context). I think that this is something that we shouldn\u0027t ignore, but as threads and parallelism are best suited for computing data than for network IO, and as Eventlet is also based on concurrency, I think that usage of threads will be \"a case at the margin\" during this migration, this is why I think we should address this GIL topic in a separated discussion.  \n\nThe parallel patterns I spoke about could lead to the creation of a new oslo lib or something like that...\n\n[1] https://eventlet.readthedocs.io/en/latest/asyncio/guide/glossary.html#concurrency\n[2] https://eventlet.readthedocs.io/en/latest/asyncio/guide/glossary.html#parallelism","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":601,"context_line":"Threads are resources intensive and not particularly designed for non blocking"},{"line_number":602,"context_line":"IO."},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"In Python, threads are impacted by the GIL in many aspects. We won\u0027t repeat"},{"line_number":605,"context_line":"the problem with *parallelism* in Python in this section, rather we invite the"},{"line_number":606,"context_line":"reader to go to :ref:`on-the-standards-of-the-industry`."},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"Other alternatives"},{"line_number":609,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"dd8f1dec_ad824138","line":606,"range":{"start_line":604,"start_character":0,"end_line":606,"end_character":56},"in_reply_to":"1fd20ba1_3daf9b61","updated":"2024-07-22 10:25:40.000000000","message":"we should not be using raw thread but rather thread pools (when threads are appropriate) via futurist executors. the gil is largely not a factor for nova\u0027s usage of eventlet as io casue the thread to yeild just as eventlet would have.\n\neventlet does not provide parallelism in genreal unless we triger io and the os can execute that in parallel whils we context switch.\n\nif we are replacing eventlet concurrence with tread we are not doing so to achieve parallelism we are doing it to achieve concurrency. the two are very different and this document incorrectly assumes we are aiming for parallelism.\n\n\nnova uses an eventlet tpool object ot wrap the blocking calls to ceph by wrapping the rbd and rados clients.\n\nwe do this for concurrency to ensure while we are waiting for ceph to complete the blocking task (create a volume), we can concurrently execute a perodic task or repsonce do an rpc call to reboot a vm. we are not using eventlet to achive paralleium and guarentee we can do both at once. we are using it to provide concurancy to ensure we can make forward progress on both operations, context switching as possible when we io or other operations allow.\n\nwe increase the througput by iterleaving the execution of multiple tasks to mitigrate the latency of some exteranl operations like converting a disk image into the correct format which executes as an external process. we are however not generally using eventlet to provide paralleisum today and as such the gil largely does not matter.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":620,"context_line":"Migration Guide"},{"line_number":621,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"The migration guide rest on 3 pillars:"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"#. The guide would define the official alternatives where we would be"},{"line_number":626,"context_line":"   able to provide assistance. ;"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d2cdbaf2_aed39608","line":623,"range":{"start_line":623,"start_character":20,"end_line":623,"end_character":24},"updated":"2024-07-09 05:42:24.000000000","message":"nit: rests","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":625,"context_line":"#. The guide would define the official alternatives where we would be"},{"line_number":626,"context_line":"   able to provide assistance. ;"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"#. The guide must provide a glossary to ensure that everyone as the same"},{"line_number":629,"context_line":"   understanding of the used terms;"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"#. the guide aim to provide a table of correspondences that developers"}],"source_content_type":"text/x-rst","patch_set":26,"id":"1a26ba50_cd0cc261","line":628,"range":{"start_line":628,"start_character":61,"end_line":628,"end_character":63},"updated":"2024-07-17 12:27:55.000000000","message":"nit: has","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":628,"context_line":"#. The guide must provide a glossary to ensure that everyone as the same"},{"line_number":629,"context_line":"   understanding of the used terms;"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"#. the guide aim to provide a table of correspondences that developers"},{"line_number":632,"context_line":"   can use to migrate their code and hence remove their Eventlet usages."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"**This section simply aim to offer an overview of what this guide could look"}],"source_content_type":"text/x-rst","patch_set":26,"id":"c13961b4_6b507a2d","line":631,"range":{"start_line":631,"start_character":13,"end_line":631,"end_character":16},"updated":"2024-07-09 05:42:24.000000000","message":"nit: aims","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":631,"context_line":"#. the guide aim to provide a table of correspondences that developers"},{"line_number":632,"context_line":"   can use to migrate their code and hence remove their Eventlet usages."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"**This section simply aim to offer an overview of what this guide could look"},{"line_number":635,"context_line":"like**."},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"The guide proposal made in this document don\u0027t aim to give all the possible"}],"source_content_type":"text/x-rst","patch_set":26,"id":"8c62357e_d5d75a7b","line":634,"range":{"start_line":634,"start_character":22,"end_line":634,"end_character":25},"updated":"2024-07-09 05:42:24.000000000","message":"nit: aims","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":634,"context_line":"**This section simply aim to offer an overview of what this guide could look"},{"line_number":635,"context_line":"like**."},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"The guide proposal made in this document don\u0027t aim to give all the possible"},{"line_number":638,"context_line":"details that can find their place in this guide. This proposal simply opens"},{"line_number":639,"context_line":"this referential. The details of the different section of this guide should"},{"line_number":640,"context_line":"be defined in a parallel spec/blueprint/review."}],"source_content_type":"text/x-rst","patch_set":26,"id":"0a566450_48ec2642","line":637,"range":{"start_line":637,"start_character":41,"end_line":637,"end_character":46},"updated":"2024-07-09 05:42:24.000000000","message":"nit: doesn\u0027t","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":642,"context_line":"As new usages of Eventlet are discouraged, and as migrating off of Eventlet"},{"line_number":643,"context_line":"is encouraged, we think that this guide will benefit to a more broader"},{"line_number":644,"context_line":"audience if it is hosted into the Eventlet documentation itself. The whole"},{"line_number":645,"context_line":"Python community would benefit of this guide and of our works."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Lets now observe the details and concepts of each pillars."},{"line_number":648,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"d3f6cfe2_702c4692","line":645,"range":{"start_line":645,"start_character":49,"end_line":645,"end_character":51},"updated":"2024-07-09 05:42:24.000000000","message":"nit: from","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":642,"context_line":"As new usages of Eventlet are discouraged, and as migrating off of Eventlet"},{"line_number":643,"context_line":"is encouraged, we think that this guide will benefit to a more broader"},{"line_number":644,"context_line":"audience if it is hosted into the Eventlet documentation itself. The whole"},{"line_number":645,"context_line":"Python community would benefit of this guide and of our works."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Lets now observe the details and concepts of each pillars."},{"line_number":648,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"e6194877_8dcaf8ed","line":645,"range":{"start_line":645,"start_character":31,"end_line":645,"end_character":33},"updated":"2024-07-09 05:42:24.000000000","message":"nit: from","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":644,"context_line":"audience if it is hosted into the Eventlet documentation itself. The whole"},{"line_number":645,"context_line":"Python community would benefit of this guide and of our works."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Lets now observe the details and concepts of each pillars."},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"The Storage of the Alternatives"},{"line_number":650,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d2d441ba_31ea7cfa","line":647,"range":{"start_line":647,"start_character":50,"end_line":647,"end_character":57},"updated":"2024-07-09 05:42:24.000000000","message":"nit: pillar","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Lets now observe the details and concepts of each pillars."},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"The Storage of the Alternatives"},{"line_number":650,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"That\u0027s just the storage of the elements, the alternatives, from the previous"}],"source_content_type":"text/x-rst","patch_set":26,"id":"3b841185_2fb1873c","line":649,"updated":"2024-07-22 10:25:40.000000000","message":"again i really find the way we are phasiging these section as offputting\n\nthis does not read as a technical document.\nthe tone and styls if very far off as it reads as if you are making an emotional argrment not a formal techncial one.\n\nthis is the 3rd time i have consider stoping this review because of this.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":653,"context_line":"section. Alternatives may be seen as something alive, so the guide needs to"},{"line_number":654,"context_line":"remains up-to-date in accordance with the possible additions."},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"we may think the selected alternatives as a shelve of raw materials."},{"line_number":657,"context_line":"Elementary bricks. Building house requires bricks, but it also require"},{"line_number":658,"context_line":"architectural plan. The table of correspondences below is the architectural"},{"line_number":659,"context_line":"plan."}],"source_content_type":"text/x-rst","patch_set":26,"id":"94edf122_1d59fabd","line":656,"range":{"start_line":656,"start_character":44,"end_line":656,"end_character":50},"updated":"2024-07-09 05:42:24.000000000","message":"nit: shelf","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":675,"context_line":"* thread;"},{"line_number":676,"context_line":"* etc..."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"The Tables of Correspondences"},{"line_number":679,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"The goal of the tables of correspondences is to bind the common use cases of"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d2a46035_9a89d5a5","line":678,"updated":"2024-07-22 10:25:40.000000000","message":"again we dont need this title just put the table here.\n\nyou shoudl prefer to show not say.\n\nA short expeostion is fine but at least half of the document sofar could be deleted with losing any importing information.\n\ni have spend almost an hour just gettting to this point since it started reviewing this again and its really frustrating.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b6dc3d3baded44c67459b1851ccbccfb38ee4346","unresolved":true,"context_lines":[{"line_number":702,"context_line":"The first table of correspondences would be based on the main Eventlet"},{"line_number":703,"context_line":"design patterns, server, client, dispatch (see :ref:`on-eventlet`)."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"This table invite the persons in charge of the migration to think in terms"},{"line_number":706,"context_line":"of common patterns. Most people using Eventlet can identify themself into one"},{"line_number":707,"context_line":"of these tree categories."},{"line_number":708,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"af8d13fa_1934178f","line":705,"range":{"start_line":705,"start_character":11,"end_line":705,"end_character":17},"updated":"2024-07-16 08:24:46.000000000","message":"nit: invites","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b6dc3d3baded44c67459b1851ccbccfb38ee4346","unresolved":true,"context_lines":[{"line_number":703,"context_line":"design patterns, server, client, dispatch (see :ref:`on-eventlet`)."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"This table invite the persons in charge of the migration to think in terms"},{"line_number":706,"context_line":"of common patterns. Most people using Eventlet can identify themself into one"},{"line_number":707,"context_line":"of these tree categories."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"+---------------------+--------------------------------+--------------------------------+"}],"source_content_type":"text/x-rst","patch_set":26,"id":"19cf199f_11eb82b7","line":706,"updated":"2024-07-16 08:24:46.000000000","message":"nit: themselves","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":704,"context_line":""},{"line_number":705,"context_line":"This table invite the persons in charge of the migration to think in terms"},{"line_number":706,"context_line":"of common patterns. Most people using Eventlet can identify themself into one"},{"line_number":707,"context_line":"of these tree categories."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"+---------------------+--------------------------------+--------------------------------+"},{"line_number":710,"context_line":"| Eventlet Patterns   | Eventlet features              | Available alternatives         |"}],"source_content_type":"text/x-rst","patch_set":26,"id":"0b346c85_0ffac2ae","line":707,"range":{"start_line":707,"start_character":9,"end_line":707,"end_character":13},"updated":"2024-07-09 05:42:24.000000000","message":"three","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b6dc3d3baded44c67459b1851ccbccfb38ee4346","unresolved":true,"context_lines":[{"line_number":743,"context_line":"|                     |                                | awaitlet*                      |"},{"line_number":744,"context_line":"+---------------------+--------------------------------+--------------------------------+"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"The second table of correspondences invite the reader to think in terms of"},{"line_number":747,"context_line":"task and coroutine. This table is based on a hierarchy of tiers."},{"line_number":748,"context_line":"Each tiers are built on the specification of the previous level."},{"line_number":749,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"3b7818e0_6d51744f","line":746,"updated":"2024-07-16 08:24:46.000000000","message":"nit: invites","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":745,"context_line":""},{"line_number":746,"context_line":"The second table of correspondences invite the reader to think in terms of"},{"line_number":747,"context_line":"task and coroutine. This table is based on a hierarchy of tiers."},{"line_number":748,"context_line":"Each tiers are built on the specification of the previous level."},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"To provide replacement to existing features of Eventlet, we think it is much"},{"line_number":751,"context_line":"more useful to think about the use cases being arranged in a hierarchy, rather"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5479e2cf_aeac0802","line":748,"range":{"start_line":748,"start_character":5,"end_line":748,"end_character":10},"updated":"2024-07-09 05:42:24.000000000","message":"nit: tier","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":754,"context_line":"This way of representing the correspondences is inspired from the book"},{"line_number":755,"context_line":"`Using Asyncio in Python \u003chttps://www.oreilly.com/library/view/using-asyncio-in/9781492075325/\u003e`_."},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"Each tiers is related to a level of abstraction. The first tiers are"},{"line_number":758,"context_line":"the most abstract layers. The last tiers reflect low level mechanisms."},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"For most people Eventlet and its threading model is a blackbox. By reasoning"}],"source_content_type":"text/x-rst","patch_set":26,"id":"abdabf8e_8b538160","line":757,"range":{"start_line":757,"start_character":5,"end_line":757,"end_character":10},"updated":"2024-07-09 05:42:24.000000000","message":"nit: tier","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":770,"context_line":"Developers will be free to decide which solution best fit their needs."},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"Asyncio target two main audiences:"},{"line_number":773,"context_line":"    * end-users developers who wants to make applications using asyncio -"},{"line_number":774,"context_line":"      Some may consider OpenStack services (neutron, nova, etc);"},{"line_number":775,"context_line":"    * framework developers who wants to make frameworks and libraries that"},{"line_number":776,"context_line":"      end-users developers can use in their applications -"}],"source_content_type":"text/x-rst","patch_set":26,"id":"2a0c5ef5_ba1865a4","line":773,"range":{"start_line":773,"start_character":31,"end_line":773,"end_character":36},"updated":"2024-07-09 05:42:24.000000000","message":"nit: want","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":772,"context_line":"Asyncio target two main audiences:"},{"line_number":773,"context_line":"    * end-users developers who wants to make applications using asyncio -"},{"line_number":774,"context_line":"      Some may consider OpenStack services (neutron, nova, etc);"},{"line_number":775,"context_line":"    * framework developers who wants to make frameworks and libraries that"},{"line_number":776,"context_line":"      end-users developers can use in their applications -"},{"line_number":777,"context_line":"      Some may consider OpenStack shared libraries (oslo, etc)."},{"line_number":778,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"cac31a73_3d44ad05","line":775,"range":{"start_line":775,"start_character":31,"end_line":775,"end_character":36},"updated":"2024-07-09 05:42:24.000000000","message":"nit: want","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b6dc3d3baded44c67459b1851ccbccfb38ee4346","unresolved":true,"context_lines":[{"line_number":777,"context_line":"      Some may consider OpenStack shared libraries (oslo, etc)."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"But the OpenStack world is not so waterproof, and it is common to see teams who"},{"line_number":780,"context_line":"implements services to also implements API related to these services, so even"},{"line_number":781,"context_line":"services may be seen as a framework developers audience."},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"This hierarchy is so strongly coupled to Asyncio concept, but other third"}],"source_content_type":"text/x-rst","patch_set":26,"id":"c597d16a_91bf5f04","line":780,"updated":"2024-07-16 08:24:46.000000000","message":"nit: implement","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b6dc3d3baded44c67459b1851ccbccfb38ee4346","unresolved":true,"context_lines":[{"line_number":777,"context_line":"      Some may consider OpenStack shared libraries (oslo, etc)."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"But the OpenStack world is not so waterproof, and it is common to see teams who"},{"line_number":780,"context_line":"implements services to also implements API related to these services, so even"},{"line_number":781,"context_line":"services may be seen as a framework developers audience."},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"This hierarchy is so strongly coupled to Asyncio concept, but other third"}],"source_content_type":"text/x-rst","patch_set":26,"id":"fc2e5900_8b2499cb","line":780,"updated":"2024-07-16 08:24:46.000000000","message":"nit: implement","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":839,"context_line":"|                     |                                | dnspython                      |"},{"line_number":840,"context_line":"+---------------------+--------------------------------+--------------------------------+"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"The previous table voluntarily ignore some Eventlet concepts like"},{"line_number":843,"context_line":"``eventlet.patcher``, ``eventlet.hubs``, who have no meaning outside of the"},{"line_number":844,"context_line":"Eventlet context. The previous table also voluntarily ignore green"},{"line_number":845,"context_line":"representations of third party modules like ``eventlet.zmq``."}],"source_content_type":"text/x-rst","patch_set":26,"id":"02004c26_7bec5b36","line":842,"range":{"start_line":842,"start_character":31,"end_line":842,"end_character":37},"updated":"2024-07-09 05:42:24.000000000","message":"nit: ignores","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":841,"context_line":""},{"line_number":842,"context_line":"The previous table voluntarily ignore some Eventlet concepts like"},{"line_number":843,"context_line":"``eventlet.patcher``, ``eventlet.hubs``, who have no meaning outside of the"},{"line_number":844,"context_line":"Eventlet context. The previous table also voluntarily ignore green"},{"line_number":845,"context_line":"representations of third party modules like ``eventlet.zmq``."},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"We should notice that finally many subsets of Eventlet features may match"}],"source_content_type":"text/x-rst","patch_set":26,"id":"cea0c0f4_7710bd32","line":844,"range":{"start_line":844,"start_character":54,"end_line":844,"end_character":60},"updated":"2024-07-09 05:42:24.000000000","message":"nit: ignores","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":876,"context_line":"relying on Eventlet could remains in a transient state without being fully"},{"line_number":877,"context_line":"migrated. Migrating this way could lead us to a blur state."},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"How to migrate a library"},{"line_number":880,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"Consider the migration of a single one OpenStack library (e.g oslo.messaging,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d68369e1_9c31d5f6","line":879,"range":{"start_line":879,"start_character":0,"end_line":879,"end_character":24},"updated":"2024-07-22 10:25:40.000000000","message":"not that if the public api of the libiarly is modified as part fo the migration then its not a migration its a repimleiamntions.\n\nthat means that libraries shoudl avoid using async io constructs in the public API\nand only use it internally. a secondary asycio native api can be provided in parallel but if the libary is to used by project that dont use asyncio migrating to an asynio only api would be a breaking change","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":892,"context_line":""},{"line_number":893,"context_line":"   Many libraries are requesting Eventlet in their ``test-requirements.txt``"},{"line_number":894,"context_line":"   file. These requirements should be updated first to avoid pip resolver"},{"line_number":895,"context_line":"   issues."},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"#. Developers of the oslo.demo should identify which python packages could be"},{"line_number":898,"context_line":"   good candidates for the implementation of their Asyncio based driver."}],"source_content_type":"text/x-rst","patch_set":26,"id":"21cbcd18_7264d619","line":895,"updated":"2024-07-22 10:25:40.000000000","message":"the reason they are in ``test-requirements.txt`` is that eventlet is optional and\nonly requried if the calling applcaition uses eventlest so we test with and without eventlets in some lib to ensure compaitblity in both modes.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":897,"context_line":"#. Developers of the oslo.demo should identify which python packages could be"},{"line_number":898,"context_line":"   good candidates for the implementation of their Asyncio based driver."},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"   Example, in an oslo.messaging context, the existing rabbitmq driver rely on"},{"line_number":901,"context_line":"   `py-amqp \u003chttps://github.com/celery/py-amqp\u003e`_ library, the new Asyncio"},{"line_number":902,"context_line":"   based driver could rely on `aioamqp \u003chttps://github.com/Polyconseil/aioamqp\u003e`_."},{"line_number":903,"context_line":"   Both drivers will be available for end users."}],"source_content_type":"text/x-rst","patch_set":26,"id":"59c928ac_c5b88781","line":900,"range":{"start_line":900,"start_character":71,"end_line":900,"end_character":75},"updated":"2024-07-09 05:42:24.000000000","message":"nit: relies","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":902,"context_line":"   based driver could rely on `aioamqp \u003chttps://github.com/Polyconseil/aioamqp\u003e`_."},{"line_number":903,"context_line":"   Both drivers will be available for end users."},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"   It exists good candidates for almost all our third parties"},{"line_number":906,"context_line":"   libraries. `Here is curated list \u003chttps://github.com/timofurrer/awesome-asyncio\u003e`_"},{"line_number":907,"context_line":"   that can help us which package we want to use for depending on our needs."},{"line_number":908,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"6488cf48_15965e8d","line":905,"range":{"start_line":905,"start_character":3,"end_line":905,"end_character":12},"updated":"2024-07-09 05:42:24.000000000","message":"nit: there exist","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":911,"context_line":"#. start migrating the code base of oslo.demo. This step would simply"},{"line_number":912,"context_line":"   translate by the implementation of the new driver. At some points some"},{"line_number":913,"context_line":"   depending on the underlying libraries chosen, config options of oslo.demo"},{"line_number":914,"context_line":"   may be modified or added."},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":917,"context_line":"   like the ``heartbeat_in_pthread`` feature in oslo.messaging. Removing"}],"source_content_type":"text/x-rst","patch_set":26,"id":"98bee27a_a99d64e0","line":914,"updated":"2024-07-22 10:25:40.000000000","message":"so here we could have called out that await can be used to maintain the previous library api without polluting it with async def when creating the new dirver.\n\na secondary native async api can be provided in parallel that does not use awaitlet.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"f0febb83ca4f01ad1d50cf0e09c5b2eacfe18a8c","unresolved":true,"context_lines":[{"line_number":914,"context_line":"   may be modified or added."},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":917,"context_line":"   like the ``heartbeat_in_pthread`` feature in oslo.messaging. Removing"},{"line_number":918,"context_line":"   Eventlet would make these feature obsolete. As this kind of feature"},{"line_number":919,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":920,"context_line":"   lib users (services) to update their config files accordingly. However, the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"a2cffa11_cc38e180","line":917,"range":{"start_line":917,"start_character":2,"end_line":917,"end_character":62},"updated":"2024-07-21 12:18:45.000000000","message":"this specific example would quite okeyish to obsolete. enabling that option by default failed dramatically in past and causing quite some issues even for non-wsgi applications as of today. But good to mention that!","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"a2d56e5a9b8c6aae303b99aa263908f72b36a2e2","unresolved":false,"context_lines":[{"line_number":914,"context_line":"   may be modified or added."},{"line_number":915,"context_line":""},{"line_number":916,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":917,"context_line":"   like the ``heartbeat_in_pthread`` feature in oslo.messaging. Removing"},{"line_number":918,"context_line":"   Eventlet would make these feature obsolete. As this kind of feature"},{"line_number":919,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":920,"context_line":"   lib users (services) to update their config files accordingly. However, the"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d34ccc7d_f9f1caa2","line":917,"range":{"start_line":917,"start_character":2,"end_line":917,"end_character":62},"in_reply_to":"a2cffa11_cc38e180","updated":"2024-07-22 09:05:10.000000000","message":"Done","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":916,"context_line":"#. Libraries may have specific features who are strongly related to Eventlet,"},{"line_number":917,"context_line":"   like the ``heartbeat_in_pthread`` feature in oslo.messaging. Removing"},{"line_number":918,"context_line":"   Eventlet would make these feature obsolete. As this kind of feature"},{"line_number":919,"context_line":"   expose configuration endpoints we would have to deprecate them to allow"},{"line_number":920,"context_line":"   lib users (services) to update their config files accordingly. However, the"},{"line_number":921,"context_line":"   deprecation process would take several months or even series before hoping"},{"line_number":922,"context_line":"   to see these features removed. Hence blocking the migration."}],"source_content_type":"text/x-rst","patch_set":26,"id":"033eaa5d_526cb6c0","line":919,"range":{"start_line":919,"start_character":3,"end_line":919,"end_character":9},"updated":"2024-07-09 05:42:24.000000000","message":"nit: exposes","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":931,"context_line":""},{"line_number":932,"context_line":"   Example with the ``heartbeat_in_pthread`` feature, by removing Eventlet"},{"line_number":933,"context_line":"   wouldn\u0027t have to run heartbeats in a separated threads. This feature,"},{"line_number":934,"context_line":"   the RabbitMQ heartbeat, would be run in a coroutine. The config option"},{"line_number":935,"context_line":"   will remain available but it will only show a deprecation warning like the"},{"line_number":936,"context_line":"   following one."},{"line_number":937,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"74776484_4fcbe36d","line":934,"updated":"2024-07-22 10:25:40.000000000","message":"actully it cant.\n\nthe reason it run in a PTHREAD is to escape the lifecycle management of the wsgi server.\n\nit was introduced because if the heartbeat is run as a co-routine it will be stopped when the api request completes by the wsgi server.\n\nthe only thing that changes when eventlet is not used is that when oslo uses the stdlib thread module to spawn a thread it won\u0027t have to un-monkey-patch the module to spawn a real thread.\n\nthis feature is not used in a standalone process that are not run under wsgi as it not necessary to escape the wsgi servers lifecycle management.\n\n\nthis again shows an misuderstding of why the feature exists.\n\na better example of an eventlet only feature that does not need to be ported is the eventlet backdoor, the remote shell that can be exported to debug the internals of the eventlet eventloop.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":949,"context_line":"How to migrate a service"},{"line_number":950,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"As for libraries, the migration of services could be incremental."},{"line_number":953,"context_line":"As long as the OpenStack deliverables start releasing migrated sub modules"},{"line_number":954,"context_line":"operators would be able to start using them."},{"line_number":955,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"852f93eb_1427e820","line":952,"range":{"start_line":952,"start_character":3,"end_line":952,"end_character":6},"updated":"2024-07-09 05:42:24.000000000","message":"nit: with","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":1005,"context_line":"   requirements versions could be used to identify which subtopics remains"},{"line_number":1006,"context_line":"   an active topic or not - a transition to be made."},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"   We could maintains a requirements matrix helping to identify which"},{"line_number":1009,"context_line":"   versions of OpenStack libraries are already migrated or not and maybe"},{"line_number":1010,"context_line":"   what is their level of migration completeness."},{"line_number":1011,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"74dc53ad_e5f19fb0","line":1008,"range":{"start_line":1008,"start_character":12,"end_line":1008,"end_character":21},"updated":"2024-07-09 05:42:24.000000000","message":"nit: maintain","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"   The config option will remains available but won\u0027t do nothing if used."},{"line_number":1027,"context_line":"   Please refer to the ``heartbeat_in_pthread`` use case above for more"},{"line_number":1028,"context_line":"   details about how to manage blocking deprecations."},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"#. Migrate unit tests. As said previously we want to"},{"line_number":1031,"context_line":"   avoid regression, so the latter we migrate unit tests the better."}],"source_content_type":"text/x-rst","patch_set":26,"id":"08461142_d74a01bb","line":1028,"updated":"2024-07-22 10:25:40.000000000","message":"any removal of functionality like this required deprecation in the previous slurp release before it could be dropped otherwise we break our deprecation policy.\n\nthat means unless usage of eventelt is optional in a give release we do not have the freedom to ignore it unless we have deprecated it in a prior slurp.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"#. Migrate unit tests. As said previously we want to"},{"line_number":1031,"context_line":"   avoid regression, so the latter we migrate unit tests the better."},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"#. Releasing the refactors. Subtopics must be addressed incrementally. We"},{"line_number":1034,"context_line":"   would suggest to try addressing a subtopic in its entirety to simplify"},{"line_number":1035,"context_line":"   progress tracking, however, if not possible, it would be feasible to"}],"source_content_type":"text/x-rst","patch_set":26,"id":"9fcb58c1_23d03128","line":1032,"updated":"2024-07-22 10:25:40.000000000","message":"to be clear we cannot migrate the unit tests separately form the main code.\n\nwe need ot maintain the same level of coverage for eventlet and non eventlet mode which means we need to update the unit tests and functional tests at the same time as we move code form one mode to the other.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1033,"context_line":"#. Releasing the refactors. Subtopics must be addressed incrementally. We"},{"line_number":1034,"context_line":"   would suggest to try addressing a subtopic in its entirety to simplify"},{"line_number":1035,"context_line":"   progress tracking, however, if not possible, it would be feasible to"},{"line_number":1036,"context_line":"   release partially migrated sub modules."},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"#. If new bugs are opened during the migration, and if these bugs are related"},{"line_number":1039,"context_line":"   to Eventlet and/or to possible race conditions triggered by using Eventlet,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d2049cdc_f96447f4","line":1036,"updated":"2024-07-22 10:25:40.000000000","message":"the only way to allow sub topics (oslo.cache, oslo.messaging, ...) to move indepenetly wouls be if we mandate the use of the asyncio hub for  a service\notherwise each binary delivered by a project needs to only use eventlet or not use it at all.\n\nat least for Nova we were planning to move each binary separately starting with the api and finishing with the nova-compute agent.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1039,"context_line":"   to Eventlet and/or to possible race conditions triggered by using Eventlet,"},{"line_number":1040,"context_line":"   then, we would suggest refactoring the impacted code to drop the related"},{"line_number":1041,"context_line":"   Eventlet usage, and, hence, avoid wasting time by fixing something that"},{"line_number":1042,"context_line":"   will be removed soon."},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"Now that we are able to construct a single house, lets see how to design"},{"line_number":1045,"context_line":"different districts which would represent at the end an entire city."}],"source_content_type":"text/x-rst","patch_set":26,"id":"1a0de75e_111a5dea","line":1042,"updated":"2024-07-22 10:25:40.000000000","message":"this is also not really an option. if the new bug is discovered and it impacts older releases too we still need to fix it on master and backprot the fix.\n\nwe could refactor it later but we still need to support the stable branches for there full lifetieme and we cant backport the refactors.\n\nI don\u0027t want to be insulting but this is naive and I think should be removed.\nwe have 18 months of upstream supprot for each release and many of us have an additional 2-4 years of downstream support that we need to consider.\n\nwe should not be recommending that we don\u0027t fix bugs in a backward-compatible way\nif that bug can impact older branches too.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1056,"context_line":""},{"line_number":1057,"context_line":".. _short-terms-solution:"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"Short terms solutions (done)"},{"line_number":1060,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"*The short term milestone is where we were 6 months ago. Even if this"}],"source_content_type":"text/x-rst","patch_set":26,"id":"bd5f8a7c_d3e2c59b","line":1059,"updated":"2024-07-22 10:25:40.000000000","message":"i really dont think we need to list what is already done by the way.\n\nthis document is already too long as it is.\n\nthis is short but still make reviewing this harder as there is more context that is not relevent to what our next stpes are.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":1066,"context_line":"As Python 3.12 will be a supported runtime in the next coming"},{"line_number":1067,"context_line":"OpenStack series, the support issue should be quickly fixed."},{"line_number":1068,"context_line":""},{"line_number":1069,"context_line":"So, In short terms Eventlet itself should be fixed first."},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"This milestone should be done before the beginning the next series"},{"line_number":1072,"context_line":"(\"2024.2/Dalmatian\")."}],"source_content_type":"text/x-rst","patch_set":26,"id":"54157e65_fa8de56a","line":1069,"range":{"start_line":1069,"start_character":13,"end_line":1069,"end_character":18},"updated":"2024-07-09 05:42:24.000000000","message":"nit: term","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"   This pattern is internal to SQLAlchemy, the objective of this item is to"},{"line_number":1173,"context_line":"   provide a standalone deliverable that host this pattern."},{"line_number":1174,"context_line":""},{"line_number":1175,"context_line":"#. Identify and add replacement third parties libraries into"},{"line_number":1176,"context_line":"   ``openstack/requirements``. It exists good candidates replacement for"},{"line_number":1177,"context_line":"   almost all our third parties libraries. `Here is curated list"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5a7e51ad_2d719922","line":1174,"updated":"2024-07-22 10:25:40.000000000","message":"again the done sections should proably be removed for brevity","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1182,"context_line":"   ``openstack/requirements``, `by following our usual process"},{"line_number":1183,"context_line":"   \u003chttps://docs.openstack.org/project-team-guide/dependency-management.html#for-new-requirements\u003e`_."},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"#. deprecating oslo.service."},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"   Oslo.service was originally designed to provide a framework for"},{"line_number":1188,"context_line":"   defining long-running services, and performing periodic operations. To"}],"source_content_type":"text/x-rst","patch_set":26,"id":"c46c3035_ab360e50","line":1185,"updated":"2024-07-22 10:25:40.000000000","message":"we are not plannig to do this now.\n\nwe are plannign to use it to provide an abstraction over both implemetions\n\nto ease the burden on service proejct so that the migration happens trasparently.\n\nhttps://review.opendev.org/c/openstack/oslo-specs/+/922597","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":1222,"context_line":"   * OpenStackSDK (SDK is blocking and do not support async, it should be also"},{"line_number":1223,"context_line":"   migrated to Asyncio to avoid wrapping rest calls made to other services)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"   The solution described here propose to adapt common libraries with a"},{"line_number":1226,"context_line":"   collection new drivers and backends based on Asyncio in addition of"},{"line_number":1227,"context_line":"   the already existing drivers and backends. Teams maintaining services will"},{"line_number":1228,"context_line":"   be free to decide which can of backend they want to use, and which kind of"}],"source_content_type":"text/x-rst","patch_set":26,"id":"9af6a05b_e8167cb6","line":1225,"range":{"start_line":1225,"start_character":31,"end_line":1225,"end_character":38},"updated":"2024-07-09 05:42:24.000000000","message":"nit: proposes","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[{"line_number":1314,"context_line":"#. Once all the deliverables are migrated, we should be able remove Eventlet"},{"line_number":1315,"context_line":"   requirements from all our deliverables."},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"#. Abandoning oslo.service and retiring it from our global requirements."},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"#. Retiring third parties libraries from our global requirements. If a third"},{"line_number":1320,"context_line":"   party library is not used anymore (even in a non async/Eventlet model),"}],"source_content_type":"text/x-rst","patch_set":26,"id":"7bd572d8_dd9fb7a8","line":1317,"updated":"2024-07-22 10:25:40.000000000","message":"again i think this direction has changed with \nhttps://review.opendev.org/c/openstack/oslo-specs/+/922597\n\nwe would likely endup deprecating and removing the eventlet backend but not removing oslo.service.\n\noslo.service still has value after the eventlet removal in allowing compatibility for diffent releases of cotyledon and providing a central place to fix bug in cotyledon if we do not have prompt release of cotyledon in the future and need to temporally work around issues.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"41fb2ee8c56681c4920ffa9e1a31f2f07acef9f7","unresolved":true,"context_lines":[{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"This goal is a plan proposal to implement our community vision."},{"line_number":1359,"context_line":""},{"line_number":1360,"context_line":"| A plan designed for our own perennity."},{"line_number":1361,"context_line":"| A plan in accordance with previous decisions of our community."},{"line_number":1362,"context_line":"| A plan based on the right technologies and on their capabilities."},{"line_number":1363,"context_line":"| A plan taking account of resources scarcity."},{"line_number":1364,"context_line":""},{"line_number":1365,"context_line":"| Removing Eventlet is not an option, that\u0027s an obligation."},{"line_number":1366,"context_line":"| Without action we will soon face a brutal discontinuation."},{"line_number":1367,"context_line":"| Adopting a goal is a logical continuation."},{"line_number":1368,"context_line":"| A goal which consider team predisposition."},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"| A solution proposing a smooth migration."},{"line_number":1371,"context_line":"| A solution offering visible gains to our customers."},{"line_number":1372,"context_line":"| A solution That bring an engineering apprehensible by our expert developers."},{"line_number":1373,"context_line":"| A cost saving solution that would optimize resource consumption."},{"line_number":1374,"context_line":""},{"line_number":1375,"context_line":"| The TC is elected to provides technical leadership."},{"line_number":1376,"context_line":"| The TC is responsible in providing an ultimate appeals board for technical decisions."},{"line_number":1377,"context_line":"| If TC members simply reject this proposal without proposing anything else,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"d04f3f85_9959123f","line":1374,"range":{"start_line":1360,"start_character":0,"end_line":1374,"end_character":0},"updated":"2024-07-09 05:42:24.000000000","message":"on a lighter note; i\u0027d love to read more of your work :)","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":1474,"context_line":"Epolls Multiple Readers"},{"line_number":1475,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"OpenStack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1478,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1479,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1480,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"8148822f_2405899d","line":1477,"range":{"start_line":1477,"start_character":24,"end_line":1477,"end_character":27},"updated":"2024-07-17 12:27:55.000000000","message":"nitty nit: I\u0027m not native speaker and I can be wrong here but shouldn\u0027t be \"which\"?","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"cd83ff68c5178e7750995840ae7b98b3e3ed16eb","unresolved":true,"context_lines":[{"line_number":1474,"context_line":"Epolls Multiple Readers"},{"line_number":1475,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"OpenStack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1478,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1479,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1480,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ccd0b697_66d3ee75","line":1477,"range":{"start_line":1477,"start_character":24,"end_line":1477,"end_character":27},"in_reply_to":"04f5d69e_3c052288","updated":"2024-07-18 08:20:14.000000000","message":"As I said to the other reviewers before you, I\u0027ll submit a follow up patch to fix all the typos/sentences when this patch will be merged.","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ad68d81121df476d6e52c549069179e6b8b20d62","unresolved":true,"context_lines":[{"line_number":1474,"context_line":"Epolls Multiple Readers"},{"line_number":1475,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"OpenStack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1478,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1479,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1480,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"}],"source_content_type":"text/x-rst","patch_set":26,"id":"04f5d69e_3c052288","line":1477,"range":{"start_line":1477,"start_character":24,"end_line":1477,"end_character":27},"in_reply_to":"8148822f_2405899d","updated":"2024-07-17 13:32:24.000000000","message":"yes, I think you are right","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e1a3b5f1703291d70afbc356005707aa8a6e4654","unresolved":true,"context_lines":[{"line_number":1477,"context_line":"OpenStack rely on hacks who allow to disable the Eventlet protection"},{"line_number":1478,"context_line":"against race condition. Indeed, by default Eventlet\u0027s hub prevent multiple"},{"line_number":1479,"context_line":"readers (greenlets) reading from a socket. However, Eventlet also come"},{"line_number":1480,"context_line":"with a **debug** convenience who allow to disable this protection. Hence,"},{"line_number":1481,"context_line":"using this convenience mean allowing readers to read from the same socket and"},{"line_number":1482,"context_line":"hence introducing several risks of race conditions and of unexpected"},{"line_number":1483,"context_line":"behaviors."}],"source_content_type":"text/x-rst","patch_set":26,"id":"1ca024ec_36cd2607","line":1480,"range":{"start_line":1480,"start_character":29,"end_line":1480,"end_character":32},"updated":"2024-07-17 12:27:55.000000000","message":"same nitty nit here","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3fbc45ebbb7398953927e9e1eff63b4d8b29ba4d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":26,"id":"80c59688_85d06f65","line":1552,"updated":"2024-07-22 10:25:40.000000000","message":"ok, i still agree with the overall intent of this docuemnt but\ni which it had been edited to be more consise with much less prose and exposition.\n\nit has taken almost 2 hours to complete this review  and i think 30-50% of the text could have been removed while still be effective in comunicating the intent.\n\nwith that said while i find the presentation off putting i think we could proceed with this as is.\n\nmy nits and other comments could be adressed in a followup","commit_id":"6b70fcf8a8e635e14f5d656fe8a26f3d247f6ebf"}]}
