-
Notifications
You must be signed in to change notification settings - Fork 445
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 OKRs Planning #247
Conversation
With the fairly short Q3 we had with all the great events in July, we have some OKRs that need to get carried over into Q4. Here's an outline of my thoughts for focus in Q4. Q4 ObjectivesDebug-ability and StabilityThe State Machine updates for libp2p-switch and libp2p will be wrapping up soon. These updates will introduce some error standardization to libp2p, but the work needs to continue. Standard Errors (from Q3)Standardize connection errors and add them to the ipfs initiative, #1406 Implement in interface-connection modulesBy leveraging standard errors for all modules implementing the connection interface, the libp2p-switch connection state machines will be better able to respond to the errors appropriately. Network VisualizationBeing able to visualize the network can also be a useful tool for finding issues with the network. As libp2p's Connectivity Magic gets better and better, it would also be really helpful for people to be able to see differences in the network with things like Delegated Routing, the DHT and Circuit Relay enabled/disabled. That could provide a much clearer understanding of the intent and use of these components. Interop Testing (Global libp2p OKR)Libp2p DaemonIn order for interoperability between the libp2p implementations to be easily updated by each team, we need to ensure that libp2p daemons exist for each of them. Initial work has started on the go daemon, and we need to get this going for js very soon. Connectivity MagicComplete DHT and IPNS work from Q3
Formalize NAT SpecAside from running out of time for NAT Traversal work, the other blocker for getting this completed is formalizing the NAT Spec, libp2p/specs#64, so that we can continue with the implementation of the NAT Manager. Completing the Spec will also help provide more guidance for any community members that might want to work on completing the implementation. JS-IPFS Support for Delegated RoutingRefs support for the js-apiRight now, delegated routing is reliant on go-ipfs as js-ipfs doesn't currently support refs. It would be nice to see the refs implementation added to js-ipfs so we could get the API updated for Delegated Routing Support. This would enable users to better support their own ipfs infrastructures and rely less on the dht for browser/mobile nodes, and provide us with more opportunities to take load off the gateway nodes and distribute that throughout the network Note: I have made some updates to the js-ipfs-api to support delegated routing. If refs support was added to js-ipfs, it would be a fairly low effort to finish the api support. |
As we had several events and holidays during the last quarter, several OKRs from the previous quarter were not finished and I think they should be a priority for the next quarter. IPNS in JS LandThe main implementation of IPNS is already released and the Awesome DHT EndeavourSince the DHT is a really important part of libp2p, I consider that we should get it ready to be enabled by default in Note: There is currently any example for using the DHT in References: Analyse and Improve DHT PerformanceAs stated before, DHT is a core concept of Daemon and InteroperabilityI think that this should be one of the main focus of the next quarter. Go team already started their implementation and once they have their own daemon and we have ours, we should start the interop tests, which I consider crucial right now. As References: Error handlingProviding a stable, reliable and performant libp2p is crucial for the developers' productivity, as well as to the community engagement. This way, I believe that this effort now will be important in the long run, since it will decrease considerably the time needed for diagnosing current and future problems. Since the last quarter that we are having an effort to have error handling into a better consideration, but there is much to be done and we should refactor the errors sooner, at least for the most error prone modules. Network visualization toolThis tool did not have any relevant progress last quarter, but it is an important aspect of debuggability for a complex network. We should have it as a OKR as well. |
These seem like great goals to me. Let's make sure the js-libp2p goals ultimately land in the libp2p OKR sheet. As Juan was saying to me recently, the interface between projects should be the OKRs themselves. So, something like One question: both the Go and JS teams are building independent libp2p daemons. Is this intentional? I can definitely understand it from a testing standpoint, but in terms of exposing APIs, language bindings, etc., to downstream users, it seems like it would be easier to maintain one daemon as the canonical one. Thoughts? / cc @diasdavid @jacobheun @raulk @bigs |
@mgoelzer in terms of exposing APIs to downstream users you are completely right! After some thoughts, taking into consideration that However, if we intend to have a CLI for |
@mgoelzer we'll make sure to move these over to the sheet. We like to discuss them openly in PRs as it's much easier than a spreadsheet for discussion and also improves visibility and opportunity to contribute for community members. In regards to the daemon, our highest priority on the JS side of things is interop testing. As you mentioned, having daemons for each implementation makes things much easier and increases the likelihood that each working group go/js/rust, will contribute to them. The current interop tests for IPFS only really get used by the JS team, because it's all in JS. I agree that we should focus language bindings and exposed APIs to go-libp2p, as the reference implementation, to minimize support needs and focus enhancement efforts. |
My 2 cents having landed in IPFS-land 2 years ago, but I'm going to be quite opiniative and probably controversial here: I think that supporting more than one daemon is somewhat wasteful. Again, I may not be seeing the overall picture here, so I'm surely biased. |
@jacobheun Completely agree about better to discuss in Github issues. My job is just to make sure that these items eventually get logged in a Google sheet, since this is how PL as an organization wants to track goal across all projects that it sponsors. So, I believe we're in agreement here. On the libp2p daemon stuff:
|
With our ultimate goal being to reliably test and verify that different implementations of libp2p are able to intercommunicate, and properly support the same feature sets (private networks, dht, transports, crypto, etc), how do we efficiently and effectively create these test suites? One option, which is being proposed, is to have the daemons for that. This would allow for an agnostic approach to testing.
I am completely open to other options for interop tests between the libp2p implementations, but we need to have it. We want libp2p to be useable and useful to users on its own, and I think interop testing is an important part of that. Are there other recommendations or ideas on how to approach this? |
The metapoint to have in consideration here is that this isn't the first time this team does OKR planning in the open and then moves it to a spreadsheet. No need to restate what is already knowledge and habit of the team as it might be received (as it was) that perhaps there is a new way to do things. @mgoelzer, make sure to read ipfs/team-mgmt#698 as it describes how we've been functioning and its benefits in depth. Let me know if it is helpful.
Yes, we need to have a daemon or at least some RPC API that lets us orchestrate multiple libp2p nodes remotely. Bonus points if the APIs are the same so that we can reuse the same CLI/Client Libraries for both.
Think of it as IPLD and js-ipfs. IPLD has its own API that gets bubbled up to js-ipfs. The libp2p Daemon RPC API can be literally what IPFS exposes to the users as well as the Networking API of IPFS https://github.com/ipfs/interface-ipfs-core/issues/285 Missing Objective: Massive testbed We should not end 2018 without having a testbed for js-libp2p that spins thousands of nodes (a good goal would be to be at least 50000), both browser and Node.js ones, to test Peer and Content Routing, PubSub and overall robustness. |
I've committed a first pass of the OKRs to the markdown file for review. I went ahead and added my thoughts on assignments as well, please feel free to recommend different assignments! |
OKR.md
Outdated
- js-libp2p has a daemon with a RPC API and a client library - @jacobheun | ||
- interop tests for go-libp2p and js-libp2p exist for core functionality - @jacobheun | ||
- a testbed exists and can test 50,000 libp2p nodes (browser and node) - @jacobheun | ||
- the testbed can run large scale tests for the DHT and Pubsub - @vasco-santos |
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.
@vasco-santos I thought this might be a good one for you to take with your work on the dht and pubsub. It will definitely be blocked by the base testbed, which I am assigned to, but I thought it would also be good exposure for us to both get involved more heavily in this. The daemon/rpc work is also a blocked for the testbed.
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.
I strongly agree that those OKR's are extremely important for the next quarter and I would like to be involved with them as well.
OKR.md
Outdated
- Nat traversal Spec is ready for js-libp2p to implement - @jacobheun | ||
|
||
**Libp2p is seen as the go to p2p networking stack** | ||
- Usage examples exist for the key modules of libp2p - @jacobheun |
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.
We've had several recent questions around how to use certain modules (dht, circuit-relay, pnet), so I thought it would be a good idea to get this on the list
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.
Just added another item, @jacobheun added a quite complete list and I agree with all the items he added. Left just a few comments.
Just one note related to the assignments.
I feel that they are almost as I would expect, but as I have been working in interop tests (with IPFS) for IPNS and DHT, I think it could make sense for me to own the interop tests here as well. This way, as the interop tests and the testbed are blocked by the RPC API
, you could focus first on the RPC API, and when it is ready, while you focus on the testbed and I could work on the interop tests.
We can swap one of my OKRs with that one. As I did not start the network visualization tool in the last quarter, you could focus on that while I would be working on the testbed for DHT/Pubsub.
@jacobheun How do you feel about this change?
OKR.md
Outdated
- Nat traversal Spec is ready for js-libp2p to implement - @jacobheun | ||
|
||
**Libp2p is seen as the go to p2p networking stack** | ||
- usage examples exist for the key modules of libp2p - @jacobheun |
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.
I agree! Even when I started creating a new suite of tests for DHT interop, I tried to find examples both on go and js, but there was any. However, I would like something more.
I think we should aim to have examples for the key modules, as well as have a general overview to the README
of several modules, which are really incomplete. Something like Usage examples and proper documentation exist for the key modules of libp2p
. What do you think?
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, I agree. Many of the recent questions that have come up could be answered by better/clearer answers to what the modules does
and how configuration options affect that
@vasco-santos I think that switch makes sense and should help prevent us from getting blocked mid quarter. I'll update it! |
OKR.md
Outdated
- Usage examples and proper documentation exist for the key modules of libp2p - @jacobheun | ||
|
||
Once these OKRs are finished, you will be able to find them on the [2018 Q4 libp2p OKRs Spreadsheet](https://docs.google.com/spreadsheets/d/1BYwmbVicgo6_tOHAbgiUXWge8Ej0qR1M_gAUulazmrg/edit#gid=1241853194) | ||
|
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.
It would be good now to do a Timing Exercise (count the number of days that you effectively have in the quarter) and plan for 60% of it.
At the same time, add priorities for each of these KRs.
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.
There are 66 weekdays in this quarter. From those 66 days, 3 are public holidays in Portugal. Also removing the days from the team week and my scheduled holidays I will have 54 days of full availability and 32.4 days for 60% of my time.
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.
For me: 66 total days, minus scheduled holidays and team week (53 days), for a dev capacity at 60% of 31.8 days.
This gives us just over 6weeks each of dev time.
I added priorities to the items, let me know your thoughts.
As it stands, with our availability and the priority order, I think realistically the network visualization tool
, nat traversal spec
and error handling
won't be completed. I think error handling will improve for code we'll be working in, but additional efforts to improve existing code will take a back seat. I think these are good for stretch goals though.
OKR.md
Outdated
- js-libp2p has a daemon with a RPC API and a client library - @jacobheun | ||
- interop tests for go-libp2p and js-libp2p exist for core functionality - @vasco-santos | ||
- a testbed exists and can test 50,000 libp2p nodes (browser and node) - @jacobheun | ||
- the testbed can run large scale tests for the DHT and Pubsub - @vasco-santos |
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.
L12 and L13 seem very similar to me and they are a HUGE undertaking, perhaps the most important one (right after finalizing IPNS and DHT).
I recommend focusing hard on those 2 Objectives: a) large scale testing and b) finalize Interoperability through feature parity (word them as you see fit)
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.
We separated L12
and L13
into two different OKRs because we thought that it would be good to get both of us involved more heavily in this. And I would have the ones related to my on going work on the dht + pubsub. However, if you prefer to have a single one of us focusing on it, we can rearrange the assignments.
I completelly agree that those should be the most important objectives of this quarter, and we definetelly have to get them by the end of Q4.
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.
I think it would be best to keep L12 and L13 separate. As they are massive efforts we're really going to need to pair on this, especially later in the quarter as dependencies are finished. My thoughts on the separation are that L12 is focused on base functionality and support of growth, whereas L13 is adding on features to the tests. Getting the core functionality done in L12 opens up L13 to start. L12 can then continue, with a focus on scaling to 50,000 nodes.
It would be great if we could take some time at team week to talk through this in more depth with the larger libp2p team and infra, to discuss what needs to happen for all of this to be completed by end of year. I'd love to have some clear milestones for the various teams before team week is over, to better set ourselves up to hit a testbed of that scale.
@mgoelzer , it would be great if you could take on a KR to augment the team, namely: |
@diasdavid Yes, happy to own that one. |
I will add that KR to this list @mgoelzer |
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.
Reviewed the KR priorities @jacobheun
OKR.md
Outdated
- the testbed can run large scale tests for the DHT and Pubsub - @vasco-santos | ||
- [P2] error handling is done correctly and error codes are part of the API - @jacobheun | ||
- [P1] libp2p has a network visualization tool - @jacobheun | ||
- [P1] js-libp2p has a daemon with a RPC API and a client library - @jacobheun |
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.
I would consider this to be a P0, as it has several dependencies. What do you think @jacobheun ?
I agree with the other priorities.
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, I think you're right, as it's a blocker for some of the other P0s. I'll update.
Please try to provide any remaining feedback/questions/comments today. I will be moving this over to the Spreadsheet first thing tomorrow in preparation for our OKR meetings later this week. |
c5385b3
to
a7dc6ec
Compare
All OKRs have been moved to the Q4 planning sheet. OKRs will be locked on October 4th, if you have any feedback before then, please feel free to comment here or on the spreadsheet. |
Let's make sure to give one last pass on the OKRs taking agoric-labs/PlaygroundVat#8 into account. There are multiple things there that are already part of the plan but there are also others that should be quick wins (Ed25519 keys and TCP Hole punching) that we can incorporate. |
I've added a few line items to the sheet for discussion:
The biggest constraint right now is the availability @vasco-santos and I have. The crypto updates should be fairly quick, barring any surprises, so I think we could fit that in. |
Yes! I think the |
One of my KRs is to onboard more JS engineers this quarter. So, help is on the way. If we feel stuff like TCP hole punching is beyond what we can manage this quarter, let's push it to the backlog (by opening issues and leaving them in Waffle's backlog). Worst thing we can do is just ignore or forget about Agoric's feedback, because it's really thoughtful and well-reasoned. |
Just reposting this from line level comments for better visibility around completion assumptions.
|
## [6.1.0](libp2p/js-libp2p-tcp@v6.0.9...v6.1.0) (2023-01-21) ### Features * close server on maxConnections ([libp2p#218](libp2p/js-libp2p-tcp#218)) ([bff54fa](libp2p/js-libp2p-tcp@bff54fa)) ### Bug Fixes * specify host explicitly in node tests ([libp2p#247](libp2p/js-libp2p-tcp#247)) ([d7e5a69](libp2p/js-libp2p-tcp@d7e5a69))
Ref: ipfs/team-mgmt#698
@vasco-santos, @jacobheun et al, you know the drill :)