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

[RFD] Revert "Match Swarm in how to combine filters" #1085

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

Conversation

thaJeztah
Copy link
Member

@thaJeztah thaJeztah commented May 28, 2018

When filtering objects on labels, and two different filter values
are passed for a single label, Swarm combines those filters as
an AND. Effectively, this means that:

--filter label=something=yes
--filter label=something=no

Means;

Give me all objects that have label "something" set to "yes AND no"

This is never true, because labels are stored as a "map" (so an
object can only have a single label named "something". As
a result this filter will never return a result.

This behavior is also inconsistent with other situations, where
filters are combined using an OR, for example;

--filter label=something=yes
--filter label=somethingelse=foo

Means;

Give me all objects that have label "something" set to "yes",
and/or label "somethingelse" set to "foo"

This commit was added to make Kubernetes mimic the (odd) behavior,
so that the behavior would be consistent for both orchestrators.

Given that the existing (swarm/docker) behavior;

  • Is an oversight (bug?)
  • Is not (clearly) documented
  • Most likely a very narrow corner-case

It may be a better option to fix the situation in the Swarm side
(if desirable, keep the old behavior based on API version), and
revert this commit to not let this behavior find its way into
new features.

This reverts commit 297866e (#1023).

When filtering objects on labels, and two different filter values
are passed for a single label, Swarm combines those filters as
an AND. Effectively, this means that:

    --filter label=something=yes
    --filter label=something=no

Means;

> Give me all objects that have label "something" set to "yes AND no"

This is never true, because labels are stored as a "map" (so an
object can only have a _single_ label named "something". As
a result this filter will _never_ return a result.

This behavior is also inconsistent with other situations, where
filters are combined using an OR, for example;

    --filter label=something=yes
    --filter label=somethingelse=foo

Means;

> Give me all objects that have label "something" set to "yes",
> or label "somethingelse" set to "foo"

This commit was added to make Kubernetes mimic the (odd) behavior,
so that the behavior would be consistent for both orchestrators.

Given that the existing (swarm/docker) behavior;

- Is an oversight (bug?)
- Is not (clearly) documented
- Most likely a very narrow corner-case

It may be a better option to fix the situation in the Swarm side
(if desirable, keep the old behavior based on API version), and
revert this commit to not let this behavior find its way into
new features.

This reverts commit 297866e.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants