Ripple Hackathon - Day 2

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.

Today’s progress

Undefined (“phantom” or “ghost”) attributes are now better
accessible and saved along with the Ripple::Document
instance. 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 guard tool to automatically run the specs in
riak-client or ripple. It works much better than autotest so
we’re pretty happy with it.

There was an error stemming from beefcake that 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 beefcake
library itself.

There were a few incompatibilities with Ruby 1.8.7 that were
resolved, specifically in the way super was called, and neither
singleton_method nor Symbol#intern exist in 1.8.

Spec files now require 'spec_helper' instead of using a relative
path to the spec_helper or a call to File.expand_path to get an
absolute path. We didn’t need to have the relative requires because
RSpec puts the spec directory 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 Set instances 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
connections.

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.