Update: Progress on bootstrap()

Posted on 12th Apr 2017

Hello all,

The last three weeks have been a bit slower than normal. This is mostly due to spring break, and a family visit. I can, however, bring you some updates.

Most of the work in this time has been done in the branch features/apply_delta. The goal of this branch is to bring a network-finding method without needing to implement locking in our chord module. In this branch, we added a method named apply_delta, which, if the relevant key has no value, or a dictionary, will update based on a given dictionary. It's the equivalent of Python's dict.update, or in this case dict[key].update.

This is implemented to assist an in-progress bootstrap() function. The idea is that you feed it the relevant constructor and arguments, and it attempts to find your network for you. This is accomplished by contacting a "bootstrap" network, which has routing tables stored by protocol ID. This network is going to be kindly seeded by both this server and Northern Michigan University, and we're always willing to accept volunteers.

This branch also (currently on the Python side only) adds a CLI which allows you to easily seed this network.

Unfortunately, it revealed an incompatability in our chord implementations. It seems either Javascript nodes are sending invalid messages, or Python nodes aren't properly recognizing their flags (#150). In either case, it has forced us to consider re-organizing the repository (#149) to more easily allow compatability tests. This will almost certainly not happen until these libraries are feature-complete, but it's clearly a necessary change at this point.

We have also re-configured our codeclimate linters, so some progress should be made on style guides soon. There is a large number of false positives though, because it seems to consider comments when it marks duplicated code. This means that many JavaScript functions which would otherwise not be marked duplicated are marked as such.

Four weeks from now, this code is due as my graduation project. That means that four weeks from now, this feature must be complete. While I would like to tackle #149 and make everything perfect, that is no longer realistic. The plan forward is the following:

  1. Solve #150
  2. Merge #148
  3. Make a CLI on the JavaScript end
  4. Start seeding the "bootstrap" network
  5. Submit code for project grade
  6. THEN solve #149

This plan leaves several other issues open, but this is only a short-term plan. It by necessity only covers about a month. At some point after that, probably after the presentation on it, I will publish a more long term plan. In the meantime, I will try and post every two weeks, as I'd planned before.