Skip to content

ExecutionContext dirty flag is reset by a new put #4685

Closed
@mjwiq

Description

@mjwiq

Bug description
ExecutionContext.isDirty is supposed to tell if the context has been changed with a "put" operation since the dirty flag was last cleared (or the context was created). Only the clearDirtyFlag method is supposed to clear the flag once it has been set.

Instead, a "put" that sets a value to the same as its original value will also set the dirty flag to false, even if another put has happened before that did make a meaningfull change

Environment
Any code since commit 963142c will have this issue. The environment is not relevant

Steps to reproduce

  • Do a meaningful put (change a value to something different)
  • Do another put that does not actually change a value (for example, repeating the previous put)

Expected behavior
The dirty flag will still be true

Minimal Complete Reproducible example

@Test
void dirtyContextIsDirty() {
    ExecutionContext context = new ExecutionContext();
    context.put("hello", "world");
    assert context.isDirty(); // succeeds
    context.put("hello", "world");
    assert context.isDirty(); // fails
}

Further context
I did not have a problem with this yet. I just stumbled across it when looking at ExecutionContext
The issue was mentioned, but not addressed in #2020 (comment)

Proposed fix

this.dirty = this.dirty || result == null || !result.equals(value);

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions