)]}'
{"contrib/devstack/extras.d/80-rally.sh":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# rally.sh - DevStack extras script to install Rally"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"if is_service_enabled rally; then"},{"line_number":4,"context_line":"    if [[ \"$1\" \u003d\u003d \"source\" ]]; then"},{"line_number":5,"context_line":"        # Initial source"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bab921fb_d731fded","line":2,"updated":"2015-04-23 21:44:13.000000000","message":"It is better to avoid any changes in contrib/ Rally as well has contrib dir. And you can take a look here: \n\n  https://github.com/openstack-infra/project-config/blob/master/jenkins/jobs/rally.yaml#L125-L160\n\nFor example how to add job that contains rally \u0026 cue","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# rally.sh - DevStack extras script to install Rally"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"if is_service_enabled rally; then"},{"line_number":4,"context_line":"    if [[ \"$1\" \u003d\u003d \"source\" ]]; then"},{"line_number":5,"context_line":"        # Initial source"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bab921fb_6b3b349d","line":2,"in_reply_to":"bab921fb_d731fded","updated":"2015-04-24 22:39:21.000000000","message":"yes, this is required to get Rally automatically integrated into our devstack environment when on a Vagrant VM.","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"}],"rally-scenarios/plugins/clusters.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Benchmark Rally scenarios for Cue.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @base.scenario()"},{"line_number":27,"context_line":"    def create_and_verify_cluster(self, name\u003d\"cluster_0\", flavor\u003d8795, size\u003d1,"},{"line_number":28,"context_line":"                                  network_id\u003d0, volume_size\u003d0):"},{"line_number":29,"context_line":"        \"\"\"Creates a new cue cluster."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_57aa8dd5","line":27,"updated":"2015-04-23 21:44:13.000000000","message":"It is better to generate each time new name and not allow people to pass it like this.\n\n\nIn rally we are using name convention: \n\n  rally_cue_clusters_\u003crandom_part\u003e should be prefix","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Benchmark Rally scenarios for Cue.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @base.scenario()"},{"line_number":27,"context_line":"    def create_and_verify_cluster(self, name\u003d\"cluster_0\", flavor\u003d8795, size\u003d1,"},{"line_number":28,"context_line":"                                  network_id\u003d0, volume_size\u003d0):"},{"line_number":29,"context_line":"        \"\"\"Creates a new cue cluster."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_09604000","line":27,"in_reply_to":"bab921fb_57aa8dd5","updated":"2015-04-24 22:39:21.000000000","message":"Done","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        2. Submit request to create cluster"},{"line_number":34,"context_line":"        3. Wait until cluster goes ACTIVE"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        LOG.debug(\"Submit request to create cue cluster\")"},{"line_number":37,"context_line":"        cluster \u003d self._create_cluster(name\u003dname, flavor\u003dflavor, size\u003dsize,"},{"line_number":38,"context_line":"                                       network_id\u003dnetwork_id,"},{"line_number":39,"context_line":"                                       volume_size\u003dvolume_size)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d75fbd0c","line":36,"updated":"2015-04-23 21:44:13.000000000","message":"It is better to avoid such kind of logging in scenarios.\n\nJust imaging what will happen if somebody decide to run this 1kk times.","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        2. Submit request to create cluster"},{"line_number":34,"context_line":"        3. Wait until cluster goes ACTIVE"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        LOG.debug(\"Submit request to create cue cluster\")"},{"line_number":37,"context_line":"        cluster \u003d self._create_cluster(name\u003dname, flavor\u003dflavor, size\u003dsize,"},{"line_number":38,"context_line":"                                       network_id\u003dnetwork_id,"},{"line_number":39,"context_line":"                                       volume_size\u003dvolume_size)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_c959285c","line":36,"in_reply_to":"bab921fb_d75fbd0c","updated":"2015-04-24 22:39:21.000000000","message":"Done","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        3. Wait until cluster goes ACTIVE"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        LOG.debug(\"Submit request to create cue cluster\")"},{"line_number":37,"context_line":"        cluster \u003d self._create_cluster(name\u003dname, flavor\u003dflavor, size\u003dsize,"},{"line_number":38,"context_line":"                                       network_id\u003dnetwork_id,"},{"line_number":39,"context_line":"                                       volume_size\u003dvolume_size)"},{"line_number":40,"context_line":"        LOG.debug(\"Cue cluster create response:\\n%s\", cluster)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_17ad35e9","line":37,"updated":"2015-04-23 21:44:13.000000000","message":"it is better to move generation of name to _create_cluster","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        3. Wait until cluster goes ACTIVE"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        LOG.debug(\"Submit request to create cue cluster\")"},{"line_number":37,"context_line":"        cluster \u003d self._create_cluster(name\u003dname, flavor\u003dflavor, size\u003dsize,"},{"line_number":38,"context_line":"                                       network_id\u003dnetwork_id,"},{"line_number":39,"context_line":"                                       volume_size\u003dvolume_size)"},{"line_number":40,"context_line":"        LOG.debug(\"Cue cluster create response:\\n%s\", cluster)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_a954b420","line":37,"in_reply_to":"bab921fb_17ad35e9","updated":"2015-04-24 22:39:21.000000000","message":"Done","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"}],"rally-scenarios/plugins/cue_utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"auth \u003d keystoneclient.auth.identity.v2.Password("},{"line_number":26,"context_line":"    auth_url\u003dos.environ[\u0027OS_AUTH_URL\u0027],"},{"line_number":27,"context_line":"    username\u003dos.environ[\u0027OS_USERNAME\u0027],"},{"line_number":28,"context_line":"    password\u003dos.environ[\u0027OS_PASSWORD\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_f776413d","line":25,"updated":"2015-04-23 21:44:13.000000000","message":"This code is broken by design and doesn\u0027t use Rally framework at it should. \n\nFirst of all Rally approach is next:\n\n  - create a bunch of users/tenants in context\n  - run N times scenario method with random users from context\n  - cleanup all users\n\n\nEach time when you are running scenario you have 2 inited versions of rally.osclients.Clients one with admin credenitals another one with random chosen user credentials. \n\n\nSecond, Rally use threads/process so you should be carefully about what you are doing in global space. \n\nE.g. initialization of keystone client is always related to storing open socket inside it. Which is not thread safe. \n\nSo the only save way to work is to make 100% sure that you don\u0027t use single instance of clients in 2 threads. \n\n\n\nIn other words YOU SHOULD ALWAYS work with clients inside the scenario method, and each run of it should init new keystone client and create new socket.","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"auth \u003d keystoneclient.auth.identity.v2.Password("},{"line_number":26,"context_line":"    auth_url\u003dos.environ[\u0027OS_AUTH_URL\u0027],"},{"line_number":27,"context_line":"    username\u003dos.environ[\u0027OS_USERNAME\u0027],"},{"line_number":28,"context_line":"    password\u003dos.environ[\u0027OS_PASSWORD\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_11717ea8","line":25,"in_reply_to":"bab921fb_f776413d","updated":"2015-04-24 22:39:21.000000000","message":"Done","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9d32c1a573cfe05a9a77a53984e0846ea9235171","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    auth_url\u003dos.environ[\u0027OS_AUTH_URL\u0027],"},{"line_number":27,"context_line":"    username\u003dos.environ[\u0027OS_USERNAME\u0027],"},{"line_number":28,"context_line":"    password\u003dos.environ[\u0027OS_PASSWORD\u0027],"},{"line_number":29,"context_line":"    tenant_name\u003dos.environ[\u0027OS_TENANT_NAME\u0027]"},{"line_number":30,"context_line":")"},{"line_number":31,"context_line":"session \u003d keystoneclient.session.Session(auth\u003dauth)"},{"line_number":32,"context_line":"cue_client \u003d client.Client(session\u003dsession)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_9794a537","line":29,"updated":"2015-04-23 21:44:13.000000000","message":"Env variables shouldn\u0027t be used, because they can be just not set (because Rally actually fetch data from it\u0027s own DB). And only command that expects this env variable is \"rally deployment create --fromenv\" - which is actually short cut from ExisctingCloud plugin and is equal to directly passing it. \n\nhttps://github.com/openstack/rally/blob/master/samples/deployments/existing.json","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"},{"author":{"_account_id":13771,"name":"Davide Agnello","email":"dagnello@hp.com","username":"dagnello"},"change_message_id":"296cac4d4a4483f363a1dee2b9842c533da32bbb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    auth_url\u003dos.environ[\u0027OS_AUTH_URL\u0027],"},{"line_number":27,"context_line":"    username\u003dos.environ[\u0027OS_USERNAME\u0027],"},{"line_number":28,"context_line":"    password\u003dos.environ[\u0027OS_PASSWORD\u0027],"},{"line_number":29,"context_line":"    tenant_name\u003dos.environ[\u0027OS_TENANT_NAME\u0027]"},{"line_number":30,"context_line":")"},{"line_number":31,"context_line":"session \u003d keystoneclient.session.Session(auth\u003dauth)"},{"line_number":32,"context_line":"cue_client \u003d client.Client(session\u003dsession)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d16786e7","line":29,"in_reply_to":"bab921fb_9794a537","updated":"2015-04-24 22:39:21.000000000","message":"Done","commit_id":"b921be3ef94ae8f336f9cf08b8356416ac25a1ae"}]}
