fix(searchContext): fix search flag immutability (#10117)

This commit is contained in:
david-leifker 2024-03-23 12:13:26 -05:00 committed by GitHub
parent f9e64d03cc
commit 088e7a87d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 4 deletions

View File

@ -70,6 +70,7 @@ runs:
- "metadata-jobs/**"
- "metadata-service/**"
- "metadata-utils/**"
- "metadata-operation-context/**"
- "datahub-graphql-core/**"
- "smoke-test/**"
- "docker/**"

View File

@ -21,10 +21,14 @@ public class SearchContext implements ContextInterface {
public static SearchContext withFlagDefaults(
@Nonnull SearchContext searchContext,
@Nonnull Function<SearchFlags, SearchFlags> flagDefaults) {
return searchContext.toBuilder()
// update search flags
.searchFlags(flagDefaults.apply(searchContext.getSearchFlags()))
.build();
try {
return searchContext.toBuilder()
// update search flags
.searchFlags(flagDefaults.apply(searchContext.getSearchFlags().copy()))
.build();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
@Nonnull private final IndexConvention indexConvention;

View File

@ -76,4 +76,17 @@ public class SearchContextTest {
.getCacheKeyComponent(),
"Expected differences in search flags to result in different caches");
}
@Test
public void testImmutableSearchFlags() {
SearchContext initial =
SearchContext.builder().indexConvention(IndexConventionImpl.NO_PREFIX).build();
assertEquals(initial.getSearchFlags(), new SearchFlags().setSkipCache(false));
SearchContext mutated = initial.withFlagDefaults(flags -> flags.setSkipCache(true));
assertEquals(mutated.getSearchFlags(), new SearchFlags().setSkipCache(true));
// ensure original is not changed
assertEquals(initial.getSearchFlags(), new SearchFlags().setSkipCache(false));
}
}