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

2018 Q4 OKR Planning #5474

Closed
wants to merge 10 commits into from
Closed

2018 Q4 OKR Planning #5474

wants to merge 10 commits into from

Conversation

daviddias
Copy link
Member

Ref: ipfs/team-mgmt#698

Urls:

It's time to do the OKR Planning for Q4 \o/. This is the first time that the go-ipfs team is going to do it this way, you can find a lot of information at ipfs/team-mgmt#698. Please make sure to read it to get the full context in how we are going to do this (Retrospective + Open OKR Planning).

OKR.md Show resolved Hide resolved
OKR.md Outdated

**It is a joy to use go-ipfs programatically**
- `PX` @magik6k - The Core API is finalized and released. Make it easier to import go-ipfs as a package
- `PX` - go-ipfs-api exposes the new Core API
Copy link
Contributor

Choose a reason for hiding this comment

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

@diasdavid did you intend to let this also include the remote API protocol in this? Because I'm not sure it's covered in this document?

Copy link
Member

Choose a reason for hiding this comment

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

My plan for this was to start with http api implementation and when the new rpc api becomes a thing support both as some users will likely need http is some setups

Copy link
Contributor

Choose a reason for hiding this comment

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

Do you have a proposal for an updated KR that effectively captures that work? Taking PRs! =]

Copy link
Contributor

Choose a reason for hiding this comment

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

@keks - Do you think the RPC API should be included (even partially) in this document? I don't know anything about that work but is it something that you think should be started in this next quarter?

Copy link
Contributor

Choose a reason for hiding this comment

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

@magik6k is owner for this whole objective

making go-ipfs-api expose is lower priority (blocked by a lot of go-ipfs changes)

Copy link
Contributor

Choose a reason for hiding this comment

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

To clarify, I was basically talking about this issue. We'll need to coordinate with the other implementors to find out what we really need, but the issue is that the current HTTP API has a lot of weird edge cases, which is painful for everyone who implements it.
Again, I'm not talking about the RPC methods we expose for others to call (these should mostly be the core api), but about the wire format used to make these calls. If we get that one right, a lot of stuff is going to be easier.

OKR.md Outdated Show resolved Hide resolved
OKR.md Outdated
- `PX` - It takes less than 48 hours to transfer 1TB dataset over Fast Ethernet (100Mbps)
- `PX` - It takes less than 12 hours to transfer 200GB sharded dataset over Fast Ethernet (100Mbps)
- `PX` - There is a prototype implementation of GraphSync for go-ipfs
- `PX` - There is a better and more performant datastore module (e.g Badger or better)
Copy link
Contributor

Choose a reason for hiding this comment

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

**go-ipfs handles large datasets (1TB++) without a sweat**
- `PX` - It takes less than 48 hours to transfer 1TB dataset over Fast Ethernet (100Mbps)
- `PX` - It takes less than 12 hours to transfer 200GB sharded dataset over Fast Ethernet (100Mbps)
- `PX` - There is a prototype implementation of GraphSync for go-ipfs
Copy link
Contributor

Choose a reason for hiding this comment

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

somewhat dependent on js-ipfs graphsync

Copy link
Contributor

Choose a reason for hiding this comment

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

@hannahhoward already thinking about speeding up directories and may have knowledge of how to implement (but needs a partner for spec work)

OKR.md Outdated
- `P1` - Rewrite pinning data structures to support large data sets / many files performantly

**The bandwidth usage is reduced significantly and is well kept under control**
- `PX` - Users can opt out of providing every IPLD node (and only provide root hashes)
Copy link
Contributor

Choose a reason for hiding this comment

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

Includes modifications to the DHT. Need an owner to coordinate with @Stebalien on design. @magik6k started on this, but need to flesh out the design and spec.

Need to rephrase this to be aiming for a spec and early implementation (.5 is a spec but no implementation started)

OKR.md Outdated

**The bandwidth usage is reduced significantly and is well kept under control**
- `PX` - Users can opt out of providing every IPLD node (and only provide root hashes)
- `PX` - "Bitswap improvements around reducing chattiness, decreasing bandwidth usage (fewer dupe blocks), and increasing throughput"
Copy link
Contributor

Choose a reason for hiding this comment

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

measure: looking at the number of duplicate blocks and the number of parties we send a want list to when we don't need to
goal: don't want to upload as much as we download to find the content. Don't want to download as many duplicate blocks.

can make larger improvements by changing protocol, but current proposal is internal to feature to improve where we look for data
"reduce number of duplicate blocks by 75%"

- `PX` - "Bitswap improvements around reducing chattiness, decreasing bandwidth usage (fewer dupe blocks), and increasing throughput"

**It is a joy to use go-ipfs programatically**
- `PX` @magik6k - The Core API is finalized and released. Make it easier to import go-ipfs as a package
Copy link
Contributor

Choose a reason for hiding this comment

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

what is a good priority for this?

- `P0` @hannahhoward - List a sharded directory with 1M entries over LAN in under 1 minute, with less than a second to the first entry.
- `PX` - There is a prototype implementation of GraphSync for go-ipfs
- `P0` @magik6k - There is a better and more performant datastore module (e.g Badger or better)
- `P1` - Rewrite pinning data structure to support large pinsets and flexible pin modes
Copy link
Contributor

Choose a reason for hiding this comment

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

@kevina interested in contributing to this - not sure about owning per say yet =]

Copy link
Contributor

Choose a reason for hiding this comment

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

I spent a very small amount of time working on something related to pinning and so I'd be interested in contributing to this objective. I think with enough support maybe I can own it, but I'd need to discuss that with someone who knows more about the system and the OKR to determine whether or not that is reasonable. And I don't want to step on your toes @kevina, if you are motivated to own this work.

Copy link
Contributor

@kevina kevina Oct 2, 2018

Choose a reason for hiding this comment

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

Link to the previous discussion: #5474 (comment)

To clarify my interest.

I think this task will be made a lot easier with some architectural changes to the blockstore. I wrote up my first draft of such changes in #5528. I also think that we should use a snapshot based approach to G.C. and completely avoid the need for read and write locks (but with perhaps mutexes that will be held for short durations). In order for that to happen we will need some additional changes. Once I write up this proposal I would like it to be given some serious thought as I think it can solve a lot of problems we are having.

If we agree to these changes I will gladly take lead to help push it though, although completing it in Q4 may be to aggressive a strategy.

I get the general sense that others would generally like to avoid any architectural changes and instead attempt to solve this with an independent data structures. I personally see this as creating additional complexity so I not sure I can agree with this approach. Thus, if we go down that path I probably not a good person to lead this.

Copy link
Member

Choose a reason for hiding this comment

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

So, there are two issues here:

  1. The KR is really about the pin datastructures itself. That is, we need to be able to (a) support flexible pin modes and (b) support many pins.
  2. GC needs to get faster. A generational approach may work, personally, I'd go with a recounting approach. Regardless, I consider that to be an orthogonal issue.

OKR.md Outdated

**The bandwidth usage is reduced significantly and is well kept under control**
- `PX` - Spec and draft implementation of allowing users to opt out of providing every IPLD node (and only provide root hashes)
- `PX` - Bitswap improvements reduce number of duplicate blocks downloaded by 75%
Copy link
Contributor

Choose a reason for hiding this comment

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

I think these are P0?

- `P0` @magik6k - There is a better and more performant datastore module (e.g Badger or better)
- `P1` - Rewrite pinning data structure to support large pinsets and flexible pin modes

**The bandwidth usage is reduced significantly and is well kept under control**
Copy link
Contributor

Choose a reason for hiding this comment

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

I like the idea of contributing to this objective, but I'm probably not the best person to own it.

Copy link
Contributor

Choose a reason for hiding this comment

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

@Stebalien who do you suspect should own these OKRs? In the absence of a more qualified person (and in an effort to move important goals forward), I'm willing to take on some or all ownership. If there's a better owner, then I can work with them towards this objective.

OKR.md Outdated
- `P0` - It takes less than 48 hours to transfer 1TB dataset over Fast Ethernet (100Mbps)
- `P0` @hannahhoward - List a sharded directory with 1M entries over LAN in under 1 minute, with less than a second to the first entry.
- `PX` - There is a prototype implementation of GraphSync for go-ipfs
- `P0` @magik6k - There is a better and more performant datastore module (e.g Badger or better)
Copy link
Contributor

Choose a reason for hiding this comment

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

@magik6k I can help with the Badger transition (or take ownership of this one if you want).

Copy link
Member

Choose a reason for hiding this comment

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

Oh, sure, go ahead

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @schomatis, I'll update.

@schomatis
Copy link
Contributor

Two objectives I could add to Q4 are:

  1. As suggested by @Stebalien, design a new MFS interface (Review the MFS interface go-mfs#3).

  2. Keep making the code in go-unixfs more understandable (comments, refactoring, bug fixes, high level docs), particularly the HAMT package.

@momack2 Could you help me phrase these ones with a KR-oriented approach?

@Kubuxu
Copy link
Member

Kubuxu commented Oct 2, 2018

If you think it could be useful, I could re-establish metric tracking based on github's webhooks. We had it set up in the past but it wasn't maintained. It would allow us to track things like PR review time, issue response and others.
It would also give us metrics for the future.

@schomatis
Copy link
Contributor

@Kubuxu Yes please! I think those metrisc would be very useful in general, I'm not so sure they would help measure this particular KR (which will impact those times but I think the signal will get lost in the general noise).

That said, I can't think of any useful metric for "making the code easier to reason about" except asking new developers like @hannahhoward if they could provide an estimate of how much time it took them to understand a particular code component (e.g., HAMT) for a particular PR they were working on and keep track of that for the future.

@hannahhoward
Copy link
Contributor

I noticed there are no OKR's around Unix-FS V2 -- which seems at minimum related to some of the existing OKR's -- like sharded directory speed -- since a format change might provide order of magnitude improvements.

I'm not sure where UnixFS V2 is in the middle of all this, but it feels relevant to some of these and wouldn't want it to get lost. Also, that seems tied to OKRs around go-unixfs readability per @schomatis -- cause maybe the solution is make UnixFS V2 and do a good job commenting it!

@hannahhoward
Copy link
Contributor

^^^ Sorry. Did not see UnixFS V2 is under outstanding Q3 priorities. Still I think a conversation about prioritization and where this fits with the new Q4 OKRs would be useful.

- `P2` - Every package has tests and tests+code coverage are running on Jenkins
- `P2` - There is an up-to-date Architecture Diagram of the Go implementation of IPFS that links packages to subsystems to workflows

**gx becomes a beloved tool by the Go Core Contributors**
Copy link
Contributor

Choose a reason for hiding this comment

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

Who has made major changes to gx in the past? Is it only @whyrusleeping? Are these actually appropriate for someone else to pick up?

Copy link
Member

Choose a reason for hiding this comment

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

@travisperson will probably take these (and @schomatis has been doing some gx work). We have a long discussion here whyrusleeping/gx#179 culminating with an offline discussion between @whyrusleeping, @travisperson and I (key points here whyrusleeping/gx#179 (comment)).

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks. @travisperson are you comfortable with my adding your name to these OKRs? Are they pretty accurate as stated, and might they belong in another project?

Copy link
Member

Choose a reason for hiding this comment

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

@eingenito ya, these looks good.

## 2018 Q4

**go-ipfs handles large datasets (1TB++) without a sweat**
- `P0` - It takes less than 48 hours to transfer 1TB dataset over Fast Ethernet (100Mbps)
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there any existing description of the path to achieving this OKR? Is it related to or independent of the effort to minimize duplicate blocks? And I'm assuming it's apart from any DHT traffic. So is it smarter sessions, or improved I/O path, or datastore speed? Or is it a protocol change like graph sync?

Copy link
Contributor

Choose a reason for hiding this comment

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

... and, some of these OKRs are challenging to assign (or take ownership of) because they seem like a collection of features and improvements that may well be worked on by multiple people.

- `P0` - It takes less than 48 hours to transfer 1TB dataset over Fast Ethernet (100Mbps)
- `P0` @hannahhoward - List a sharded directory with 1M entries over LAN in under 1 minute, with less than a second to the first entry.
- `PX` - There is a prototype implementation of GraphSync for go-ipfs
- `P0` @schomatis - There is a better and more performant datastore module (e.g Badger or better)
Copy link
Contributor

Choose a reason for hiding this comment

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

@kevina would also like to be somewhat involved with this.

@eingenito
Copy link
Contributor

@eingenito eingenito closed this Nov 26, 2018
@ghost ghost removed the status/in-progress In progress label Nov 26, 2018
@daviddias daviddias deleted the 2018-Q4-OKRs branch November 26, 2018 20:24
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.