-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
fix(opensearch): handle index not present errors in search api #4965
Conversation
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.
Can you also update the readme in crates/analytics/docs
to add conditions for enabling the global search on dashboard as well
I believe we have only mentioned audit_log & system_metrics
crates/analytics/Cargo.toml
Outdated
@@ -53,3 +53,4 @@ strum = { version = "0.26.2", features = ["derive"] } | |||
thiserror = "1.0.58" | |||
time = { version = "0.3.35", features = ["serde", "serde-well-known", "std"] } | |||
tokio = { version = "1.37.0", features = ["macros", "rt-multi-thread"] } | |||
log = "0.4" |
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.
we use tracing crate for logging
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.
Done
crates/analytics/src/search.rs
Outdated
.json::<OpenMsearchOutput<Value>>() | ||
.json::<OpenMsearchOutput>() |
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.
Can we read this as a string first using .text() and then try to parse it?
that way we can print the string as part of the parsing error helping us debug this in production environments
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.
Done
crates/analytics/src/search.rs
Outdated
.hits | ||
.hits | ||
.into_iter() | ||
.map(|hit| hit._source) |
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.
.map(|hit| hit._source) | |
.map(|hit| hit.source) |
The _
prefix is a rust convention for unused variables can we remove it?
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.
Removed it
crates/analytics/src/search.rs
Outdated
.collect(), | ||
}) | ||
} else { | ||
error!("Unexpected status code: {}", success.status); |
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.
use the tracing library
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.
Done
Added |
crates/analytics/src/search.rs
Outdated
Err(parse_error) => { | ||
tracing::error!( | ||
"Failed to parse response: {:?}, raw response: {}", | ||
parse_error, | ||
response_text | ||
); | ||
return Err(error_stack::Report::from(OpenSearchError::ResponseError)); | ||
} |
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.
Err(parse_error) => { | |
tracing::error!( | |
"Failed to parse response: {:?}, raw response: {}", | |
parse_error, | |
response_text | |
); | |
return Err(error_stack::Report::from(OpenSearchError::ResponseError)); | |
} | |
er@Err(parse_error) => { | |
tracing::error!( | |
"Failed to parse response: {:?}, raw response: {}", | |
parse_error, | |
response_text | |
); | |
return er.change_context(OpenSearchError::ResponseError); | |
} |
can we do something like this ?
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.
Can we do it a bit more functional ?
something like
.text()
.change_context(OpensearchError::ResponseBodyError)
.and_then(|body|
serde_json::from_str(&body)
.change_context(OpensearchError::ResponseDeserializationError)
.attach_printable(&body)
)?
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.
Done
impl OpensearchError { | ||
pub fn error_type(&self) -> &str { | ||
&self.error.error_type | ||
} | ||
|
||
pub fn reason(&self) -> &str { | ||
&self.error.reason | ||
} | ||
} |
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.
where is this being used?
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 being used, removed it.
…ress-skip * 'main' of github.com:juspay/hyperswitch: (27 commits) feat(cypress): add 2 more payout connectors and bank transfer support for payout (#4993) chore(version): 2024.06.20.0 Refactor(core): reverts the payment method list filtering using constraint graph (#5044) feat(router): add payment method type duplication check for `google_pay` (#5023) refactor(storage): remove `id` from payment intent, attempt and remove datamodel ext from payment intent (#4923) fix(events): Correct parsing of API events with user event_type for Clickhouse (#5022) fix(connector): add local bank redirect type in compatibility layer, default the country to AT for Local Bank Redirect and add creds_identifier in access token (#5038) refactor(connector): add amount conversion framework for noon (#4843) fix(logging): fix stack overflow on recording restricted keys (#4423) feat(core): Add logger for sessions call failure (#5036) chore(version): 2024.06.19.0 fix(opensearch): handle index not present errors in search api (#4965) feat(multitenancy): add tenant_id as a field for data pipeline and support individual database for clickhouse (#4867) refactor: add basic counter metrics for IMC (#5006) fix(payment_methods): populate card fields while saving card again during metadata change condition (#5019) feat(router): Override the `setup_future_usage` to `on_session` based on the merchant config (#5016) chore(docker-compose): pass correct configuration values for running SDK demo app (#5012) refactor: Move trait ConnectorIntegration to crate hyperswitch_interfaces (#4946) chore(version): 2024.06.17.0 chore(process_tracker): use `const` instead of `String` for `business_status` (#4849) ...
Type of Change
Description
OpensearchOutput
and corresponding structs which are used to handle the error.Additional Changes
Motivation and Context
The msearch API errors out since the index is not present, so handled the error.
How did you test it?
5xx errors
should not be present anymore, with the errors logged, and handling of the index not found errors.Checklist
cargo +nightly fmt --all
cargo clippy