)]}'
{"bin/neutron-netns-multitool":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"433bc5206c5cceed5f7da6c901dd774b24ddaa96","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# This is a prototype that I\u0027ve written in bash because it is easier for"},{"line_number":4,"context_line":"# me to hack this out in bash.  When I\u0027ve proven out the idea, I plan to"},{"line_number":5,"context_line":"# rewrite this in python per a discussion with Mark McClain."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Constants (which of these need to be specified as options?)"},{"line_number":8,"context_line":"LOOPBACK_DEVNAME\u003dlo"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"AAAAVn%2F%2FZ4c%3D","line":5,"updated":"2014-03-06 09:45:30.000000000","message":"I believe python we should avoid spawning python subprocesses to do tasks. The startup time is not negligible at all and It\u0027s heavily hurting neutron\u0027s scalability at this moment.\n\nIn the other hand, a python class, capable of writting out bash sequences to be executed later, seems like a reasonable option.\n\nI mean, we check what we want to do in our python class (without spawning a new python process), we dump the sequence to bash, we run it into a rootwrapped + namespace all together, and get the output.\n\nIn case of failure, we could return (temp file?) an ID pointing to the sequenced command, and the output error of such command.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4112b552e8e3186e274d5e6c797f86fb4a45d0cf","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# This is a prototype that I\u0027ve written in bash because it is easier for"},{"line_number":4,"context_line":"# me to hack this out in bash.  When I\u0027ve proven out the idea, I plan to"},{"line_number":5,"context_line":"# rewrite this in python per a discussion with Mark McClain."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Constants (which of these need to be specified as options?)"},{"line_number":8,"context_line":"LOOPBACK_DEVNAME\u003dlo"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"AAAAVn%2F%2FHzk%3D","line":5,"in_reply_to":"AAAAVn%2F%2FZ4c%3D","updated":"2014-03-08 22:36:56.000000000","message":"However the script is implemented, I will take great care to measure and minimize start up costs.  I will not go as far as to write it in C though.  My bash prototype starts up very quickly showing that it is possible to get an interpreter to start up quickly.\n\nI\u0027m not going to focus too much on the atomicity of these operations for now.  The agents will be as much responsible for reversing things on failure as they are today.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a5f5cc42035f68b83291791181d4476754ba725d","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# This is a prototype that I\u0027ve written in bash because it is easier for"},{"line_number":4,"context_line":"# me to hack this out in bash.  When I\u0027ve proven out the idea, I plan to"},{"line_number":5,"context_line":"# rewrite this in python per a discussion with Mark McClain."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Constants (which of these need to be specified as options?)"},{"line_number":8,"context_line":"LOOPBACK_DEVNAME\u003dlo"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"AAAAVn%2F%2FZ0g%3D","line":5,"in_reply_to":"AAAAVn%2F%2FZ4c%3D","updated":"2014-03-06 09:52:44.000000000","message":"Thinking more about this ,  It could be interesting , if also, at failure, all the coalesced operations could be reverted (for that we\u0027d neet to provide the inverse of every operation, which would have to be executed in reverse order.), getting them as transactions.\n\nAnyway, massively using this, probably means changing most of the logic in neutron at this point... \n\nbut it\u0027s could be an interesting class for operations that can be logically grouped in our code.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"}],"neutron/agent/netns_multitool.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"433bc5206c5cceed5f7da6c901dd774b24ddaa96","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# importing this costs about 600 ms"},{"line_number":28,"context_line":"# from neutron.common import config"},{"line_number":29,"context_line":"# importing this costs 400 ms"},{"line_number":30,"context_line":"# from neutron.openstack.common import log as logging"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FZ3c%3D","line":30,"updated":"2014-03-06 09:45:30.000000000","message":"ms -milliseconds- or us -microseconds-? :) I hope it\u0027s us.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"c9ed28fed4e2bfab092abaf8c99a1a44f4384e8c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# importing this costs about 600 ms"},{"line_number":28,"context_line":"# from neutron.common import config"},{"line_number":29,"context_line":"# importing this costs 400 ms"},{"line_number":30,"context_line":"# from neutron.openstack.common import log as logging"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2F3Cs%3D","line":30,"in_reply_to":"AAAAVn%2F%2FHzo%3D","updated":"2014-03-13 10:17:23.000000000","message":"I\u0027d rather stay in bash than python. I have the feeling that we agree on this.\nWe\u0027re trying to kill python overhead, why coming back again with it.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4112b552e8e3186e274d5e6c797f86fb4a45d0cf","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# importing this costs about 600 ms"},{"line_number":28,"context_line":"# from neutron.common import config"},{"line_number":29,"context_line":"# importing this costs 400 ms"},{"line_number":30,"context_line":"# from neutron.openstack.common import log as logging"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FHzo%3D","line":30,"in_reply_to":"AAAAVn%2F%2FZ3c%3D","updated":"2014-03-08 22:36:56.000000000","message":"It is milliseconds and not microseconds.  Crazy, huh?  I\u0027m pretty sure that I measured it on a VM running devstack and not bare metal.  One reason for writing the prototype in bash is to get much better start up time so that I can measure how much performance improvement is possible by batching commands together.\n\nWriting the script in python may be a bit tricky because we can\u0027t just go and import all of these things that take forever to load.  I\u0027ll cross that bridge when I come to it.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"772c9aa2e015674cc11a21fda73d338c500547dd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# importing this costs about 600 ms"},{"line_number":28,"context_line":"# from neutron.common import config"},{"line_number":29,"context_line":"# importing this costs 400 ms"},{"line_number":30,"context_line":"# from neutron.openstack.common import log as logging"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2F3CM%3D","line":30,"in_reply_to":"AAAAWH%2F%2F3Cs%3D","updated":"2014-03-13 10:18:08.000000000","message":"And yes, wow!! ms :-oo, I missed that point in my previous reply.","commit_id":"54b336c4a92595ecccf8cb664d41c7564e026184"}]}
