-
Notifications
You must be signed in to change notification settings - Fork 700
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
[CHANGED] Hide deleted objects by default #1091
Conversation
@@ -60,25 +60,25 @@ type ObjectStore interface { | |||
// Put will place the contents from the reader into a new object. | |||
Put(obj *ObjectMeta, reader io.Reader, opts ...ObjectOpt) (*ObjectInfo, error) | |||
// Get will pull the named object from the object store. | |||
Get(name string, opts ...ObjectOpt) (ObjectResult, error) | |||
Get(name string, opts ...GetObjectOpt) (ObjectResult, error) |
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.
Although we can break since it was indeed marked experimental, do we have to? Is the idea here to logically separate get options vs put or some others? You could still have the internal objOpts
have sub-structs for individual type of options: put, get, getinfo, etc... but still have options that are ObjectOpt, and "get" would just use the "get" options, etc...
But I agree that it would not prevent an user to pass say a "put" option to a "get" API, so in that sense it is better to have specific options, even if under the cover they could feed into a single internal option struct.
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.
Yes, that is the idea. It is not a great user experience to be able to pass options to methods which make no sense. I think having it as separate type per method or group of similar methods makes things easier to the user (no guessing about which options apply to which methods).
Functional options are tricky either way, as you usually don't have the IDE support to e.g. easily find all options applying to a method, plus there is a possibility of options collisions, so I try to make it less complicated when possible.
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.
If the options signatures are the same, meaning working code will still work and we only disallow what we thought was incorrect behavior I am ok with it.
TL;DR In @derekcollison so for each method for which With |
We could allow IgnoreDeletes() to still compile right? That is easy to do. |
Not really easy to do as I know that it is a breaking change but fixing it in user's code is extremely simple (just remove |
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
Addresses nats-io/nats-architecture-and-design#155
This PR introduces breaking changes to object store method signatures, as object store is still in experimental preview state.