Comments (13)
Tests for Bug2 : zopefoundation/ZODB#368.
from zeo.
Fix for Bug2 in ZEO4: https://lab.nexedi.com/kirr/ZEO/commit/b71e76ae.
from zeo.
from zeo.
@d-maurer, thanks for feedback. Invalidation sending happens in coroutine context in the IO thread - yes, but if the storage is multithreaded - the acceptor code in another thread can mutate the data structure, that IO thread is using, simultaeneously. And that leads to some clients being skipped on sending the invalidation message.
Here I'm talking about ZEO_MTACCEPTOR=1
mode. Yes, this mode recently became deprecated, but there was no conscious understanding that multithreading mode removal is needed for correctness. If this is indeed the case, I believe we should explicitly document single-threaded assumption in the places where it is important.
from zeo.
from zeo.
I agree with Dieter. I don't see any value in a wild goose chase uncovering issues with a non-standard implementation that hasn't seen much use and zero active support for many years.
from zeo.
from zeo.
@d-maurer, @dataflake, thanks for feedback, kind words, and I apologize for the delay with replying on my side.
@dataflake, please do not get me wrong. In the first place I'm not trying to raise up incorrectness issues in ancient configurations, that noone is actually using. What we had in #207 (comment) was sign of data corruption due to a concurrency bug, and it was unclear where the bug sits and whether it affects only old code we stopped (or are stopping) to care about, or modern configuration as well. A data corruption is potentially significant problem in my view. It's like when an aircraft or spaceship crashes, or shows significant issues, all other aircrafts of the same model are landed and stop to fly until the issue is understood. Isn't it?
Said that, with current understanding, I suggest the following steps:
-
remove support for ZEO4 from ZEO5 client without waiting for ZEO6. The data corruption described by Bug1 is significant in my view and deserves the fix without waiting, nor without forcing users to upgrade to new major version. If we keep support for ZEO4 server, the fix is non-trivial. But in situation, when, I believe, nobody is using ZEO5.client - ZEO4.server configuration today, the fix could be to reject connection to ZEO4 server at all. If upon such rejection we log appropriate message, explaining that ZEO4 server support is dropped because of the data corruption reasons, I believe it should be clear for people, even if someone is using such configuration, to stop using it. And we can also add to the logged message, that if, for some reason, someone actually depends on such configuration today, that the person should speak up and describe those reasons on a ZEO issue. After all in 2015/2016 it was practical to add ZEO4 compatibility to newly-introduced and unstable ZEO5 client. But in 2022 the situation is different - ZEO5 is believed to be relatively stable, and ZEO4 stopped to receive updates several years ago. That's why I believe that dropping ZEO4 server support from ZEO5 should be ok.
-
Regarding MTACCEPTOR in ZEO5 server, we already scheduled removal of this mode in ZEO 5.3.0 with the following entry in the changelog:
Remove tests for the asyncio/mtacceptor module, it appears unused and presents a maintenance burden. The module will be removed in ZEO version 6.
(https://pypi.org/project/ZEO/)
and now, given that this mode also exposes data corruption issues I would
also remove it with corresponding changelog entry without waiting for ZEO6 to
be released.
What do you think?
If we agree on 1 and/or 2, I think I could implement those steps.
Kirill
from zeo.
The general policy throughout Zope Foundation projects for feature removals is this: Feature removal is normally preceded by clear deprecation warnings in the current release branch and the final removal requires a new major release. That way nasty surprises for users are kept to a minimum.
I can agree with removing MTACCEPTOR earlier - I think it's truly unused. Scheduling it for ZEO 6 was just an expression of our feature removal policy.
As you know my main concern (or main use case) for ZODB and ZEO is Zope deployments. So I checked the ZEO version required by Zope 4 and Zope 5 and noticed that ZEO 5 has been required from the earliest releases of Zope 4. That means there's a super low probability of Zope 4/5 deployments running on ZEO 4. I also noticed that ZEO 4 has last been released as version 4.3.1 6 years ago, it's basically dead. So I can agree with removal of ZEO 4 support as well.
In summary, both 1 and 2 are fine by me. I see very little risk breaking anyone's Zope deployment. And if you believe the data corruption risk is significant that's a good reason.
from zeo.
@dataflake, thanks for feedback, and it is good to see we generally agree here. I've created #211 to proceed with 2. Could you please have a look?
from zeo.
I've created #212 to start work on 1.
from zeo.
Pull request to remove support for interoperability with ZEO4 server: #213.
from zeo.
from zeo.
Related Issues (20)
- Another data corruption due to concurrency bug (ZEO5 regression; no external invalidations) HOT 7
- ZEO5 incredibly slow on Python 3[.6] compared to Python 2.7 HOT 6
- test run shows many ResourceWarnings HOT 2
- `trollius` bug causes problems for ZEO testsuite in Python 2 environments HOT 4
- Add a test against ZODB master branch to GH actions
- flaky test: `drop_cache_rather_than_verify` HOT 2
- tests hard depend on deprecated mock HOT 10
- test_ssl_hostname_check and test_ssl_basic fail
- Remove possibly unused MTAcceptor feature HOT 5
- ClientStorage: race condition when used with multiple addresses HOT 4
- Potential race condition indicated by `checkConcurrentUpdates2Storages` HOT 3
- (Commit-)`LockManager` is not fair
- Should we stop testing ZEO against all ZODB storage types? HOT 2
- zeopack exit value should not be 0 when socket is not found
- asyncio tests are responding with `None` to register call HOT 1
- Race test `check_race_external_invalidate_vs_disconnect` fails on macOS HOT 4
- Client does not retry failed connections HOT 18
- Request release for 5.x branch on PyPI HOT 3
- Python 3.12 test failures HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zeo.