Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View cmeiklejohn's full-sized avatar
💭
Always working.

Christopher S. Meiklejohn cmeiklejohn

💭
Always working.
View GitHub Profile
1) Hello Chris! It's great to have another Basho Erlanger here! Can you
introduce yourself please?
It's great to be here! My name is Christopher Meiklejohn, and I'm
currently a software engineer at Basho Technologies, Inc., where I work
on our distributed datastore, Riak. In addition to that, I'm also a
graduate student at Brown University, in Providence, RI, where I study
distributed computing.
2) Before joining Basho you were working in a different company (i.e.,
-module(riak_repl_aae_source_intercepts).
-compile(export_all).
-include("intercept.hrl").
-define(M, riak_repl_aae_source_orig).
%% @doc Introduce 10ms of latency in receiving message off of the
%% socket.
delayed_get_reply(State) ->
io:format("delayed~n"),
@cmeiklejohn
cmeiklejohn / abstract.md
Last active August 29, 2015 14:06
SyncFree: Large-Scale Computation Without Synchronization

At RICON 2012, Sean Cribbs and Russell Brown from Basho presented a demo of convergent counters in Riak 1.4. These counters, in the event of a network partition, would correctly converge to the right value after concurrent updates when the partition healed. These data types were one of many types of CRDTs, or Conflict-Free Replicated Data Types, outlined in the seminal work by Shapiro et al. "A Comprehensive Study of Convergent and Commutative Replicated Data Types."

It is now two years later, and Riak 2.0 provides a series of "data types," which come out of a body of research from both Basho, and the partners of a European Union funded research project known as SyncFree.

In this talk we will discuss the goals of the SyncFree project. We will start with use cases highlighting success and limitations of CRDTs, and discuss how each of the individual project deliverables set out to address the issues raised by the use cases. We will give an overview of the status of the project today, pointers where our r

%% Riak EE.
{riak_ee, [
%% [See rtdev.rt_project above]
{rt_project, "riak_ee"},
%% Specific to replication tests, the size of the "A" cluster, or
%% "source".
%% {cluster_a_size, 3},
%% The total number of nodes to deploy in replication tests.
09:46:46.341 [info] Application riak_dt started on node 'lasp@127.0.0.1'
09:46:46.378 [info] writing state {[{[{actor,<<187,151,56,151,212,64,76,163,253,78,223,60,33,181,189,80,134,113,195,164>>}],1}],{dict,1,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},{{[],[['lasp@127.0.0.1',{[{actor,<<187,151,56,151,212,64,76,163,253,78,223,60,33,181,189,80,134,113,195,164>>}],1}]],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},{dict,0,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}} to disk <<75,2,131,80,0,0,0,244,120,1,203,96,206,97,96,96,96,204,96,130,82,41,12,172,137,201,37,249,69,185,64,81,145,221,211,45,166,95,113,240,89,252,215,239,190,141,226,214,189,1,109,133,135,151,100,37,50,102,101,112,166,48,176,164,100,38,151,36,50,38,10,0,33,71,98,64,162,65,134,64,22,26,200,96,4,138,129,205,5,17,76,41,12,124,57,137,197,5,14,134,70,230,122,6,64,104,72,154,165,232,134,195,221,192,64,208,13,104,90,1,110,5,78,94>>
09:46:46.397 [error] CRASH REP

A Brief History of Chain Replication

Chain replication promises a high throughput, linearizable, robust replication technique with minimal overhead to tolerate f failures with only f+1 nodes. But, what's the reason for so many systems choosing alternative techniques such as quorum-based or state machine replication?

In this talk, we talk through a history of chain replication, starting with the original work from 2004 by van Renesse and Schneider. We will look at the various systems built using chain replication: Hibari, FAWN-KV, and CRAQ. We'll explore safer designs of chain replication, such as the elastic replication work in 2013, and finally look a new and unique designs of chain replication, such as Basho's Machi system.

@cmeiklejohn
cmeiklejohn / .vimrc
Created June 1, 2010 21:00
My .vimrc
" Christopher Meiklejohn (cmeiklejohn@devio.us)
" .vimrc -- parts stolen from all over the place.
set nocompatible " We don't want vi compatibility.
set viminfo^=!
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
@cmeiklejohn
cmeiklejohn / perm.rb
Created July 21, 2010 16:00
Threading problems... help?
#!/usr/bin/ruby
require 'openssl'
require 'base64'
require 'rubygems'
require 'aws'
# Open master s3 connection
master_s3 = Aws::S3.new(
'key',
@cmeiklejohn
cmeiklejohn / .tmux.conf
Created July 23, 2010 18:56
My .tmux.conf file
# Setup status bar
set -g status-bg black
set -g status-fg white
set -g message-bg black
set -g message-fg green
set -g status-left '#[fg=green]#H #S'
# Highlight active window
set-window-option -g window-status-current-attr bright
set-window-option -g window-status-current-fg white
def to_key
new_record? ? nil : [self.send(self.class.primary_key)]
end