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

Merge to upstream Snabb #215

Closed
4 tasks
wingo opened this issue Feb 3, 2016 · 9 comments
Closed
4 tasks

Merge to upstream Snabb #215

wingo opened this issue Feb 3, 2016 · 9 comments

Comments

@wingo
Copy link

wingo commented Feb 3, 2016

Following snabbco#722 (comment), it would be great to merge to upstream Snabb. We'd maintain the lwaftr part of Snabb, probably with an Igalia lwaftr-dev branch and a lwaftr-next branch or something. However Snabb is undergoing a developmental transformation to a more distributed development model, and part of this is making a sort of layered division between (in descending order of vettedness) the core of snabb, the core libraries, the core apps, then more peripheral programs and their apps, libraries and so on. This is going to be an interesting social and technical challenge but we'll figure it out as we go along.

One shape that we're going to need is to isolate our changes to be only in src/programs/lwaftr (It sure would be nice to rename that directory to lwaftr, wouldn't it? If we have to call it src/programs/snabb_lwaftr that's fine too of course.) If there are core changes we need, we should separate them out and prepare them for landing prior to the lwaftr itself landing.

As a checklist, here we go:

  • Identify a list of upstream changes that we have but are not essential to merge -- i.e. we can make the change somehow in src/program/lwaftr. Move those core changes into the lwaftr directory in a series of pull requests.
  • Identify a list of upstream changes that we need. Prepare pull requests for all of these changes.
  • Rebase our history in such a way that all of our changes are in src/program/lwaftr.
  • Create a lwaftr integration branch that merges in all pending upstream changes and our lwaftr branch

Once our lwaftr integration branch is merged, we can start to migrate the "non-essential" core changes to Snabb core, but in such a way that involves moves and renames within the repository instead of imports. That might mean podhashmap too; we'll see how snabbco#722 (comment) goes.

This will take some time :) @lukego / @eugeneia thoughts are welcome.

@lukego
Copy link

lukego commented Feb 3, 2016

Thought experiment: If you would simply PR this whole branch to SnabbCo:master then what would be the problem(s) with merging it?

I am browsing the changes with git diff --stat v2016.01..igalia/lwaftr_rabutan and to me the code looks mostly very contained within isolated directories e.g. src/apps/lwaftr and src/program/snabb_lwaftr. There are a small number of changes to common files (e.g. Makefile, core/packet.lua, lib/checksum.lua) that would need to be reviewed to see if they make sense for master but I think we're only talking about a couple of hundred lines of code there?

So hypothetically if you would PR the whole branch then it seems like we would wrangle about:

  • Details of those relatively few changes to core code.
  • File system layout / directory structure.

... anything else?

Famous last words but this doesn't seem so hard to me...

@wingo
Copy link
Author

wingo commented Feb 3, 2016

I guess I was worried about src/apps/lwaftr as well. It's true that there's not a whole lot of core changes to work on but I dunno, getting things into Snabb upstream lately has taken many times the amount of effort that I initially thought it would, for many reasons. I'm happy to PR but to avoid review problems I'm happy to separate out core changes too :)

@eugeneia
Copy link
Collaborator

eugeneia commented Feb 3, 2016

Can we get a comparison of pros and cons for this move? Quoting my own view on this matter:

I have to voice strong discomfort here since I need to review every changed file to weed out forgotten debug statements etc. Going through a PRs “changed files” and categorizing them between “do care about” and “do not care about” based on directory prefix is not something I would like to do. Generally I also like the parallel branches model way better than the parallel module prefixes that I think are being proposed here: would it not be an annoyance for the “lwaftr subtree” to be forcefully updated every month? Either we ignore compatibility and lwaftr has to accept “master's” pace or we ensure no breakage and “lwaftr” glues master to the floor.

Intuitively, I would merge everything from the lwaftr branch that is not in program/lwaftr, e.g. converge to a shared snabb “core”. I am realizing this is the current model of two distinct repositories. This is the perspective the quote is coming from, e.g. it focuses two problems:

  1. Conflicting development pace of lwaftr and upstream
  2. Ambiguity which changes are reviewed by whom

So the new model would be that lwaftr becomes part of upstream snabb. I imagine the upcoming wingo-next branch would then be the place where lwaftr related changes land? I like the idea of having multiple “products” in upstream. Implicitly we did this with Snabb NFV previously, and lwaftr would be in the same place. I think the problems above could be resolved in the new more decentralized upstream as follows:

  1. Conflicting development pace of lwaftr and upstream: this could be solved by “fanning out” in the forks and converging through upstream PRs
  2. Ambiguity which changes are reviewed by whom: maybe a set of new PR title tags ([snabbnfv]/[lwaftr]) to label PRs that affect one of the programs specifically

Generally, I think with the questions of “how” eventually solved this is a very good move. The current state with upstream containing Snabb NFV but not lwaftr is a bit dishonest with regard to the decentralized Git workflow.

@lukego
Copy link

lukego commented Feb 3, 2016

getting things into Snabb upstream lately has taken many times the amount of effort that I initially thought it would, for many reasons

The reality is that we are working things out and you are taking the brunt of that. This is very valuable if we all arrive at a good common understanding that we can take forward before we all burn out on the whole discussion. I am sure we are close to that point now. Let us try to wrap this up, get lwaftr merged onto master, and celebrate that we made the whole damn process work :).

@lukego
Copy link

lukego commented Feb 3, 2016

@eugeneia I think that lwaftr and master can develop at independent paces. For example in the future the Igalians may prefer to merge master and PR back the result once every three months (say). For assigning PRs that are lwaftr changes to the right team we have several mechanisms: "assign" the PR to somebody, ask for the PR to be sent to the SnabbCo:lwaftr mirror branch, or ask for the PR to be sent to the Igalia:lwaftr repository directly (and not seen on the main repo). I'd imagine that we could start simple and adapt according to demand e.g. if the SnabbCo:master repo has too many PRs to keep up with we could suggest sending them directly to program repos in the future. (Like when the Linux Kernel Mailing List spins off a side list.)

@lukego
Copy link

lukego commented Feb 3, 2016

@wingo I'm sure we could strike a bargain on apps/lwaftr :-). I think the main requests would be for the code to be reasonably consistent with the other code in apps and for contributions to be welcome (including for features that maybe aren't interesting to the program/lwaftr application.) If that sounds onerous then the directory could be moved into program/lwaftr/ where you can do more as you please.

Could probably also make program/lwaftr a symlink to snabbswitch/lwaftr is that would sweeten the deal :-)

@lukego
Copy link

lukego commented Feb 7, 2016

Just a note: based on the watchers page I am the only non-Igalia-employee who is following the development on this repository. When engaging with upstream it is probably reasonable to assume that nobody else is aware of any of the development that has been going on here.

This should become more visible in the future when people see this development being mirrored on a SnabbCo/lwaftr branch and being merged onto master.

(Github "watch" seems extremely chatty and I suspect that most people have trouble keeping up with all the messages received from the SnabbCo repo and would not have bandwidth to watch other repos too.)

@wingo
Copy link
Author

wingo commented Mar 8, 2016

Done in snabbco#802! Thanks especially to upstream for helping. Looking forward to figuring out our new workflow :)

@wingo wingo closed this as completed Mar 8, 2016
@eugeneia
Copy link
Collaborator

eugeneia commented Mar 8, 2016

👍

eugeneia added a commit that referenced this issue Jan 13, 2022
e587f8c55 Merge pull request #225 from vavrusa/master
5ea3a881e bpf: add missing constants for linux 4.10 - 4.15
2c691e5a7 Merge pull request #224 from wingo/lseek-syscall-tweak
ae38bdbd7 Make "offset" arg to lseek a signed integer
5cb3b6950 Merge pull request #221 from wingo/util-ls-fix
8e0874609 Promptly close util.ls() dir fd; fix bug with deleted entries
277517436 Merge pull request #220 from sileht/master
8e48fd094 linux/nl.lua: Use ndmsg struct instead of rtmsg for neighbors
3e482bc4e Merge pull request #215 from qsn/gettid
57520cce3 expose gettid
db1a88e94 Merge pull request #214 from jsitnicki/sof-flags-linux
270a6e611 Add missing type for struct scm_timestamping for Linux
e49232047 Add missing SCM_* constants for Linux timestamping API
60fcc6b48 Add constants for SOF_* flags for Linux
26ac34851 Merge pull request #210 from alexandergall/linux-if-ioctls
3e6d3e27c Merge pull request #211 from fperrad/deb
d425a22b2 dummy changelog
b27eca538 update .gitignore
92292aa4b debian files
be257a7e1 debian files generated by lua-create-gitbuildpackage-layout
50a02b94b Add some SIOC{G,S}IF* ioctls for Linux
ee90324 Merge pull request #209 from justincormack/osx_clock
ee17863 Add CLOCK_ constants for OSX
178d244 Merge pull request #208 from justincormack/holes
61450f5 Add SEEK_DATA and SEEK_HOLE constants
9a7b584 Add memfd fnctl sealing support
99beaf5 more test fixes for memfd
cc221e4 fix ctest for new fcntl changes, typowq
56c4c76 fix ctest for new fcntl changes
96073cc fix typo
7a73e8a Add more constants for fcntl, memfd
8d3034c Fix ppc64le syscall numbers for newer calls
62828f6 Merge pull request #206 from johnae/master
c4002b6 The spook project is using ljsyscall.
0b266e8 Merge pull request #205 from lukego/close-fd-safely
ad91aa9 Add more protection against fd double-close
c8baf9e Merge pull request #202 from justincormack/dockerignore
66843c5 Use dockerignore to simplify Dockerfile
7b7211d Merge pull request #200 from justincormack/redo-dockerfile
a779caa Docker Cloud does not start processes at priority 0, remove from test
b85382d Rework Dockerfile and tests
24f7789 Merge pull request #199 from vavrusa/master
2ecf486 linux/constants: added new BPF map and prog types
00c1949 use Alpine 3.4 for docker build
0bcafc6 Merge pull request #196 from kbara/removecunused
a4217a8 Merge pull request #195 from kbara/fixgetcpu
ee67430 Remove unused variables from c.lua
4b2e0b2 Fix getcpu: the cpu argument was incorrectly given the node variable previously
214550a update changelog and rockspec for 0.12 release
21f3fd8 Merge pull request #192 from vavrusa/master
0da437f linux/bpf_prog_load: support custom kernel builds
9981190 fix missing vhangup
f245114 Merge pull request #191 from vavrusa/linux-perf-open
93558c1 linux: added support for tracing/performance counters
0511fb8 Merge pull request #190 from vavrusa/master
1f141ca linux: added new constants (e.g. attach BPF to socket)
36274f3 linux/bpf: added strflag support
4fd3bd6 Merge pull request #189 from vavrusa/master
aaa89cb linux: added support for eBPF
e095295 linux: added new syscall numbers (up to __nr_bpf)
1e079c4 test calls container so just needs file to run
d92625e define a docker compose test
5f14711 Merge pull request #188 from aperezdc/fix-if-nameindex
8915a83 Close socket immediately after error in if_nametoindex()
96c0286 use addons for travis, as learned at fosdem
71241e0 update changelog for unreleased changes
559b499 ignore audit arch constant
5d867d3 new architectures do not have open, will use openat
49d9ff9 test issues with new constants
7cd460e aarch64 audit constants for seccomp
6249e99 more docker examples
dd00af9 rockspec fix
d20033b rockspec for new release
fb17244 update copyright years
9d87597 more Changelog tweaks before release
53856b0 typo
1881526 sometimes winsz is 0, eg if terminal not set up
ab0c08d add error message
a1c207e update Changelog for forthcoming 0.11 release
ce12fb2 addDocker hub to README
602a2b3 fix osx fstatat to use 32 bit stat type, as cannot find how to call to get 64 bit one
8a0a6ad Now have arm machines with working seccomp
d14bd38 Appears that setting maac address on lo often works
6e878a1 remove debug print from test
30e9b5b allow skip on EPERM for adjtimex
bff3e90 Add strace in Docker image for convenient debugging
e67fa31 Use alpine 3.3 for Docker
5148bc3 fix ipv6 tests
185c1a6 more failures with no ipv6
98cc9a2 more fixes for ipv4 only environments for netlink tests
248a935 fix bind errors in environments that do not support ipv6
0eacd64 clean up travis file
5fb71b6 switch to newer Ubuntu in travis
8235724 fix more constant checks not in headers
8dff4ef constants missing on travis
db51b08 update Changelog
7540b04 add new rtnetlink values, so tests work under docker
22604b8 remove test that fails in some environments
d431693 fix waitid test under docker
1595b7d fix swap test under docker
321fdd2 Now an alpine package available
984b533 Add Dockerfile, fix some of the tests that made unreasonable assumptions
9aeff88 recent osx has *at functions
18cd829 better handling for xattr errors
b6bb892 freebsd 11 now has utimensat
7065b0d on freebsd/zfs chflags will fail, skip

git-subtree-dir: lib/ljsyscall
git-subtree-split: e587f8c55aad3955dddab3a4fa6c1968037b5c6e
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

No branches or pull requests

3 participants