Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

kombu 4.4.0 arguably includes a breaking change and can break user's software. #1016

Closed
dbaxa opened this issue Mar 4, 2019 · 15 comments
Closed

Comments

@dbaxa
Copy link

dbaxa commented Mar 4, 2019

User's of kombu who were using it with celery 4.2.x previously had to pin the version of python redis to a version < 3. When kombu version 4.4.0 was released, those who had pinned redis to a version < 3, because of celery/celery#5175 , found their software/deployments broken. I strongly suggest in the interests of not causing unintentional breakage to users of celery & kombu to follow semantic versioning and to avoid making breaking changes like was done (requiring a version of redis >= 3.2.0).

Additionally, the celery 4.2.x branch still pins the version of redis to versions below < 3, see https://github.com/celery/celery/blob/4.2/requirements/extras/redis.txt .

@dbaxa dbaxa changed the title kombu 4.4.0 arguably includes a breaking change and should have been released as version 5.0.0 kombu 4.4.0 arguably includes a breaking change and can break user's software. Mar 4, 2019
@alexandre-paroissien
Copy link

alexandre-paroissien commented Mar 4, 2019

I confirm I encountered the same issue (and then I encountered #1018 and #1019 )

@auvipy
Copy link
Member

auvipy commented Mar 4, 2019

@thedrow

@thedrow
Copy link
Member

thedrow commented Mar 4, 2019

This is completely intentional since py-redis<3.20 contains bugs which crash Celery or makes certain features unusable.
This is exactly why I bumped the minor version.
We don't follow SemVer to the letter since we want Celery 5 to contain certain features and signify a new path for the project.

This breakage is declared in both the Celery 4.3.0 RC2 & Kombu 4.4.0 release notes.
The What's New document will contain a fair warning.
If you want to keep using py-redis 2, please downgrade to Kombu 4.3 and keep using Celery 4.2 or Celery 4.3RC1.
Alternatively, try to backport the relevant py-redis 3 patches and contribute them upstream if possible. You can also maintain your own fork.

I apologize for the inconvenience but we had to do this since any other path would involve heavy monkey patching or breakage for users.

Thank you for noticing and opening an issue about this.
I'm going to close this issue as won't fix.

@dbaxa
Copy link
Author

dbaxa commented Mar 4, 2019

@thedrow It is fine to close this issue as won't fix. However, I hope that in the future the celery and kombu maintainers work to ensure that dependency management changes are done in a more considered fashion. I note that there was no 4.2.x release of celery that contained the change that was related to redis version pinning but having one would have meant that users may have needed to pin the version for redis redis themselves. (Then later arguably when the issue was fixed in kombu, you could have released celery 4.2.3 that removed the redis version pinning).

Based on what you have said about not following sem-ver, it would seem that you want people to pin specific versions of kombu when using celery. That's something that I will be doing in the future as kombu changes have included breaking changes outside of major version releases.

@thedrow
Copy link
Member

thedrow commented Mar 5, 2019

You can open an issue about releasing 4.2.3 or change this one and I will reopen and do so.
That's a very good suggestion.

@ThiefMaster
Copy link

ThiefMaster commented Mar 7, 2019

This kind of behavior is getting annoying, there was a similarly breaking change not too long ago, and every time this happens you are forcing people who pin a specific celery version (but rely on celery specifying proper requirements e.g. for kombu) to make a new release of their package.

And especially with a library as common as redis-py it's very likely that an application requires a specific version of the library as well as a specific celery version.

@thedrow
Copy link
Member

thedrow commented Mar 8, 2019

@ThiefMaster I understand the inconvenience.
What would you rather us do? Break other people's code or cut lose the common language over Celery 5?
We can do the latter. Not the former.

Seriously, we're trying our best here.
Your welcome to join and contribute as a core member.

@nyhobbit
Copy link

This is completely intentional since py-redis<3.20 contains bugs which crash Celery or makes certain features unusable.
This is exactly why I bumped the minor version.
We don't follow SemVer to the letter since we want Celery 5 to contain certain features and signify a new path for the project.

This breakage is declared in both the Celery 4.3.0 RC2 & Kombu 4.4.0 release notes.
The What's New document will contain a fair warning.
If you want to keep using py-redis 2, please downgrade to Kombu 4.3 and keep using Celery 4.2 or Celery 4.3RC1.
Alternatively, try to backport the relevant py-redis 3 patches and contribute them upstream if possible. You can also maintain your own fork.

I apologize for the inconvenience but we had to do this since any other path would involve heavy monkey patching or breakage for users.

Thank you for noticing and opening an issue about this.
I'm going to close this issue as won't fix.

@thedrow
@dbaxa
I want to report that, even after making sure I am all up-to-date with:

  • celery 4.3.0 RC2
  • kombu 4.4.0
    AND, last but not least,
  • redis 3.2.0

I still have the issues reported above by others (although intermittently, NOT systematically), i.e.:

  • Error 110 (connection timed out)
  • Error 32 (broken pipe)

Please advice on the right combination of libraries that guarantees a stable behavior for celery used in conjunction with Redis. This is probably critical for many production applications everywhere.

@alexandre-paroissien
Copy link

This is completely intentional since py-redis<3.20 contains bugs which crash Celery or makes certain features unusable.
This is exactly why I bumped the minor version.
We don't follow SemVer to the letter since we want Celery 5 to contain certain features and signify a new path for the project.
This breakage is declared in both the Celery 4.3.0 RC2 & Kombu 4.4.0 release notes.
The What's New document will contain a fair warning.
If you want to keep using py-redis 2, please downgrade to Kombu 4.3 and keep using Celery 4.2 or Celery 4.3RC1.
Alternatively, try to backport the relevant py-redis 3 patches and contribute them upstream if possible. You can also maintain your own fork.
I apologize for the inconvenience but we had to do this since any other path would involve heavy monkey patching or breakage for users.
Thank you for noticing and opening an issue about this.
I'm going to close this issue as won't fix.

@thedrow
@dbaxa
I want to report that, even after making sure I am all up-to-date with:

* celery 4.3.0 RC2

* kombu 4.4.0
  AND, last but not least,

* redis 3.2.0

I still have the issues reported above by others (although intermittently, NOT systematically), i.e.:

* Error 110 (connection timed out)

* Error 32 (broken pipe)

Please advice on the right combination of libraries that guarantees a stable behavior for celery used in conjunction with Redis. This is probably critical for many production applications everywhere.

I had these issues when updating kombu (not celery). I have celery 4.2.1 with kombu 4.3.0 and redis 2.10.6 working fine

When updating to kombu 4.4.0 and redis 3.2.0 (keeping celery 4.2.1) I encountered these two issues too, intermittently as well:

Error 110 (connection timed out) #1019

Error 32 (broken pipe) #1018

I included stack traces in the tickets

@brianmay
Copy link

brianmay commented Mar 12, 2019

It seems unfortunate that "celery 5" was used way before release. Version numbers should only be allocated when the product is about to be released, and this problem would not have occurred.

Once I encountered this same problem with a piece of my own software, and found that I had to skip the major version that was still under development (and indefinitely stalled due to sudden and unexpected lack of resources). If I ever continued development with this old version we would have to renumber it again before releasing it.

Perhaps in future a code name could be used instead?

It also highlights that semver is different from traditional versioning. Traditionally the major version number is incremented to indicate major changes in design or approach. Where as semver uses it to indicate breaking changes. A major redesign may not necessarily have breaking changes if it continues to be compatible with the previous API.

Semver very much helps with maintaining dependencies when you have a large number of dependencies. As is common with typically Django software. You don't really want to have to look up the release notes of every minor or patch update of every piece of software in case it might break something. That is the purpose of the version number, to give some clues when an update needs special care.

(having said that you still need to beware of updates that could contain malicious code: e.g. dominictarr/event-stream#116)

@nyhobbit
Copy link

I had these issues when updating kombu (not celery). I have celery 4.2.1 with kombu 4.3.0 and redis 2.10.6 working fine

When updating to kombu 4.4.0 and redis 3.2.0 (keeping celery 4.2.1) I encountered these two issues too, intermittently as well:

Thanks @alexandre-paroissien - I am pinning this configuration and hoping for the best.
Question, though, for maybe @thedrow and @dbaxa - is there a configuration of the three library above that would allow me to use with confidence redis >=3.0 (hopefully 3.2.0) since it looks like that library version does fix a bunch of redis issues and bugs wrt 2.10.6 ?

@thedrow
Copy link
Member

thedrow commented Mar 12, 2019

I have no idea what's going on in @alexandre-paroissien's environment.
The stack traces are not enough for me to reproduce these problems.

@thedrow
Copy link
Member

thedrow commented Mar 12, 2019

4.4.0 fixed #1006 for example.
I really don't know what to do here.

@bogdanpetrea
Copy link

bogdanpetrea commented Mar 12, 2019

A solution would be for people to start making their builds reproducible. Pipfile is nice to help with that.

@thedrow
Copy link
Member

thedrow commented Mar 12, 2019

I'm going to lock this issue. If you have a specific problem I need to resolve such as releasing a new 4.2.x release please open a new one and describe exactly what do you need.

@celery celery locked as resolved and limited conversation to collaborators Mar 12, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

8 participants