)]}'
{"bin/ceilometer-coordination-inspect.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9ecfab9e31bb0d99d67276e681f1488501338eb0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"               positional\u003dTrue,"},{"line_number":48,"context_line":"               required\u003dTrue,"},{"line_number":49,"context_line":"               help\u003d\u0027The id of the coordination group to inspect.\u0027),"},{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027fake\u0027,"},{"line_number":51,"context_line":"                short\u003d\u0027f\u0027,"},{"line_number":52,"context_line":"                help\u003d\u0027If set, fork multiple times to add non-working \u0027"},{"line_number":53,"context_line":"                \u0027members to the group.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_3df10696","line":50,"updated":"2014-10-10 09:24:03.000000000","message":"I think the option is badly named, and I don\u0027t get the poinf of it even with the code and help string. :)","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c5319e18a34f9609c63c6b1f0f659750314a4851","unresolved":false,"context_lines":[{"line_number":47,"context_line":"               positional\u003dTrue,"},{"line_number":48,"context_line":"               required\u003dTrue,"},{"line_number":49,"context_line":"               help\u003d\u0027The id of the coordination group to inspect.\u0027),"},{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027fake\u0027,"},{"line_number":51,"context_line":"                short\u003d\u0027f\u0027,"},{"line_number":52,"context_line":"                help\u003d\u0027If set, fork multiple times to add non-working \u0027"},{"line_number":53,"context_line":"                \u0027members to the group.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_6e62f617","line":50,"in_reply_to":"baa201ad_3df10696","updated":"2014-10-10 11:10:07.000000000","message":"The reason it exists at all is because I used it to do https://review.openstack.org/#/c/127032/\n\nI agree the name is not ideal but I can\u0027t really think of a good one especially as the behavior it causes is pretty esoteric. See the main response for a big more on this topic.","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9ecfab9e31bb0d99d67276e681f1488501338eb0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    return coordinator"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def child_run(name):"},{"line_number":66,"context_line":"    print(\u0027forked another for\u0027, name)"},{"line_number":67,"context_line":"    coordinator \u003d coordination.PartitionCoordinator()"},{"line_number":68,"context_line":"    coordinator.start()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_bd34164b","line":65,"updated":"2014-10-10 09:24:03.000000000","message":"group_name would be better (I wondered what the name was for a while :)","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c5319e18a34f9609c63c6b1f0f659750314a4851","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    return coordinator"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def child_run(name):"},{"line_number":66,"context_line":"    print(\u0027forked another for\u0027, name)"},{"line_number":67,"context_line":"    coordinator \u003d coordination.PartitionCoordinator()"},{"line_number":68,"context_line":"    coordinator.start()"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_ce7122e2","line":65,"in_reply_to":"baa201ad_bd34164b","updated":"2014-10-10 11:10:07.000000000","message":"Good idea.","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"090140ed83d6800aa9c1691fcb8466559eb752ac","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    coordinator.start()"},{"line_number":69,"context_line":"    coordinator.join_group(name)"},{"line_number":70,"context_line":"    try:"},{"line_number":71,"context_line":"        for i in range(60):"},{"line_number":72,"context_line":"            coordinator.heartbeat()"},{"line_number":73,"context_line":"            time.sleep(1)"},{"line_number":74,"context_line":"    except KeyboardInterrupt:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_8249b190","line":71,"updated":"2014-10-10 09:00:05.000000000","message":"Could you clarify why do we use here range(60)? Do we need exactly 60 heartbeat?","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c5319e18a34f9609c63c6b1f0f659750314a4851","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    coordinator.start()"},{"line_number":69,"context_line":"    coordinator.join_group(name)"},{"line_number":70,"context_line":"    try:"},{"line_number":71,"context_line":"        for i in range(60):"},{"line_number":72,"context_line":"            coordinator.heartbeat()"},{"line_number":73,"context_line":"            time.sleep(1)"},{"line_number":74,"context_line":"    except KeyboardInterrupt:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_0e088a2c","line":71,"in_reply_to":"baa201ad_8249b190","updated":"2014-10-10 11:10:07.000000000","message":"I\u0027ll add a comment to explain in the code but for now:\n\nThe heartbeat needs to be sustained over some duration for the \"faker\" to become a reliable member of the group.\nThe default heartbeat used in the agents is every one second.\nThe loop is 60 so that the child will die after one minute to avoid having too many children around.","commit_id":"701bd07179586e8842f38d49f7179241aef5f857"}],"ceilometer/cmd/coordination_inspect.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"822f8f6ecd56f8dc39eb57de8ec5dc3dc0612bdd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"When coordination is used, each agent signs up to a group (e.g. the"},{"line_number":22,"context_line":"compute-agent by default joins a group called compute-\u003chost\u003e where"},{"line_number":23,"context_line":"\u003chost\u003e is the value of cfg.CONF.host). Each member has an identifier,"},{"line_number":24,"context_line":"usually a UUID, recorded into the group."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This tool provide two pieces of functionality:"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_245c43ed","line":24,"updated":"2014-10-14 09:24:41.000000000","message":"Probably worth mentioning the group name used by the central agent and alarm-evaluator also? i.e. \u0027alarm_evaluator\u0027 for the later.\n\nFor the central agent, it gets a little more messy, since the group or groups joined depends on the discovery extensions and static resources defined. So this could end up as e.g.:\n\n* central-global\n* central-5038283938790693526\n* central-312766415125795481\n\nwhere the latter two groups are named for the hashes of two sets of statically defined resources in the pipeline.yaml.\n\nSo I\u0027m wondering would it make more sense for the option to be:\n\n  --service [compute|alarm-evaluator|central]\n\ninstead of:\n\n  --group central-5038283938790693526\n\nand for this tool to consume the pipeline.yaml and then report on *all* the groups that the corresponding service would have joined?\n\nSo for example:\n\n  ceilometer-coordination-inspect --service central \\\n    --pipeline-cfg-file /path/to/pipeline.yaml\n\nwould end up inspecting *all* the groups that the central agent would have joined based on the same pipeline config.","commit_id":"d6b7b66e155bde06fe343a00c10de31d443499a3"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"967c5ffda386c8da1cfadcea222ed22cfe512830","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fake_child_run(group_name):"},{"line_number":67,"context_line":"    \"\"\"Fake joining a group"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    In a child process, join ``group_name`` and send a heartbeat for"},{"line_number":70,"context_line":"    60 seconds, faking membership of the group."}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_7296e64d","line":67,"updated":"2014-10-15 09:10:56.000000000","message":"It seems that line 67 should be ended with dot.","commit_id":"d6b7b66e155bde06fe343a00c10de31d443499a3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"822f8f6ecd56f8dc39eb57de8ec5dc3dc0612bdd","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            while True:"},{"line_number":95,"context_line":"                if x % 5 \u003d\u003d 0:"},{"line_number":96,"context_line":"                    p \u003d multiprocessing.Process(target\u003dfake_child_run,"},{"line_number":97,"context_line":"                                                args\u003d(group_name,))"},{"line_number":98,"context_line":"                    p.start()"},{"line_number":99,"context_line":"                inspect(group_name)"},{"line_number":100,"context_line":"                time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_c42c574d","line":97,"updated":"2014-10-14 09:24:41.000000000","message":"Since the fake child approach was meant for a particular investigation, I wonder does it make sense to keep it in a general purpose tool? Or just remove it and focus this tool on one thing - inspecting existing groups in a read-only fashion.\n\n(esp. with the potential to fork off a storm of children if left running)","commit_id":"d6b7b66e155bde06fe343a00c10de31d443499a3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5a50fd148262c57fd11c200ae015d8d4185db1aa","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            while True:"},{"line_number":95,"context_line":"                if x % 5 \u003d\u003d 0:"},{"line_number":96,"context_line":"                    p \u003d multiprocessing.Process(target\u003dfake_child_run,"},{"line_number":97,"context_line":"                                                args\u003d(group_name,))"},{"line_number":98,"context_line":"                    p.start()"},{"line_number":99,"context_line":"                inspect(group_name)"},{"line_number":100,"context_line":"                time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_985c4b4d","line":97,"in_reply_to":"baa201ad_c42c574d","updated":"2014-10-15 10:32:26.000000000","message":"Just for sake of clarity: each child dies after 60 seconds.","commit_id":"d6b7b66e155bde06fe343a00c10de31d443499a3"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"3cd255a53d737d4e1612d69fc1a2fd4bb74dc23a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    coordinator.start()"},{"line_number":61,"context_line":"    members \u003d coordinator._get_members(group_name)"},{"line_number":62,"context_line":"    for member in members:"},{"line_number":63,"context_line":"        print(member)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fake_child_run(group_name):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_c8fa7c42","line":63,"updated":"2014-11-14 12:33:10.000000000","message":"May you use LOG or more formatted string?","commit_id":"384fc20e5c4d0e02c3b73cb40cb6d3bd33b2f216"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"009997ec8e46c8e3e1f6b3317c07c1388c6b692a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    In a child process, join ``group_name`` and send a heartbeat for"},{"line_number":70,"context_line":"    60 seconds, faking membership of the group."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    print(\u0027forked another for\u0027, group_name, file\u003dsys.stderr)"},{"line_number":73,"context_line":"    coordinator \u003d coordination.PartitionCoordinator()"},{"line_number":74,"context_line":"    coordinator.start()"},{"line_number":75,"context_line":"    coordinator.join_group(group_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_e16bd21b","line":72,"updated":"2014-11-14 14:13:45.000000000","message":"Agree with Ilia it would better to have LOG here instead of print.","commit_id":"384fc20e5c4d0e02c3b73cb40cb6d3bd33b2f216"}]}
