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

Iter on node and commit graphs #1077

Merged
merged 3 commits into from
Sep 15, 2020
Merged

Iter on node and commit graphs #1077

merged 3 commits into from
Sep 15, 2020

Conversation

icristescu
Copy link
Contributor

The two iter functions are used in the layered store, to iterate over the commi graph and the node graph. Having two separate functions allows us to choose in which order we iterate over the commit graph, whereas for the node graph the order is fixed: we have to iterate in reverse order to keep the compression of inodes.

nodes and bounded by the [min] nodes, as specified by
{{!Irmin__.S.NODE_GRAPH.iter} GRAPH.iter}. *)

val iter_commits :
Copy link
Member

Choose a reason for hiding this comment

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

I have a feeling that this function is also going to iterate over the nodes and the contents referenced by the closure of commits given, it's just not going to do anything when it visits them; is that right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, it just ignores them. So we can add ?node:(node -> unit Lwt.t) and ?contents:(contents * metadata -> unit Lwt.t). I didn't do it because I don't need it in the layered store, but maybe we should add them for future usage?

Copy link
Member

Choose a reason for hiding this comment

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

Not having iterators for node and contents seems fine. I was mostly concerned about performance: iterating over all objects in the closure when you're only making progress for the commits feels like it might be quite inefficient.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point, it actually only iterates over commits, as the predecessors of a commit are its parents. Unlike for nodes where predecessors can be both nodes and contents. So I was wrong above, we cannot iterate over nodes and contents with this function.

Copy link
Member

@craigfe craigfe Sep 9, 2020

Choose a reason for hiding this comment

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

Hmm... indeed. This iter function never seems to behave the way I expect it to 😛

Can you add something like `Node _ | `Contents _ -> assert false in the implementation, just to make that clear?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Nice suggestions, thanks!

@icristescu icristescu force-pushed the iter branch 2 times, most recently from 078b7a1 to 52d4551 Compare September 9, 2020 14:45
@craigfe craigfe merged commit 3786136 into mirage:master Sep 15, 2020
@icristescu icristescu deleted the iter branch September 16, 2020 07:58
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.

3 participants