)]}'
{"src/main/java/net/spy/memcached/vbucket/config/Bucket.java":[{"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":"44c208d62bd9c71027b2e26f7c75b70cd95da8a8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    private final URI streamingURI;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    // nodes list"},{"line_number":18,"context_line":"    private List\u003cNode\u003e nodes;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    public Bucket(final String name, final Config vbuckets, final URI streamingURI, final List\u003cNode\u003e nodes) {"},{"line_number":21,"context_line":"        this.name \u003d name;"}],"source_content_type":"text/x-java","patch_set":7,"id":"AAABRn%2F%2F%2B%2FQ%3D","line":18,"updated":"2011-06-07 06:56:54.000000000","message":"This not being final and read-only makes me really uncomfortable.  It doesn\u0027t seem necessary.  My eclipse config automatically flags it as final when I save since it\u0027s not mutated.  That it can be edited via the \"getNodes\" seems a little scary.","commit_id":"c2aba3e9eae3284c1894322578dae76db225b4a6"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a22d3396f480639e3ac0a599b0cf45d5d0b770e8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    private final URI streamingURI;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    // nodes list"},{"line_number":18,"context_line":"    private List\u003cNode\u003e nodes;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    public Bucket(final String name, final Config vbuckets, final URI streamingURI, final List\u003cNode\u003e nodes) {"},{"line_number":21,"context_line":"        this.name \u003d name;"}],"source_content_type":"text/x-java","patch_set":7,"id":"AAABRn%2F%2F%2B4k%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2B%2FQ%3D","updated":"2011-06-07 22:10:23.000000000","message":"Turns out it\u0027s not used.  Killed.","commit_id":"c2aba3e9eae3284c1894322578dae76db225b4a6"},{"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":"ce3a1675ddbd7b6c69a70a7292622251cace5ec9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    private final URI streamingURI;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    // nodes list"},{"line_number":18,"context_line":"    private List\u003cNode\u003e nodes;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    public Bucket(final String name, final Config vbuckets, final URI streamingURI, final List\u003cNode\u003e nodes) {"},{"line_number":21,"context_line":"        this.name \u003d name;"}],"source_content_type":"text/x-java","patch_set":8,"id":"AAABRn%2F%2F%2BzU%3D","line":18,"updated":"2011-06-08 02:32:21.000000000","message":"Make final.","commit_id":"9895fb8e02a6f596a957ef97fc7c2ee94038a480"}],"src/main/java/net/spy/memcached/vbucket/config/ConfigurationParserJSON.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":"505d0eaf74a0c6a64e36c54d236c02e98cf9e8a2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import java.util.logging.Level;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"public class ConfigurationParserJSON implements ConfigurationParser {"},{"line_number":18,"context_line":"    private static final Logger logger \u003d Logger.getLogger(ConfigurationParserJSON.class.getName());"},{"line_number":19,"context_line":"    private static final String NAME_ATTR \u003d \"name\";"},{"line_number":20,"context_line":"    private static final String URI_ATTR \u003d \"uri\";"},{"line_number":21,"context_line":"    private static final String STREAMING_URI_ATTR \u003d \"streamingUri\";"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FzM%3D","line":18,"updated":"2011-05-31 17:33:44.000000000","message":"Use LoggerFactory.getLogger() instead.  This allows the logger to be abstracted out.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fe94300e04201c076ab1cb55df6dd935acdc3c4a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import java.util.logging.Level;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"public class ConfigurationParserJSON implements ConfigurationParser {"},{"line_number":18,"context_line":"    private static final Logger logger \u003d Logger.getLogger(ConfigurationParserJSON.class.getName());"},{"line_number":19,"context_line":"    private static final String NAME_ATTR \u003d \"name\";"},{"line_number":20,"context_line":"    private static final String URI_ATTR \u003d \"uri\";"},{"line_number":21,"context_line":"    private static final String STREAMING_URI_ATTR \u003d \"streamingUri\";"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FrA%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2FuI%3D","updated":"2011-06-01 13:19:56.000000000","message":"Yes, forgot to change this over to SpyObject and getLogger, but then the log formatting will need to change slightly too.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"aa1937697fde3ae930e75ce0da863d2138374e70","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import java.util.logging.Level;"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"public class ConfigurationParserJSON implements ConfigurationParser {"},{"line_number":18,"context_line":"    private static final Logger logger \u003d Logger.getLogger(ConfigurationParserJSON.class.getName());"},{"line_number":19,"context_line":"    private static final String NAME_ATTR \u003d \"name\";"},{"line_number":20,"context_line":"    private static final String URI_ATTR \u003d \"uri\";"},{"line_number":21,"context_line":"    private static final String STREAMING_URI_ATTR \u003d \"streamingUri\";"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FuI%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2FzM%3D","updated":"2011-06-01 05:00:03.000000000","message":"Many of the objects extends SpyObject or similar and can just call getLogger() when they need it.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"f650493d74fbcfbbcbc44b9de146f74eefcd7314","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            String bucketname \u003d bucketJO.get(\"name\").toString();"},{"line_number":90,"context_line":"            String streamingUri \u003d bucketJO.get(\"streamingUri\").toString();"},{"line_number":91,"context_line":"            ConfigFactory cf \u003d new DefaultConfigFactory();"},{"line_number":92,"context_line":"            Config config \u003d cf.createConfigFromJSON(bucketJO);"},{"line_number":93,"context_line":"            List\u003cNode\u003e nodes \u003d new ArrayList\u003cNode\u003e();"},{"line_number":94,"context_line":"            JSONArray nodesJA \u003d bucketJO.getJSONArray(\"nodes\");"},{"line_number":95,"context_line":"            for(int i \u003d 0; i \u003c nodesJA.length(); ++i) {"}],"source_content_type":"text/x-java","patch_set":6,"id":"AAABRn%2F%2F%2B%2Fg%3D","line":92,"updated":"2011-06-07 06:50:34.000000000","message":"This doesn\u0027t compile.  Should just be create()","commit_id":"ae1d675bedd9c59d1640de2470b67832418202a1"},{"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":"ce3a1675ddbd7b6c69a70a7292622251cace5ec9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    private static final String URI_ATTR \u003d \"uri\";"},{"line_number":19,"context_line":"    private static final String STREAMING_URI_ATTR \u003d \"streamingUri\";"},{"line_number":20,"context_line":"    public Map\u003cString, Pool\u003e parseBase(String base) throws ParseException {"},{"line_number":21,"context_line":"        Map\u003cString, Pool\u003e parsedBase \u003d new HashMap\u003cString, Pool\u003e();"},{"line_number":22,"context_line":"        JSONArray poolsJA \u003d null;"},{"line_number":23,"context_line":"        try {"},{"line_number":24,"context_line":"            JSONObject baseJO \u003d new JSONObject(base);"}],"source_content_type":"text/x-java","patch_set":8,"id":"AAABRn%2F%2F%2BzQ%3D","line":21,"updated":"2011-06-08 02:32:21.000000000","message":"Make HashMap.","commit_id":"9895fb8e02a6f596a957ef97fc7c2ee94038a480"},{"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":"ce3a1675ddbd7b6c69a70a7292622251cace5ec9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            String streamingUri \u003d bucketJO.get(\"streamingUri\").toString();"},{"line_number":91,"context_line":"            ConfigFactory cf \u003d new DefaultConfigFactory();"},{"line_number":92,"context_line":"            Config config \u003d cf.createConfigFromJSON(bucketJO);"},{"line_number":93,"context_line":"            List\u003cNode\u003e nodes \u003d new ArrayList\u003cNode\u003e();"},{"line_number":94,"context_line":"            JSONArray nodesJA \u003d bucketJO.getJSONArray(\"nodes\");"},{"line_number":95,"context_line":"            for(int i \u003d 0; i \u003c nodesJA.length(); ++i) {"},{"line_number":96,"context_line":"                JSONObject nodeJO \u003d nodesJA.getJSONObject(i);"}],"source_content_type":"text/x-java","patch_set":8,"id":"AAABRn%2F%2F%2BzM%3D","line":93,"updated":"2011-06-08 02:32:21.000000000","message":"Make ArrayList.","commit_id":"9895fb8e02a6f596a957ef97fc7c2ee94038a480"}],"src/main/java/net/spy/memcached/vbucket/config/Node.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":"505d0eaf74a0c6a64e36c54d236c02e98cf9e8a2","unresolved":false,"context_lines":[{"line_number":6,"context_line":"public class Node {"},{"line_number":7,"context_line":"    private final Status status;"},{"line_number":8,"context_line":"    private final String hostname;"},{"line_number":9,"context_line":"    private Map\u003cPort, String\u003e ports;"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    public Node(Status status, String hostname, Map\u003cPort, String\u003e ports) {"},{"line_number":12,"context_line":"        this.status \u003d status;"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FzI%3D","line":9,"updated":"2011-05-31 17:33:44.000000000","message":"Can ports be made final?","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"505d0eaf74a0c6a64e36c54d236c02e98cf9e8a2","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        if (!hostname.equals(node.hostname)) return false;"},{"line_number":37,"context_line":"        if (!ports.equals(node.ports)) return false;"},{"line_number":38,"context_line":"        if (status !\u003d node.status) return false;"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        return true;"},{"line_number":41,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FzE%3D","line":38,"updated":"2011-05-31 17:33:44.000000000","message":"For faster failure, move this line above the line comparing ports.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"}],"src/main/java/net/spy/memcached/vbucket/config/Pool.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":"505d0eaf74a0c6a64e36c54d236c02e98cf9e8a2","unresolved":false,"context_lines":[{"line_number":9,"context_line":" */"},{"line_number":10,"context_line":"public class Pool {"},{"line_number":11,"context_line":"    // it\u0027s base uri"},{"line_number":12,"context_line":"    private URI base;"},{"line_number":13,"context_line":"    // pool name"},{"line_number":14,"context_line":"    private String name;"},{"line_number":15,"context_line":"    // pool\u0027s uri"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FzA%3D","line":12,"updated":"2011-05-31 17:33:44.000000000","message":"These all can be made final, since nobody sets them.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"709f1231a482537d3eef83a7729b3aea33fe5c3e","unresolved":false,"context_lines":[{"line_number":9,"context_line":" */"},{"line_number":10,"context_line":"public class Pool {"},{"line_number":11,"context_line":"    // it\u0027s base uri"},{"line_number":12,"context_line":"    private URI base;"},{"line_number":13,"context_line":"    // pool name"},{"line_number":14,"context_line":"    private String name;"},{"line_number":15,"context_line":"    // pool\u0027s uri"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2Ftk%3D","line":12,"in_reply_to":"AAABRn%2F%2F%2FzA%3D","updated":"2011-06-01 05:44:18.000000000","message":"I put a bit of effort into this, but it\u0027s somewhat confusing.  I couldn\u0027t find much setting it.\n\nIt makes sense for this to be built and returned from a configuration thing somewhere, but it seems like it\u0027s dynamically adjusted within that thing.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"aa1937697fde3ae930e75ce0da863d2138374e70","unresolved":false,"context_lines":[{"line_number":9,"context_line":" */"},{"line_number":10,"context_line":"public class Pool {"},{"line_number":11,"context_line":"    // it\u0027s base uri"},{"line_number":12,"context_line":"    private URI base;"},{"line_number":13,"context_line":"    // pool name"},{"line_number":14,"context_line":"    private String name;"},{"line_number":15,"context_line":"    // pool\u0027s uri"}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FuE%3D","line":12,"in_reply_to":"AAABRn%2F%2F%2FzA%3D","updated":"2011-06-01 05:00:03.000000000","message":"I think I had eclipse set up to just do that for me.  It\u0027s nice to be able to easily see which things are changing.","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"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":"aa1937697fde3ae930e75ce0da863d2138374e70","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    // pool\u0027s streaming uri"},{"line_number":18,"context_line":"    private URI streamingUri;"},{"line_number":19,"context_line":"    // buckets uri"},{"line_number":20,"context_line":"    private Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":21,"context_line":"    // buckets related to this pool"},{"line_number":22,"context_line":"    private URI bucketsUri;"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-java","patch_set":1,"id":"AAABRn%2F%2F%2FuA%3D","line":20,"updated":"2011-06-01 05:00:03.000000000","message":"Any reason not to have this just be a HashMap?","commit_id":"f6e902c396d65b5e488b5f4efcbd2f3af2313091"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3c1d41361c9682e3a29372bd3600a92e2337c39d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2FhE%3D","line":18,"updated":"2011-06-03 19:42:16.000000000","message":"Dustin had previously asked why this should be a ConcurrentHashMap.  \n\nSummary is that it probably shouldn\u0027t be, but it feels safer to leave it alone for the moment.  In the HTTP Configuration provider, I believe netty will only do all of it\u0027s work on one thread, so this need not be thread safe.  That said, it probably should be rewritten to do all of this object model differently.\n\nThis is the one change I did not make simply because I think it\u0027s safer to leave it alone for now.  You can get a HashMap pretty hosed if it were mutated by multiple threads, and I need to look more at how Netty deals with propogating events when monitoring something like this.  \n\nLooking at the code still to come in, it\u0027s only accessed when there is a reconfiguration event, and then only from a single method and then only to get the list of buckets that belongs to a pool.  In other words, it\u0027s infrequent changes (only config changes to a membase cluster) that lead to a HashMap of buckets.  In nearly all cases, this updates the internal object model of the cluster it\u0027s talking with, but has zero effect on what is happening with the NodeLocator and client.  The only case where it would is when the bucket the MemcachedClient is initialized to use is removed from the cluster.  In that case, asynchronously the NodeLocator will eventually start whining, but before that it\u0027ll try sending operations to a cluster that will refuse to handle them.  It\u0027s all reasonably safe failure as far as I can see.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"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":"947aec4d5c62bbb6efc657025855372f179e884e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2Fec%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2Fe8%3D","updated":"2011-06-03 22:08:04.000000000","message":"I think I\u0027ll just remove it in this change.  It\u0027s not used.  When it\u0027s used, we\u0027ll work out the API and make sure all access is obvious.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0dcae8b13ca7a6bcf00e38361ea92106b667c07f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2FeQ%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2Fec%3D","updated":"2011-06-04 00:22:03.000000000","message":"It is used in commits that I\u0027m still trying to straighten out.  I\u0027m fine with that, but this is all doing two things (which I can be blamed for).\n\n#1 making the work I have to do to get this integrated much harder\n#2 creating much more divergence with code people are currently running (in the prerelease)\n\nI don\u0027t so much mind #1, in that we come up with a better product.  I\u0027m taking heat from a lot of other angles that perhaps I shouldn\u0027t care about, but #2 is scary.\n\nIt feels like we\u0027re going to end up with an RC/GA that while more maintainable, is more likely to have bugs than the prerelease.  Here\u0027s an idea of what I\u0027m coping with and trying to make each commit understandable and tested:\nhttps://skitch.com/ingenthr/fn68f/java-memcached-client-branch-27cleanup","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"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":"5b020588fe0d74ef64ed6a67234b537ddf0f17bf","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2Fe8%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2Ffg%3D","updated":"2011-06-03 21:27:46.000000000","message":"I\u0027m just concerned that it\u0027s leaky -- it\u0027s too easy to lose control of where changes occur.\n\nThis class itself doesn\u0027t \"own\" the data in the sense that somewhere something calls getBuckets() and then changes that.  I think at the very least this class should own all of the changes to its own data.  At that point, there\u0027s really little point in arguing for concurrent map vs. copy and replace map because it can only happen in one place.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"60814c6ffd8091cf6c4d6444cb8509ba65b2f4cd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2Ffg%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2FgE%3D","updated":"2011-06-03 20:58:58.000000000","message":"The coming code updates individual key/value pairs in the map, yes.  It probably shouldn\u0027t.\n\nI\u0027m going to ask, is this okay for now?  We\u0027re talking about something that very rarely changes, and if it does change, from the user perspective it really doesn\u0027t matter if the Map is swapped atomically or the entry in the map is swapped atomically.  In the current implementation, there is no sharing of these objects between different instances of MemcachedClient, and each MemcachedClient uses one and only one Bucket entry.  The fact that Bucket \"bar\" can change while I can only ever use bucket \"foo\" is really irrelevant.  \n\nIf two HTTP updates in extremely short succession delete and recreate bucket \"foo\", which I\u0027m using things would go wonky for a period of time, but in a deterministic and acceptable way.  Doing a map swap atomically won\u0027t really change this.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"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":"1c5d5b19d9d08c091bd8d525e9bc09a50207d441","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2FgE%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2FgQ%3D","updated":"2011-06-03 20:23:52.000000000","message":"I agree with that.  I think it\u0027s hugely important to understand the places where things can change and make them very explicit and justified.  Ideally, we only generate garbage.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"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":"245e2b417777849e55f16c316897366a368757d8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"AAABRn%2F%2F%2FgQ%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2FhE%3D","updated":"2011-06-03 19:56:34.000000000","message":"Does the reconfiguration update a single key/value pair in the map?\n\nIf the code is going to replace the map in place, then suggest using a java.util.concurrent.atomic.AtomicReference that wraps a immutable map, built with Collections.unmodifiableMap(), and you can have a java.util.HashMap in there, so you only have one place where synchronization is done.","commit_id":"9806ae804f11a006761c07f5a60a6ded24ed7f8c"},{"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":"565af9abf7d6f213b3d5dd6fdf56a7c83d126564","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    // pool\u0027s streaming uri"},{"line_number":14,"context_line":"    private final URI streamingUri;"},{"line_number":15,"context_line":"    // buckets related to this pool"},{"line_number":16,"context_line":"    private URI bucketsUri;"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    public Pool(String name, URI uri, URI streamingUri) {"},{"line_number":19,"context_line":"        this.name \u003d name;"}],"source_content_type":"text/x-java","patch_set":4,"id":"AAABRn%2F%2F%2Fd4%3D","line":16,"updated":"2011-06-03 22:57:12.000000000","message":"I think this should be final, but I don\u0027t understand enough about what this is doing to make it so.\n\nIs there any reason we can\u0027t know this information before constructing a Pool?","commit_id":"7c0370b25b754f23e4cab1a805a59c4bcc6336ee"},{"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":"44c208d62bd9c71027b2e26f7c75b70cd95da8a8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":7,"id":"AAABRn%2F%2F%2B%2FM%3D","line":18,"updated":"2011-06-07 06:56:54.000000000","message":"I\u0027m still uncomfortable with this.  Eclipse gives me a warning about it not being used, so I think it is, too.","commit_id":"c2aba3e9eae3284c1894322578dae76db225b4a6"},{"author":{"_account_id":1000013,"name":"Matt Ingenthron","email":"ingenthr@gmail.com","username":"ingenthr","avatars":[{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dface45e4481ef6bd571492fa3b4ef8c.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a22d3396f480639e3ac0a599b0cf45d5d0b770e8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    // pool\u0027s streaming uri"},{"line_number":16,"context_line":"    private final URI streamingUri;"},{"line_number":17,"context_line":"    // buckets uri"},{"line_number":18,"context_line":"    private final Map\u003cString, Bucket\u003e buckets \u003d new ConcurrentHashMap\u003cString, Bucket\u003e();"},{"line_number":19,"context_line":"    // buckets related to this pool"},{"line_number":20,"context_line":"    private URI bucketsUri;"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-java","patch_set":7,"id":"AAABRn%2F%2F%2B4g%3D","line":18,"in_reply_to":"AAABRn%2F%2F%2B%2FM%3D","updated":"2011-06-07 22:10:23.000000000","message":"Also not used, so removed.","commit_id":"c2aba3e9eae3284c1894322578dae76db225b4a6"}],"src/test/java/net/spy/memcached/vbucket/config/ConfigurationParserMock.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":"ce3a1675ddbd7b6c69a70a7292622251cace5ec9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"            new Node(Status.healthy, \"localhost\", Collections.singletonMap(Port.direct, \"11210\")));"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    public Map\u003cString, Pool\u003e parseBase(String base) throws ParseException {"},{"line_number":29,"context_line":"        Map\u003cString, Pool\u003e result \u003d new HashMap\u003cString, Pool\u003e();"},{"line_number":30,"context_line":"        try {"},{"line_number":31,"context_line":"            parseBaseCalled \u003d true;"},{"line_number":32,"context_line":"            Pool pool \u003d new Pool(poolName, new URI(poolUri), new URI(poolStreamingUri));"}],"source_content_type":"text/x-java","patch_set":8,"id":"AAABRn%2F%2F%2BzI%3D","line":29,"updated":"2011-06-08 02:32:21.000000000","message":"Make HashMap.","commit_id":"9895fb8e02a6f596a957ef97fc7c2ee94038a480"},{"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":"ce3a1675ddbd7b6c69a70a7292622251cace5ec9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    public Map\u003cString, Bucket\u003e parseBuckets(String buckets) throws ParseException {"},{"line_number":41,"context_line":"        Map\u003cString, Bucket\u003e result \u003d new HashMap\u003cString, Bucket\u003e();"},{"line_number":42,"context_line":"        try {"},{"line_number":43,"context_line":"            parseBucketsCalled \u003d true;"},{"line_number":44,"context_line":"            Bucket bucket \u003d new Bucket(bucketName, vbuckets, new URI(bucketStreamingUri), nodes);"}],"source_content_type":"text/x-java","patch_set":8,"id":"AAABRn%2F%2F%2BzE%3D","line":41,"updated":"2011-06-08 02:32:21.000000000","message":"Make HashMap.","commit_id":"9895fb8e02a6f596a957ef97fc7c2ee94038a480"}]}
