)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"8aed67a1f1ffab5fe580e4067e79561c6f119da4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Steve Heyman \u003csteve.heyman@rackspace.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-01 10:45:46 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"POC for api uptime monitoring with Grenade"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This CR presents a POC for monitoring API uptime with grenade.  It"},{"line_number":10,"context_line":"allows a plugin approach where each openstack component can create"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a461143_c1b50632","line":7,"range":{"start_line":7,"start_character":42,"end_line":7,"end_character":42},"updated":"2017-02-01 19:19:03.000000000","message":"nit: Add spec changeId I1344c875e9a0529d10a6177f57c0512ed78032f3","commit_id":"84d45b31ff3b333891d145ebf3722f75021ca0d7"}],"grenade.sh":[{"author":{"_account_id":9152,"name":"Castulo J. Martinez","email":"castulo.martinez@intel.com","username":"cas"},"change_message_id":"9e8dc67c308efe27c118219f49b448e3e547c2bd","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":3,"id":"3a461143_b62f65a6","line":232,"range":{"start_line":232,"start_character":4,"end_line":232,"end_character":41},"updated":"2017-02-01 16:22:45.000000000","message":"Shouldn\u0027t this also check for $RUN_TARGET  \u003d\u003d True? There is no point on doing API uptime validation unless you do an upgrade which includes installing the base and upgrading to target.","commit_id":"5dad521ff15b6bcb6f97b77da8921acfcd01ad86"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"6c92135572ee5760e5b9ea0cee0580f0160c1660","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":3,"id":"3a461143_4908662e","line":232,"range":{"start_line":232,"start_character":4,"end_line":232,"end_character":41},"in_reply_to":"3a461143_b62f65a6","updated":"2017-02-01 16:35:19.000000000","message":"good point.  will be fixed in next CR.","commit_id":"5dad521ff15b6bcb6f97b77da8921acfcd01ad86"},{"author":{"_account_id":19587,"name":"Joshua White","email":"joshua.l.white@intel.com","username":"jwhite"},"change_message_id":"e395454ae3d6050270e9b69c91ab29e0906006b5","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                        $TARGET_DEVSTACK_DIR/localrc \\"},{"line_number":228,"context_line":"                        $TARGET_DEVSTACK_DIR/.localrc.auto"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"},{"line_number":236,"context_line":"    if [[ \"$RUN_TARGET\" \u003d\u003d \"False\" ]]; then"},{"line_number":237,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_TARGET\u003dFalse\""},{"line_number":238,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_TARGET\u003dFalse\""},{"line_number":239,"context_line":"    fi"},{"line_number":240,"context_line":"fi"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"# Run the base install of the environment"},{"line_number":243,"context_line":"if [[ \"$RUN_BASE\" \u003d\u003d \"True\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":5,"id":"3a461143_6be79a12","line":240,"range":{"start_line":230,"start_character":0,"end_line":240,"end_character":2},"updated":"2017-02-02 22:46:39.000000000","message":"Would it make a difference if we added this right before the test is run below?  There may be a reason for it being separate which is why I ask.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"346b25c86857310a5bf28369001da4539ece40f3","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                        $TARGET_DEVSTACK_DIR/localrc \\"},{"line_number":228,"context_line":"                        $TARGET_DEVSTACK_DIR/.localrc.auto"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"},{"line_number":236,"context_line":"    if [[ \"$RUN_TARGET\" \u003d\u003d \"False\" ]]; then"},{"line_number":237,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_TARGET\u003dFalse\""},{"line_number":238,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_TARGET\u003dFalse\""},{"line_number":239,"context_line":"    fi"},{"line_number":240,"context_line":"fi"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"# Run the base install of the environment"},{"line_number":243,"context_line":"if [[ \"$RUN_BASE\" \u003d\u003d \"True\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":5,"id":"1a430d35_74525edf","line":240,"range":{"start_line":230,"start_character":0,"end_line":240,"end_character":2},"in_reply_to":"3a461143_6be79a12","updated":"2017-02-03 00:24:21.000000000","message":"This is just sanity checking the inputs so I figured it should be done ASAP so we can fail fast.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":9152,"name":"Castulo J. Martinez","email":"castulo.martinez@intel.com","username":"cas"},"change_message_id":"149f76b96bd1aa38289904ada6e39efe0a947d63","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    # Cleanup the resources"},{"line_number":375,"context_line":"    resources destroy"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":378,"context_line":"        api_uptime_validation stop_api_uptime_validation"},{"line_number":379,"context_line":"    fi"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"fi"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-sh","patch_set":5,"id":"3a461143_de304d0a","line":379,"range":{"start_line":377,"start_character":4,"end_line":379,"end_character":6},"updated":"2017-02-02 22:23:43.000000000","message":"Why are you turning off API Uptime Validation after Tempest has run and the resources have been cleaned up? Is this the best place? Wouldn\u0027t be more accurate to stop these tests before even Tempest runs after the upgrade? (right after the upgrade finishes)","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"346b25c86857310a5bf28369001da4539ece40f3","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    # Cleanup the resources"},{"line_number":375,"context_line":"    resources destroy"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":378,"context_line":"        api_uptime_validation stop_api_uptime_validation"},{"line_number":379,"context_line":"    fi"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"fi"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-sh","patch_set":5,"id":"1a430d35_f45c8eef","line":379,"range":{"start_line":377,"start_character":4,"end_line":379,"end_character":6},"in_reply_to":"3a461143_ab0342b7","updated":"2017-02-03 00:24:21.000000000","message":"I agree with both of you.  Will be fixed in next patchset.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":19587,"name":"Joshua White","email":"joshua.l.white@intel.com","username":"jwhite"},"change_message_id":"e395454ae3d6050270e9b69c91ab29e0906006b5","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    # Cleanup the resources"},{"line_number":375,"context_line":"    resources destroy"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":378,"context_line":"        api_uptime_validation stop_api_uptime_validation"},{"line_number":379,"context_line":"    fi"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"fi"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-sh","patch_set":5,"id":"3a461143_ab0342b7","line":379,"range":{"start_line":377,"start_character":4,"end_line":379,"end_character":6},"in_reply_to":"3a461143_de304d0a","updated":"2017-02-02 22:46:39.000000000","message":"I agree with Cas.  I think it will be good to stop them before Tempest runs the smoke test since the upgrade is already finished.  Any gaps in downtime at this point would be outside the scope testing.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a41ee0f3dbc3be33a2fe5377197492c88a22c0a7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# ``-b``    Run only the base part"},{"line_number":13,"context_line":"# ``-t``    Run only the target part (assumes a base run is in place)"},{"line_number":14,"context_line":"# ``-q``    Quiet mode"},{"line_number":15,"context_line":"# ``-u``    Run API uptime validation"},{"line_number":16,"context_line":"# ``-s stop-label`` is the name of the step after which the script will stop."},{"line_number":17,"context_line":"# This is useful for debugging upgrades."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_d9d1e758","line":15,"updated":"2017-02-07 20:09:43.000000000","message":"I don\u0027t think this should be an optional component, as it should involve minimal additional resource overhead, the implementation would be simpler if it was unconditional, and most importantly, I think it\u0027s far too important to allow developers to skip it. By simply gathering and communicating these metrics, we\u0027re more likely to see the metrics improved over time (contributors will be more inclined to learn about them and care).","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"15d0d94e09e3f3a9f1e82fe50e21b9a3fad1f880","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# ``-b``    Run only the base part"},{"line_number":13,"context_line":"# ``-t``    Run only the target part (assumes a base run is in place)"},{"line_number":14,"context_line":"# ``-q``    Quiet mode"},{"line_number":15,"context_line":"# ``-u``    Run API uptime validation"},{"line_number":16,"context_line":"# ``-s stop-label`` is the name of the step after which the script will stop."},{"line_number":17,"context_line":"# This is useful for debugging upgrades."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"da36d5c6_dac14d82","line":15,"in_reply_to":"1a430d35_a3e3a532","updated":"2017-02-20 19:39:33.000000000","message":"Done","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"2ca875e5dd6bf86ee8ad3acc2b6417128aff619c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# ``-b``    Run only the base part"},{"line_number":13,"context_line":"# ``-t``    Run only the target part (assumes a base run is in place)"},{"line_number":14,"context_line":"# ``-q``    Quiet mode"},{"line_number":15,"context_line":"# ``-u``    Run API uptime validation"},{"line_number":16,"context_line":"# ``-s stop-label`` is the name of the step after which the script will stop."},{"line_number":17,"context_line":"# This is useful for debugging upgrades."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_a3e3a532","line":15,"in_reply_to":"1a430d35_d9d1e758","updated":"2017-02-09 19:12:55.000000000","message":"Fair point.  I was looking at it from the perspective that we already make base/target optional (for debugging perhaps) so this seemed to fit into that pattern.  I have no problem making it required.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a41ee0f3dbc3be33a2fe5377197492c88a22c0a7","unresolved":false,"context_lines":[{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"},{"line_number":236,"context_line":"    if [[ \"$RUN_TARGET\" \u003d\u003d \"False\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_594df73c","line":233,"updated":"2017-02-07 20:09:43.000000000","message":"I like the error checking (and handy feedback on the bad config), but in the case where it doesn\u0027t make sense to collect metrics, just don\u0027t run them :)","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"2ca875e5dd6bf86ee8ad3acc2b6417128aff619c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"},{"line_number":236,"context_line":"    if [[ \"$RUN_TARGET\" \u003d\u003d \"False\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_9eed1cf2","line":233,"in_reply_to":"1a430d35_594df73c","updated":"2017-02-09 19:12:55.000000000","message":"If we\u0027re not making the uptime testing optional then I can live with this.  Howsabout I put a warning message in, just so someone doesn\u0027t go looking for data and gets upset when its not there?","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"15d0d94e09e3f3a9f1e82fe50e21b9a3fad1f880","unresolved":false,"context_lines":[{"line_number":230,"context_line":"API_UPTIME_VALIDATION\u003d$(trueorfalse False API_UPTIME_VALIDATION)"},{"line_number":231,"context_line":"if [[ \"$API_UPTIME_VALIDATION\" \u003d\u003d \"True\" ]]; then"},{"line_number":232,"context_line":"    if [[ \"$RUN_BASE\" \u003d\u003d \"False\" ]]; then"},{"line_number":233,"context_line":"        echo_summary \"Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":234,"context_line":"        die $LINENO \"Failure in grenade.sh: Cannot run API uptime validation with RUN_BASE\u003dFalse\""},{"line_number":235,"context_line":"    fi"},{"line_number":236,"context_line":"    if [[ \"$RUN_TARGET\" \u003d\u003d \"False\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":6,"id":"da36d5c6_ba72d97a","line":233,"in_reply_to":"1a430d35_9eed1cf2","updated":"2017-02-20 19:39:33.000000000","message":"Thought about this some more and that might be too much handholding.  Will just remove these checks.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"}],"inc/plugin":[{"author":{"_account_id":9152,"name":"Castulo J. Martinez","email":"castulo.martinez@intel.com","username":"cas"},"change_message_id":"9e8dc67c308efe27c118219f49b448e3e547c2bd","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if [[ -z \"$dir\" ]]; then"},{"line_number":134,"context_line":"            die $LINENO \"Couldn\u0027t find project \u0027$project\u0027 in plugin list\""},{"line_number":135,"context_line":"        fi"},{"line_number":136,"context_line":"        local api\u003d$dir/api.sh"},{"line_number":137,"context_line":"        if [[ -e $api ]]; then"},{"line_number":138,"context_line":"            TOP_DIR\u003d$BASE_DEVSTACK_DIR LOGDIR\u003d$LOGDIR \\"},{"line_number":139,"context_line":"                   $api $phase || die $LINENO \"Failed to run ``$api $phase``\""}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3a461143_69752231","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":29},"updated":"2017-02-01 16:22:45.000000000","message":"Isn\u0027t this name a little bit to generic and perhaps misleading?","commit_id":"5dad521ff15b6bcb6f97b77da8921acfcd01ad86"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"6c92135572ee5760e5b9ea0cee0580f0160c1660","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if [[ -z \"$dir\" ]]; then"},{"line_number":134,"context_line":"            die $LINENO \"Couldn\u0027t find project \u0027$project\u0027 in plugin list\""},{"line_number":135,"context_line":"        fi"},{"line_number":136,"context_line":"        local api\u003d$dir/api.sh"},{"line_number":137,"context_line":"        if [[ -e $api ]]; then"},{"line_number":138,"context_line":"            TOP_DIR\u003d$BASE_DEVSTACK_DIR LOGDIR\u003d$LOGDIR \\"},{"line_number":139,"context_line":"                   $api $phase || die $LINENO \"Failed to run ``$api $phase``\""}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3a461143_8c197c7c","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":29},"in_reply_to":"3a461143_69752231","updated":"2017-02-01 16:35:19.000000000","message":"agreed.  will update in next patchset.","commit_id":"5dad521ff15b6bcb6f97b77da8921acfcd01ad86"},{"author":{"_account_id":19587,"name":"Joshua White","email":"joshua.l.white@intel.com","username":"jwhite"},"change_message_id":"e395454ae3d6050270e9b69c91ab29e0906006b5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"function api_uptime_validation {"},{"line_number":125,"context_line":"    # phase is either \"start_api_uptime_validation\" or \"stop_api_uptime_validation\""},{"line_number":126,"context_line":"    local phase\u003d$1"},{"line_number":127,"context_line":"    local project\u003d\"\""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    local projects\u003d$UPGRADE_PROJECTS"},{"line_number":130,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":5,"id":"3a461143_6b95da3e","line":127,"range":{"start_line":127,"start_character":4,"end_line":127,"end_character":20},"updated":"2017-02-02 22:46:39.000000000","message":"This may not be needed since projects is repopulated each time with $UPGRADE_PROJECTS variable.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"346b25c86857310a5bf28369001da4539ece40f3","unresolved":false,"context_lines":[{"line_number":124,"context_line":"function api_uptime_validation {"},{"line_number":125,"context_line":"    # phase is either \"start_api_uptime_validation\" or \"stop_api_uptime_validation\""},{"line_number":126,"context_line":"    local phase\u003d$1"},{"line_number":127,"context_line":"    local project\u003d\"\""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    local projects\u003d$UPGRADE_PROJECTS"},{"line_number":130,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":5,"id":"1a430d35_d425d25c","line":127,"range":{"start_line":127,"start_character":4,"end_line":127,"end_character":20},"in_reply_to":"3a461143_6b95da3e","updated":"2017-02-03 00:24:21.000000000","message":"its the loop control variable (note its the singular version) but you are correct that this isn\u0027t needed since we set it on line 131.  Fixed in next patchset.","commit_id":"975cbdf7d99c65a97d572fb3788a378316053492"}],"projects/10_keystone/api_uptime.sh":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"abf2c5708b162842eff90397c253aee10d0df391","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # This is the meat of this script.  Loop issuing curl calls to the keystone"},{"line_number":103,"context_line":"    # API.  We have selected the get user info call since it doesn\u0027t require"},{"line_number":104,"context_line":"    # any special roles"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    counter\u003d1"},{"line_number":107,"context_line":"    while true"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_5478fd2b","line":104,"updated":"2017-02-09 17:14:21.000000000","message":"I\u0027d actually suggest sticking with token creation \u0026 validation, since it exercises far more of the meat of keystone to demonstrate that it\u0027s up. If you have two keystone\u0027s behind a load balancer, and you consistently generate \u0026 validate tokens, you\u0027re also ensuring compatibility and consistency of configuration between both services.\n\nThat said, validating tokens does require extra authorization, so I\u0027d at least suggest authenticating over and over instead instead of bothering with the get-user call. With Fernet tokens, there\u0027s no reason not to.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"2ca875e5dd6bf86ee8ad3acc2b6417128aff619c","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # This is the meat of this script.  Loop issuing curl calls to the keystone"},{"line_number":103,"context_line":"    # API.  We have selected the get user info call since it doesn\u0027t require"},{"line_number":104,"context_line":"    # any special roles"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    counter\u003d1"},{"line_number":107,"context_line":"    while true"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_3e942843","line":104,"in_reply_to":"1a430d35_5478fd2b","updated":"2017-02-09 19:12:55.000000000","message":"Thanks, I like this idea.  Will make the change.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"abf2c5708b162842eff90397c253aee10d0df391","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        do"},{"line_number":109,"context_line":"        echo \"$counter: $LINE\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":110,"context_line":"        curl -s -H \"X-Auth-Token:$TOKEN\" http://localhost:5000/v3/users/$USERID \u003e\u003e {{RESULTS_FILE}}"},{"line_number":111,"context_line":"        echo \"------\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":112,"context_line":"        sleep 1s"},{"line_number":113,"context_line":"        counter\u003d$((counter+1))"},{"line_number":114,"context_line":"        done"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_d47ceded","line":111,"updated":"2017-02-09 17:14:21.000000000","message":"This is going to produce a LOT of results, especially over long running upgrades. Instead, just count successful response codes. If $counter !\u003d $successful_response_codes then there was an outage, and the ratio shows our availability. I don\u0027t think we need anything more than that until we start testing for performance impact. In that case, you can truncate the results file each round, and just store the evaluated availability ratio.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"2ca875e5dd6bf86ee8ad3acc2b6417128aff619c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        do"},{"line_number":109,"context_line":"        echo \"$counter: $LINE\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":110,"context_line":"        curl -s -H \"X-Auth-Token:$TOKEN\" http://localhost:5000/v3/users/$USERID \u003e\u003e {{RESULTS_FILE}}"},{"line_number":111,"context_line":"        echo \"------\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":112,"context_line":"        sleep 1s"},{"line_number":113,"context_line":"        counter\u003d$((counter+1))"},{"line_number":114,"context_line":"        done"}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_9e9b5c72","line":111,"in_reply_to":"1a430d35_d47ceded","updated":"2017-02-09 19:12:55.000000000","message":"Sure!","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a41ee0f3dbc3be33a2fe5377197492c88a22c0a7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        echo \"$counter: $LINE\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":110,"context_line":"        curl -s -H \"X-Auth-Token:$TOKEN\" http://localhost:5000/v3/users/$USERID \u003e\u003e {{RESULTS_FILE}}"},{"line_number":111,"context_line":"        echo \"------\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":112,"context_line":"        sleep 1s"},{"line_number":113,"context_line":"        counter\u003d$((counter+1))"},{"line_number":114,"context_line":"        done"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_19244f5e","line":112,"updated":"2017-02-07 20:09:43.000000000","message":"The granularity here is notable, in that services can (for example) restart within a second and we\u0027ll never notice the downtime, possibly leading to false negatives (showing no downtime when there was downtime). Is there any reason not to hammer the service as fast as a single threaded client is capable? (I\u0027d be opposed to using concurrency here, because the goal is not to load test and therefore invoke failures, just to poke for normal availability).","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"abf2c5708b162842eff90397c253aee10d0df391","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        echo \"$counter: $LINE\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":110,"context_line":"        curl -s -H \"X-Auth-Token:$TOKEN\" http://localhost:5000/v3/users/$USERID \u003e\u003e {{RESULTS_FILE}}"},{"line_number":111,"context_line":"        echo \"------\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":112,"context_line":"        sleep 1s"},{"line_number":113,"context_line":"        counter\u003d$((counter+1))"},{"line_number":114,"context_line":"        done"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_74f17995","line":112,"in_reply_to":"1a430d35_19244f5e","updated":"2017-02-09 17:14:21.000000000","message":"The more I think about this sleep, the more I\u0027d rather see it removed for the reasoning stated above.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"},{"author":{"_account_id":9234,"name":"Steve Heyman","email":"steve@heyman.com","username":"hockeynut"},"change_message_id":"2ca875e5dd6bf86ee8ad3acc2b6417128aff619c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        echo \"$counter: $LINE\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":110,"context_line":"        curl -s -H \"X-Auth-Token:$TOKEN\" http://localhost:5000/v3/users/$USERID \u003e\u003e {{RESULTS_FILE}}"},{"line_number":111,"context_line":"        echo \"------\" \u003e\u003e {{RESULTS_FILE}}"},{"line_number":112,"context_line":"        sleep 1s"},{"line_number":113,"context_line":"        counter\u003d$((counter+1))"},{"line_number":114,"context_line":"        done"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-sh","patch_set":6,"id":"1a430d35_3e7b482b","line":112,"in_reply_to":"1a430d35_74f17995","updated":"2017-02-09 19:12:55.000000000","message":"Agreed.","commit_id":"57d0f1c5596325554fb1ac6384c04d1cc5a7bdfe"}]}
