-
Notifications
You must be signed in to change notification settings - Fork 285
Rest: Implement register table #1521
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
base: main
Are you sure you want to change the base?
Conversation
0bfda56
to
5c342f3
Compare
StatusCode::SERVICE_UNAVAILABLE => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"The service is not ready to handle the request.", | ||
)); | ||
} | ||
StatusCode::INTERNAL_SERVER_ERROR => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"An unknown server-side problem occurred; the commit state is unknown.", | ||
)); |
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 sure if these are needed
StatusCode::UNAUTHORIZED => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"Authenticated user does not have the necessary permissions.", | ||
)); | ||
} | ||
StatusCode::FORBIDDEN => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"Authenticated user does not have the necessary permissions.", | ||
)); | ||
} |
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.
Also not sure if we need to check for these cases
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.
Following iceberg-java's error handling logic, I think it's necessary to handle all of these error codes
5c342f3
to
574069f
Compare
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.
Hi @gabeiglio , thanks for your contribution! I've left some suggestions
} | ||
StatusCode::CONFLICT => { | ||
return Err(Error::new( | ||
ErrorKind::TableAlreadyExists, |
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.
This should use ErrorKind::CatalogCommitConflicts
and should be explicitly set to retryable using with_retryable(true)
@@ -745,10 +749,86 @@ impl Catalog for RestCatalog { | |||
_table_ident: &TableIdent, |
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.
the _
prefix is for unused variables, we should remove it since now it's implemented
@@ -745,10 +749,86 @@ impl Catalog for RestCatalog { | |||
_table_ident: &TableIdent, | |||
_metadata_location: String, |
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.
Same here with the _
prefix
StatusCode::UNAUTHORIZED => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"Authenticated user does not have the necessary permissions.", | ||
)); | ||
} | ||
StatusCode::FORBIDDEN => { | ||
return Err(Error::new( | ||
ErrorKind::Unexpected, | ||
"Authenticated user does not have the necessary permissions.", | ||
)); | ||
} |
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.
Following iceberg-java's error handling logic, I think it's necessary to handle all of these error codes
let metadata_location = response.metadata_location.as_ref().ok_or(Error::new( | ||
ErrorKind::DataInvalid, | ||
"Metadata location missing in `register_table` response!", | ||
))?; |
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.
nit: this can be slightly simplified using some syntax sugar
let Some(metadata_location) = response.metadata_location else { return Err(Error::new(...)) }
let file_io = self.load_file_io(metadata_location, None).await?;
Which issue does this PR close?
What changes are included in this PR?
Are these changes tested?
Im new to Rust so any feedback is welcomed! :)