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.
Today’s progress
Myron hacked through a lot of smaller issues:
- 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 inriak-client
orripple
. It works much better thanautotest
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 thebeefcake
library itself. - There were a few incompatibilities with Ruby 1.8.7 that were
resolved, specifically in the way
super
was called, and neithersingleton_method
norSymbol#intern
exist in 1.8. - Spec files now
require 'spec_helper'
instead of using a relative path to thespec_helper
or a call toFile.expand_path
to get an absolute path. We didn’t need to have the relative requires because RSpec puts thespec
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.