)]}'
{"buildfile":[{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"853681bbef292ce413f638f5f844036ee4df96e3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  manifest[\u0027Copyright\u0027] \u003d COPYRIGHT"},{"line_number":61,"context_line":"  compile.with \"log4j:log4j:jar:1.2.15\", \"jmock:jmock:jar:1.2.0\","},{"line_number":62,"context_line":"               \"junit:junit:jar:4.4\","},{"line_number":63,"context_line":"               \"org.springframework:spring-beans:jar:3.0.3.RELEASE\","},{"line_number":64,"context_line":"               \"org.codehaus.jettison:jettison:jar:1.1\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  # Gen build"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAABRn%2F%2F%2Fyo%3D","line":63,"updated":"2011-05-31 17:39:11.000000000","message":"Why not use Spring 3.0.5, it\u0027s the latest 3.0.x release?","commit_id":"62ccaff8517078f968bf6c96e29ba0b1f86032b5"}],"src/main/java/net/spy/memcached/vbucket/config/ConfigFactory.java":[{"author":{"_account_id":1000002,"name":"Trond Norbye","display_name":"Trond","email":"trond.norbye@couchbase.com","username":"trond","avatars":[{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c068b4d0287190d161fb59be23774006af21e55a","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"public interface ConfigFactory {"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Config createConfigFromFile(String filename);"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Config createConfigFromString(String data);"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2F0E%3D","line":7,"updated":"2011-05-31 14:42:18.000000000","message":"People normally use File for a file in Java...\n\nWouldn\u0027t it be sufficient with:\n\nConfig create(File);\n\nConfig create(String);\n\nConfig create(JSONObject);","commit_id":"62ccaff8517078f968bf6c96e29ba0b1f86032b5"}],"src/main/java/net/spy/memcached/vbucket/config/DefaultConfig.java":[{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"853681bbef292ce413f638f5f844036ee4df96e3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"public class DefaultConfig implements Config {"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    private HashAlgorithm hashAlgorithm \u003d HashAlgorithm.NATIVE_HASH;"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    private int vbucketsCount;"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2Fyk%3D","line":9,"updated":"2011-05-31 17:39:11.000000000","message":"Make all of these final.","commit_id":"62ccaff8517078f968bf6c96e29ba0b1f86032b5"},{"author":{"_account_id":1000136,"name":"Mike Wiederhold","email":"mike@couchbase.com","username":"mikewied","avatars":[{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"767a58ffac1f1ce25542e77025c76c935605546c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    private final List\u003cString\u003e servers;"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    private final List\u003cVBucket\u003e vbuckets;"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    public DefaultConfig(HashAlgorithm hashAlgorithm, int serversCount, int replicasCount,"},{"line_number":24,"context_line":"\t\tint vbucketsCount, List\u003cString\u003e servers, List\u003cVBucket\u003e vbuckets) {"},{"line_number":25,"context_line":"        this.hashAlgorithm \u003d hashAlgorithm;"}],"source_content_type":"text/x-java","patch_set":4,"id":"AAABRn%2F%2F%2FtA%3D","line":22,"updated":"2011-06-01 06:01:47.000000000","message":"Lots of tabs here that need to be removed.","commit_id":"120ca8000491c0616b4b178b83ffd2723ebf79bc"},{"author":{"_account_id":1000002,"name":"Trond Norbye","display_name":"Trond","email":"trond.norbye@couchbase.com","username":"trond","avatars":[{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"9a3457ae7ed383cbc100ba49e01f2061f09d6f55","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"public class DefaultConfig implements Config {"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    private HashAlgorithm hashAlgorithm \u003d HashAlgorithm.NATIVE_HASH;"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    private final int vbucketsCount;"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-java","patch_set":6,"id":"AAABRn%2F%2F%2Fsg%3D","line":9,"updated":"2011-06-01 06:06:28.000000000","message":"Make this final, and remove initialization from here (it is set in the constructor with the rest of them..)","commit_id":"eef00ec0bf495f52b011d8786ef81a0a8983f7ca"},{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"0270481193a5337f2f3c703f6ec9a7142d724282","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @Override"},{"line_number":51,"context_line":"    public String getServer(int serverIndex) {"},{"line_number":52,"context_line":"        if (serverIndex \u003e servers.size() - 1) {"},{"line_number":53,"context_line":"            throw new IllegalArgumentException("},{"line_number":54,"context_line":"                    \"Server index is out of bounds, index \u003d \" + serverIndex"},{"line_number":55,"context_line":"                            + \", servers count \u003d \" + servers.size());"}],"source_content_type":"text/x-java","patch_set":9,"id":"AAABRn%2F%2F%2Fns%3D","line":52,"updated":"2011-06-02 19:09:44.000000000","message":"If you\u0027re going to check for serverIndex \u003e servers.size() -1, how about checking for \u003c 0.","commit_id":"cecc528fe2351cc716faeffafa5ec83c9878f411"},{"author":{"_account_id":1000000,"name":"Dustin Sallings","email":"dustin@spy.net","username":"dustin","avatars":[{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d431b0ba5603d3d212e10c98755f9641cf724b94","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @Override"},{"line_number":51,"context_line":"    public String getServer(int serverIndex) {"},{"line_number":52,"context_line":"        if (serverIndex \u003e servers.size() - 1) {"},{"line_number":53,"context_line":"            throw new IllegalArgumentException("},{"line_number":54,"context_line":"                    \"Server index is out of bounds, index \u003d \" + serverIndex"},{"line_number":55,"context_line":"                            + \", servers count \u003d \" + servers.size());"}],"source_content_type":"text/x-java","patch_set":9,"id":"AAABRn%2F%2F%2Fj0%3D","line":52,"in_reply_to":"AAABRn%2F%2F%2Fns%3D","updated":"2011-06-03 07:44:44.000000000","message":"I\u0027ll just delete all of that.  It\u0027s a lot of work to add stuff that List will already do.","commit_id":"cecc528fe2351cc716faeffafa5ec83c9878f411"}],"src/main/java/net/spy/memcached/vbucket/config/DefaultConfigFactory.java":[{"author":{"_account_id":1000002,"name":"Trond Norbye","display_name":"Trond","email":"trond.norbye@couchbase.com","username":"trond","avatars":[{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/1521a1fa74885ab7b9748113afe689cc.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c068b4d0287190d161fb59be23774006af21e55a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            ha \u003d HashAlgorithm.FNV1A_64_HASH;"},{"line_number":65,"context_line":"        } else if (\"md5\".equalsIgnoreCase(algorithm)) {"},{"line_number":66,"context_line":"            ha \u003d HashAlgorithm.KETAMA_HASH;"},{"line_number":67,"context_line":"        }"},{"line_number":68,"context_line":"        return ha;"},{"line_number":69,"context_line":"    }"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2F0A%3D","line":67,"updated":"2011-05-31 14:42:18.000000000","message":"Shouldn\u0027t we throw an exception if we don\u0027t support the hash algorithm instead of falling back to native hash?","commit_id":"62ccaff8517078f968bf6c96e29ba0b1f86032b5"},{"author":{"_account_id":1000136,"name":"Mike Wiederhold","email":"mike@couchbase.com","username":"mikewied","avatars":[{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/337c57dab3946ecdea245eaabfe99a17.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"767a58ffac1f1ce25542e77025c76c935605546c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import org.codehaus.jettison.json.JSONException;"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import net.spy.memcached.HashAlgorithm;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"public class DefaultConfigFactory implements ConfigFactory {"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\t@Override"}],"source_content_type":"text/x-java","patch_set":4,"id":"AAABRn%2F%2F%2Fs4%3D","line":16,"updated":"2011-06-01 06:01:47.000000000","message":"Again with the tabs.","commit_id":"120ca8000491c0616b4b178b83ffd2723ebf79bc"},{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"0270481193a5337f2f3c703f6ec9a7142d724282","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    @Override"},{"line_number":20,"context_line":"    public Config create(File filename) {"},{"line_number":21,"context_line":"        if (filename \u003d\u003d null || \"\".equals(filename.getName())) {"},{"line_number":22,"context_line":"            throw new ConfigParsingException(\"Filename is empty.\");"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"        StringBuilder sb \u003d new StringBuilder();"},{"line_number":25,"context_line":"        try {"}],"source_content_type":"text/x-java","patch_set":9,"id":"AAABRn%2F%2F%2Fno%3D","line":22,"updated":"2011-06-02 19:09:44.000000000","message":"Wouldn\u0027t this be better as an IllegalArgumentException?","commit_id":"cecc528fe2351cc716faeffafa5ec83c9878f411"}],"src/main/java/net/spy/memcached/vbucket/config/VBucket.java":[{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"0270481193a5337f2f3c703f6ec9a7142d724282","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    public final static int MAX_BUCKETS \u003d 65536;"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    private final int[] servers \u003d new int[MAX_REPLICAS + 1];"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    public int[] getServers() {"},{"line_number":12,"context_line":"        return servers;"}],"source_content_type":"text/x-java","patch_set":9,"id":"AAABRn%2F%2F%2Fnk%3D","line":9,"updated":"2011-06-02 19:09:44.000000000","message":"The servers is final, but in its usage, are its array elements ever changed, say by multiple threads?","commit_id":"cecc528fe2351cc716faeffafa5ec83c9878f411"},{"author":{"_account_id":1000000,"name":"Dustin Sallings","email":"dustin@spy.net","username":"dustin","avatars":[{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/995543cb35c3b92a2eb43275116815a7.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d431b0ba5603d3d212e10c98755f9641cf724b94","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    public final static int MAX_BUCKETS \u003d 65536;"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    private final int[] servers \u003d new int[MAX_REPLICAS + 1];"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    public int[] getServers() {"},{"line_number":12,"context_line":"        return servers;"}],"source_content_type":"text/x-java","patch_set":9,"id":"AAABRn%2F%2F%2Fjw%3D","line":9,"in_reply_to":"AAABRn%2F%2F%2Fnk%3D","updated":"2011-06-03 07:44:44.000000000","message":"Great find.  This revealed another error where unsynchronized mutations were occurring.  Fixed it up.","commit_id":"cecc528fe2351cc716faeffafa5ec83c9878f411"},{"author":{"_account_id":1000018,"name":"Blair Zajac","username":"blair","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"inactive":true},"change_message_id":"cd11eb299470129fae0c31e6563de2473d689c51","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    public VBucket(int m, int[] r) {"},{"line_number":15,"context_line":"        master \u003d m;"},{"line_number":16,"context_line":"        replicas \u003d r;"},{"line_number":17,"context_line":"    }"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    public int getMaster() {"}],"source_content_type":"text/x-java","patch_set":10,"id":"AAABRn%2F%2F%2Fik%3D","line":16,"updated":"2011-06-03 16:52:46.000000000","message":"Make a defensive copy of replicas here so the that replica cannot be mutated by the caller of VBucket\u0027s constructor?","commit_id":"0209814b2d14a17974b7fe7c8727e46c12126eef"}]}
