)]}'
{"src/menelaus_web.erl":[{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            Result2 \u003d case CompatTuple of"},{"line_number":597,"context_line":"                          {_, 1} -\u003e"},{"line_number":598,"context_line":"                              ?log_info(\"Lowering our advertised clusterCompatibility to 1 in order to enable joining 1.8.x cluster\"),"},{"line_number":599,"context_line":"                              Result3 \u003d lists:keyreplace(\u003c\u003c\"clusterCompatibility\"\u003e\u003e, 1, Result, CompatTuple),"},{"line_number":600,"context_line":"                              lists:keyreplace(clusterCompatibility, 1, Result3, CompatTuple);"},{"line_number":601,"context_line":"                          _ -\u003e"},{"line_number":602,"context_line":"                              Result"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FPA%3D","line":599,"updated":"2012-07-26 15:03:05.000000000","message":"Can \u003c\u003c\"clusterCompatibility\"\u003e\u003e really be a member of build_full_node_info() result?","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000005,"name":"Aliaksey Kandratsenka","email":"alkondratenko@gmail.com","username":"alk","avatars":[{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f14091f8f4f64ae48f01a6f3ea66b410d4004d11","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            Result2 \u003d case CompatTuple of"},{"line_number":597,"context_line":"                          {_, 1} -\u003e"},{"line_number":598,"context_line":"                              ?log_info(\"Lowering our advertised clusterCompatibility to 1 in order to enable joining 1.8.x cluster\"),"},{"line_number":599,"context_line":"                              Result3 \u003d lists:keyreplace(\u003c\u003c\"clusterCompatibility\"\u003e\u003e, 1, Result, CompatTuple),"},{"line_number":600,"context_line":"                              lists:keyreplace(clusterCompatibility, 1, Result3, CompatTuple);"},{"line_number":601,"context_line":"                          _ -\u003e"},{"line_number":602,"context_line":"                              Result"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNQ%3D","line":599,"in_reply_to":"AAABu3%2F%2F%2FPA%3D","updated":"2012-07-26 15:55:59.000000000","message":"It is a member. I just don\u0027t want to mess with clusterCompatibility inside build_full_node_info().\n\nIt seems much easer to do this compat version lowering here rather than trying to extend build_full_node_info()","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"}],"src/ns_cluster.erl":[{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":421,"context_line":"check_can_add_node(NodeKVList) -\u003e"},{"line_number":422,"context_line":"    JoineeClusterCompatVersion \u003d expect_json_property_integer(\u003c\u003c\"clusterCompatibility\"\u003e\u003e, NodeKVList),"},{"line_number":423,"context_line":"    MyCompatVersion \u003d misc:expect_prop_value(cluster_compatibility_version, dict:fetch(node(), ns_doctor:get_nodes())),"},{"line_number":424,"context_line":"    NodeCompatible \u003d case MyCompatVersion \u003e 1 of"},{"line_number":425,"context_line":"                         true -\u003e"},{"line_number":426,"context_line":"                             RemoteCompatVersion \u003d [JoineeClusterCompatVersion div 16#10000,"},{"line_number":427,"context_line":"                                                    JoineeClusterCompatVersion rem 16#10000],"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNw%3D","line":424,"updated":"2012-07-26 15:03:05.000000000","message":"As far as I understand compat version \"negotiation\" protocol, the remote node must lower it\u0027s advertised compat version to the one of the cluster. Otherwise it will return its real compat version. So if our version does not equal to the version returned by joinee, it seemingly means that the node is not compatible with the cluster. And it can both mean that joinee node is too old or too new to work in the same cluster with us. Am I missing something here? If my reasoning is correct, then the old code should just work.\n\nNote that the new code doesn\u0027t allow some very new node to refuse to join cluster because it\u0027s too old. I.e. it implies that all future versions will support all previous versions.","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000005,"name":"Aliaksey Kandratsenka","email":"alkondratenko@gmail.com","username":"alk","avatars":[{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f14091f8f4f64ae48f01a6f3ea66b410d4004d11","unresolved":false,"context_lines":[{"line_number":421,"context_line":"check_can_add_node(NodeKVList) -\u003e"},{"line_number":422,"context_line":"    JoineeClusterCompatVersion \u003d expect_json_property_integer(\u003c\u003c\"clusterCompatibility\"\u003e\u003e, NodeKVList),"},{"line_number":423,"context_line":"    MyCompatVersion \u003d misc:expect_prop_value(cluster_compatibility_version, dict:fetch(node(), ns_doctor:get_nodes())),"},{"line_number":424,"context_line":"    NodeCompatible \u003d case MyCompatVersion \u003e 1 of"},{"line_number":425,"context_line":"                         true -\u003e"},{"line_number":426,"context_line":"                             RemoteCompatVersion \u003d [JoineeClusterCompatVersion div 16#10000,"},{"line_number":427,"context_line":"                                                    JoineeClusterCompatVersion rem 16#10000],"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNU%3D","line":424,"in_reply_to":"AAABu3%2F%2F%2FNw%3D","updated":"2012-07-26 15:55:59.000000000","message":"I think you\u0027re right on first thing. Thanks for spotting it.\n\nAbout new node being unable to refuse very old node. I think it\u0027s doable in engage_cluster where it can check cluster compat and refuse (which we don\u0027t do today)","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"}],"src/ns_janitor.erl":[{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    ok \u003d janitor_agent:apply_new_bucket_config(Bucket, Servers, Zombies, NewBucketConfig, IgnoredVBuckets, States),"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    case Zombies \u003d:\u003d [] andalso proplists:get_bool(consider_stopping_rebalance_status, Options) of"},{"line_number":99,"context_line":"        true -\u003e"},{"line_number":100,"context_line":"            maybe_stop_rebalance_status();"},{"line_number":101,"context_line":"        _ -\u003e ok"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FQo%3D","line":98,"updated":"2012-07-26 15:03:05.000000000","message":"Since Zombies are always [] in this function clause, it\u0027s doesn\u0027t make sense to include Zombies \u003d:\u003d into condition. And I see that Zombies is intentionally passed to apply_new_bucket_config but then always matched against []. Is it supposed to be extended later?","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000005,"name":"Aliaksey Kandratsenka","email":"alkondratenko@gmail.com","username":"alk","avatars":[{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9ad79288563ad0d55baba41432adc6d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b5f1b241a677b4511f29e8ede98fd9f4049e93b3","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    ok \u003d janitor_agent:apply_new_bucket_config(Bucket, Servers, Zombies, NewBucketConfig, IgnoredVBuckets, States),"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    case Zombies \u003d:\u003d [] andalso proplists:get_bool(consider_stopping_rebalance_status, Options) of"},{"line_number":99,"context_line":"        true -\u003e"},{"line_number":100,"context_line":"            maybe_stop_rebalance_status();"},{"line_number":101,"context_line":"        _ -\u003e ok"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNE%3D","line":98,"in_reply_to":"AAABu3%2F%2F%2FQo%3D","updated":"2012-07-26 16:25:01.000000000","message":"Yes, intention is to support non-empty Zombies list hopefully soon. So I actually tried to have most of logic for it ready","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                      end,"},{"line_number":202,"context_line":"    {NewBucketConfig, IgnoredVBuckets}."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"sanify_chain(Bucket, State, Chain, FutureChain, VBucket, Zombies) -\u003e"},{"line_number":205,"context_line":"    NewChain \u003d do_sanify_chain(Bucket, State, Chain, FutureChain, VBucket, Zombies),"},{"line_number":206,"context_line":"    %% Fill in any missing replicas"},{"line_number":207,"context_line":"    case is_list(NewChain) andalso length(NewChain) \u003c length(Chain) of"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FQY%3D","line":204,"updated":"2012-07-26 15:03:05.000000000","message":"Small typo here: State should be States.","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    NodeStates \u003d [{N, S} || {N, V, S} \u003c- States, V \u003d\u003d VBucket],"},{"line_number":218,"context_line":"    ChainStates \u003d lists:map(fun (N) -\u003e"},{"line_number":219,"context_line":"                                    case lists:keyfind(N, 1, NodeStates) of"},{"line_number":220,"context_line":"                                        %% false -\u003e {N, case lists:member(N, Zombies) of"},{"line_number":221,"context_line":"                                        %%                  true -\u003e zombie;"},{"line_number":222,"context_line":"                                        %%                  _ -\u003e missing"},{"line_number":223,"context_line":"                                        %%              end};"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FQc%3D","line":220,"updated":"2012-07-26 15:03:05.000000000","message":"Commented out code left here.","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"}],"src/ns_vbucket_mover.erl":[{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                map::array(),"},{"line_number":40,"context_line":"                moves::dict(), movers::dict(),"},{"line_number":41,"context_line":"                progress_callback::progress_callback(),"},{"line_number":42,"context_line":"                done::boolean(),"},{"line_number":43,"context_line":"                pending_vbucket_updates::non_neg_integer()})."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"%%"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNs%3D","line":42,"updated":"2012-07-26 15:03:05.000000000","message":"This field is not used anymore.","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8205666fd6cf7884794e7edac65714301e9bff1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                moves::dict(), movers::dict(),"},{"line_number":41,"context_line":"                progress_callback::progress_callback(),"},{"line_number":42,"context_line":"                done::boolean(),"},{"line_number":43,"context_line":"                pending_vbucket_updates::non_neg_integer()})."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"%%"},{"line_number":46,"context_line":"%% API"}],"source_content_type":"text/x-erlang","patch_set":6,"id":"AAABu3%2F%2F%2FNo%3D","line":43,"updated":"2012-07-26 15:03:05.000000000","message":"This one either.","commit_id":"6c1ae5210d578c8db5d415093491d27c181fa532"},{"author":{"_account_id":1000208,"name":"Aliaksey Artamonau","email":"aliaksey.artamonau@couchbase.com","username":"aartamonau","avatars":[{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/bb71c4f683f0911004c62e00ca56922a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"697c9bce0ccba967c298c931c8dcf90245c43c14","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                moves::dict(), movers::dict(),"},{"line_number":41,"context_line":"                progress_callback::progress_callback(),"},{"line_number":42,"context_line":"                done::boolean(),"},{"line_number":43,"context_line":"                pending_vbucket_updates::non_neg_integer()})."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"%%"},{"line_number":46,"context_line":"%% API"}],"source_content_type":"text/x-erlang","patch_set":9,"id":"AAABu3%2F%2F%2Bwg%3D","line":43,"updated":"2012-07-27 15:36:08.000000000","message":"\u0027done\u0027 and \u0027pending_vbucket_updates\u0027 are not used anymore.","commit_id":"cb969d8fc2c1aa4ceee85ee934cd6120c2f07185"}]}
