-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
[ML] AIOps: Fix race condition where stale url state would reset search bar. #154885
Conversation
Pinging @elastic/ml-ui (:ml) |
@@ -45,9 +45,6 @@ export const useData = ( | |||
} = useAiopsAppContext(); | |||
|
|||
const [lastRefresh, setLastRefresh] = useState(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I reckon we should get rid of this local state and use useRefresh
and useTimeRangeUpdates
hooks instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since lastRefresh
is also passed on to use_document_count_stats.ts
it will result in quite a rewrite, that's a bit out of scope for this PR, I'd like to focus on just fixing the bug here.
}; | ||
} | ||
// eslint-disable-next-line react-hooks/exhaustive-deps | ||
}, [lastRefresh, searchQuery]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and afterwards fieldStatsRequest
should be triggered based on explicit refresh or time range updates.
const timefilter = useTimefilter({ | ||
timeRangeSelector: selectedDataView?.timeFieldName !== undefined, | ||
autoRefreshSelector: true, | ||
}); | ||
|
||
const fieldStatsRequest: DocumentStatsSearchStrategyParams | undefined = useMemo(() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not related to this line...
In my current WIP PR for embedding log categorisation in Discover I've had to add a hack to stop this file from calling the various set
functions in filterManager
because they update the URL and cause Discover problems.
It makes me wonder if this could be considered an unexpected side effect and whether this file should be updating the URL at all?
I don't have a good solution, apart from perhaps creating a different hook which monitors the aiopsListState
and updates the URL.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a good point, we'll have to consider this also for Explain Log Rate Spike once it gets used in other places. I added a note to the meta issue here: #146065
💚 Build Succeeded
Metrics [docs]Async chunks
Page load bundle
Unknown metric groupsESLint disabled line counts
Total ESLint disabled count
History
To update your PR or re-run it, just comment with: cc @walterra |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Summary
Fixes an issue there the global state
_g
and app state_a
would get out of sync and overwrite each other. For example, a click on Refresh in the date picker (global state) could reset the search bar (app state) to empty.The issue was that in
x-pack/packages/ml/url_state/src/url_state.tsx
thesearchString
could become a stale value insetUrlState
. This PR fixes it by using the approach already used inusePageUrlState
: ThesearchString
is passed on to be stored viauseRef
so that thesetUrlState
setter can always access the most recent value.The exact sequence of actions to trigger the bug is a bit cumbersome to find, it doesn't always happen. Functional tests have been extended to cover the case reliably, actually it was these functional tests which surfaced the bug.
use_data.ts
has been refactored to rely less on callbacks and useuseMemo
instead.Checklist