Skip to content
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

Export cephfs List and Names functions #326

Closed
wants to merge 3 commits into from

Conversation

isi-lincoln
Copy link
Contributor

Cephfs Directory: export List and Names

Exports dir.list() and entries.names(). Becomes dir.List() and
entries.Names().

The current implementations for cephfs's list and names functions
are non-exported functions although they do not modify any private
fields. The functions would be of much more use to the community
as exported functions.

Signed-off-by: Lincoln Thurlow [email protected]

The current implementations for cephfs's list and names functions
are non-exported functions although they do not modify any private
fields.  The functions would be of much more use to the community
as exported functions.

Signed-off-by: Lincoln Thurlow <[email protected]>
dirEntries need to be a type.  It makes it easy to call Names(),
but this was only used in testing.  As a helper function, it would
be better to export the already exportable DirEntry as a list.

Signed-off-by: Lincoln Thurlow <[email protected]>
@agarwal-mudit
Copy link
Collaborator

@isi-lincoln I remember having a conversation about exporting the list function so I went through my mails and found this.

cc @phlogistonjohn

@phlogistonjohn
Copy link
Collaborator

I had originally planned on having these be exported functions but I was talked out of it (as least for the short term). So, I am certainly OK with exporting them in a general sense. Having someone who isn't me want to use them demonstrates there's some demand for it.

Issue #239 is certainly valid, but it's a lot more work. It would involve wrapping the native types in a new go-compatible interface. I guess what the (meta-) question comes down to, is are these simple direct calls useful enough on their own, or should we require all convenience functions to match those in the go os package. Because I already once thought to export them I'm OK with taking this simple approach first (with feedback), but I'll admit that I am not 100% objective in this case. :-)

I'd like to hear what others think too. In the meantime I'll offer some concrete feedback on the PR as-is.

Copy link
Collaborator

@phlogistonjohn phlogistonjohn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first two patches should probably be squashed together.

@@ -222,7 +217,7 @@ func (dir *Directory) List() (dirEntries, error) {
}

// Names returns a slice of only the name fields from dir entries.
func (entries dirEntries) Names() []string {
func Names(entries []*DirEntry) []string {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we're going to generalize the function we should probably make it generalize for both the readdir (DirEntry) and readdir_plus (DirEntryPlus) cases. We can probably do something like:

type NamedEntry interface {
    Name() string
}

func Names(entries []NamedEntry) []string {
   // ... impl ...
}

@isi-lincoln
Copy link
Contributor Author

Sorry for the very late response, I've found that these emails were getting sent to spam. So I'll defer to the either of your opinions. I understand the good and bad of doing this, but as the functionality was there, and it was what I was looking for, rather than re-implement it myself, I thought it would be best to export them.

Per the discussion on #234, I can understand the use case for that as well. For myself, I am using List as a light weight validator of mounts. However, I could also see myself using a more heavy weight *os.File if that were implemented as well.

Let me know and I can move the PR towards that goal, or Close.

Thanks for the feedback apologies again for neglecting this.

@phlogistonjohn
Copy link
Collaborator

No worries, and that's not a particularly late response as far as I'm concerned.

@nixpanic I am of the opinion to go forward with this PR (plus some cleanups I previously suggested) but would like to have your opinion on it too, as you seem more inclined to the os-module style approach last we spoke.

@nixpanic
Copy link
Member

Ok, if others really like to have this, I won't object to it.

Just make sure to implement a (non-)interface similar to what Golang offers in the os package. Or do not use the same names for functions/types so that it is clear this is a different API. We also might want to implement a Golang matching API in the future, so there should be no conflicts.

@isi-lincoln
Copy link
Contributor Author

Acknowledged. I'll ping again when I have an updated MR that meets these qualifications. Thank you for everyones feedback.

@phlogistonjohn
Copy link
Collaborator

Sounds good to me. I think the current names are safe, based on the current naming in the os package, but double checking or even (lightly) future proofing would be even better.

@phlogistonjohn
Copy link
Collaborator

https://go.googlesource.com/proposal/+/master/design/draft-iofs.md

This just popped up on my radar today. It seems relevant to the discussion wrt being compatible with Go standard library modules & interfaces. I think it worth a read for anyone working on this project to take a look at and see what may be coming or even provide feedback to the Go project. @nixpanic @isi-lincoln

@phlogistonjohn
Copy link
Collaborator

I'm going to close this PR. On issue #327 I discussed the status of issue & pr with the submitter @isi-lincoln and this is not being actively worked on. I also mentioned that Go should be gaining new interfaces around file systems and it may be best to wait for that and make use of and test against that when it arrives.

We can always reopen this and resume the work if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants