-
Notifications
You must be signed in to change notification settings - Fork 5
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
As a user, by default, I want to search only for the latest versions of all products on the /products/{identifier}/member-of/member-of
endpoint
#487
Comments
@jordanpadams could you clarify the intended behaviour when each of the following is provided as
Could you please also provide equivalent clarification for #486 #485 #484? |
Maybe to keep things simple (until a user asks otherwise), we can handle the all-versions/only-latest query parameter and apply it to all the level of the hierarchy where it can apply. For example:
In this case, the all/latest should apply to the identifier as it does in the
|
@tloubrieu-jpl @jordanpadams the issue here is that there isn't really a "simplest" from either an implementation standpoint or a user-intuition standpoint - there are drawbacks no matter what and an arbitrary decision is to be avoided. If we can't state authoritatively how an endpoint should behave and why, users don't have any hope of understanding. If we want "latest" (applied either via query parameter or lack thereof by default) to mean both
that's fine, but the two behaviours aren't intuitively linked and may be desired independently, so they shouldn't be the same query parameter. Then there's the question of support for keywords and querystrings - if you say "latest-mode" resolves outputs to the latest version of any matching product, a user can and will attempt to filter on a condition which is true for an earlier version of a product, then be confused when their results don't satisfy the condition(s) they provided. Worse yet, the current implementation of latest (subset results to products which aren't superseded) will actively hide the presence of matches if they aren't the latest version of a product. And you'll need to actually resolve every product to its latest version, which is very expensive (one query per LID in the result set). So now your default either changes in the presence of keyword/querystring queries, or those queries are only compatible if all-version mode is specified. Then, there's the fact that if the latest version of a product is orphaned (present in OpenSearch while its parents are not, which is currently the case for 2.5k products in en-prod), it will break, for example, the ancestry-based endpoints for its entire LID family unless all-versions mode is active, and will do so silently by just yielding zero hits. I can make suggestions and attempt to justify them, but only if we're all on the same page about this being a significant problem to begin with. The specification above doesn't really answer the question unless I'm misunderstanding something simple (it's unclear whether a given comment about LID/LIDVID refers to |
@alexdunnjpl @tloubrieu-jpl I guess to take a step back for a second, and more generally, the purpose of all these new requirements is really just to accomplish one thing: ALL endpoints should return the latest versions of all products, by default. 99.9% of searches in the PDS will only care about the latest versions. As far as the end user is concerned, our database only contains latest versions of products, unless explicitly requested otherwise. In PDS terms, a new version of a product means "this product SUPERSEDES all past versions", in other words "all past versions are trash, use this one if you are performing science today". The only reason we are giving access to past versions of products is for historical provenance purposes. Here are some examples of the 0.1% of use cases where provenance is needed:
These are all product-specific use cases. In general, I would almost prefer we keep this as simple as possible and only support
this is an outlier. we would definitely like to know about orphaned products. something we should provide monitoring for in kibana at some point. that being said, en-prod is a unique case, and we have not sufficiently trained our Operations Team to do this correctly. we can create a ticket to figure out how to track this corner case in the API, but I don't think we should design to this. |
/products/{identifier}/member-of/member-of
endpoint unless explicitly requested/products/{identifier}/member-of/member-of
endpoint
@alexdunnjpl @tloubrieu-jpl I updated the requirement to remove the opportunity for |
also apologies for not filling out this ticket in its entirety yet. I only got through a few of them to include acceptance criteria |
@alexdunnjpl @tloubrieu-jpl created #503 and #504 to clarify or muddy the waters a bit. I will fill them out with more details sometime this weekend. For the MVP we need to get the API online ASAP, the most important tickets we implement are:
If we can support returning on the latest products across the other endpoints, then great. It seems like the implementation would be similar across endpoints ( |
LID
Superseded products are omitted from API responses by default (except There are no subroutes for "all versions" functionality - if that data is ever desired, users must hit products/{identifier}/versions/ to discover extant versions, then loop through those versions, making a request (ex. to ../members) for each version. |
per some offline discussions, I think we have settled on For all versions:
For past versions, legacy can mean a lot of things to a lot of people, maybe |
Updated this comment to reflect latest understanding of requirements. @jordanpadams @tloubrieu-jpl please check and correct any errors |
Checked for duplicates
No - I haven't checked
π§βπ¬ User Persona(s)
No response
πͺ Motivation
...so that I can [why do you want to do this?]
π Additional Details
No response
Acceptance Criteria
Given
When I perform
Then I expect
βοΈ Engineering Details
No response
π I&T
No response
The text was updated successfully, but these errors were encountered: