Ripple Hackathon - Day 2
by Sean Cribbs
It’s the end of day 2 of the Ripple Hackathon. Today was shaped a lot differently than day 1 — we did a lot more heads-down hacking and a lot less discussion and planning. Luckily, this means there were a lot of bugs fixed and features added.
Myron hacked through a lot of smaller issues:
- Undefined (“phantom” or “ghost”) attributes are now better
accessible and saved along with the
Ripple::Documentinstance. This might occur if you’ve removed attributes from the document class that still exist inside the Riak object and you want to still get to them.
- You can now use the
guardtool to automatically run the specs in
ripple. It works much better than
autotestso we’re pretty happy with it.
- There was an error stemming from
beefcakethat exists on the latest release version but not an earlier version. It was locked to the proper version until we can resolve the issue in the
- There were a few incompatibilities with Ruby 1.8.7 that were
resolved, specifically in the way
superwas called, and neither
Symbol#internexist in 1.8.
- Spec files now
require 'spec_helper'instead of using a relative path to the
spec_helperor a call to
File.expand_pathto get an absolute path. We didn’t need to have the relative requires because RSpec puts the
specdirectory on the load path automatically.
- There’s now a rake task that will clean trailing whitespace from all Ruby source files.
- There was an incompatibility with the way
Setinstances were encoded to JSON when called from inside ActiveSupport.
Nathaniel continued working on associations where the target is found using Riak Search. In the course of his investigation, we discovered bug #867, namely that sorting is applied at the wrong time. This put a halt on moving forward with the pattern.
Duff made headway on the “many” association of a similar type to the “one” using a stored key that was completed yesterday.
Kyle added some awesome conflict
resolution logic to Risky and started on a refactoring of the
Riak::Client class to support multiple hosts.
I completed some logic for encapsulating the retrying of failed
requests automatically and helped Myron with some of the JSON
issues. I also discussed with Kyle the plan for splitting the host
configuration from the
Client object, and how we might implement
various strategies for deciding how to multiplex and failover
The larger picture
The items we worked on today contribute toward two of the major goals for Ripple 1.0, stability and usability. Naturally, fixing existing bugs is important work, but we also want to improve the internal semantics of the client so it is more resilient to temporary failures and doesn’t hammer a single node with all of its requests. We want to make the Document modeling have stronger and more diverse patterns so that you can express relationships that have higher cardinalities and less surprising results in production. I believe we made headway on those goals today, and tomorrow has lots of promise as well.