)]}'
{".testr.conf":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c68f9ae103017db9cde339ba9f789b7849846666","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"test_command\u003dOS_STDOUT_CAPTURE\u003d${OS_STDOUT_CAPTURE:-1} \\"},{"line_number":3,"context_line":"             OS_STDERR_CAPTURE\u003d${OS_STDERR_CAPTURE:-1} \\"},{"line_number":4,"context_line":"             OS_TEST_TIMEOUT\u003d${OS_TEST_TIMEOUT:-160} \\"},{"line_number":5,"context_line":"             OS_DEBUG\u003d${OS_DEBUG:-TRACE} \\"}],"source_content_type":"text/plain","patch_set":46,"id":"dab17558_586b6385","line":2,"updated":"2016-05-10 10:47:54.000000000","message":"That\u0027s a good idea but has nothing to do in this patch","commit_id":"45da0b17330f17d0a5a1d8a041f77b8ed2d916cf"}],"/COMMIT_MSG":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6ba7fc4f11bc6f50a1cc68e5deab726426d5e66b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP : Add Consul Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add Consul Driver. This driver makes use of python-consul client to"},{"line_number":10,"context_line":"interact with Consul."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6064383e9db4e90fd16f17065bd7b0934ca7e125"},{"line_number":13,"context_line":"Implements: bp add-consul-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_9699de21","line":10,"updated":"2015-11-18 01:37:16.000000000","message":"Add the following so that this works out better:\n\n  Depends-On: I4f57a2f37f268a66b29b81a9401c1a2edba1fe7a","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP : Add Consul Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add Consul Driver. This driver makes use of python-consul client to"},{"line_number":10,"context_line":"interact with Consul."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6064383e9db4e90fd16f17065bd7b0934ca7e125"},{"line_number":13,"context_line":"Implements: bp add-consul-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_c2b3f298","line":10,"in_reply_to":"ba8a016a_9699de21","updated":"2015-11-19 02:21:45.000000000","message":"Done","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"}],"requirements.txt":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":14,"context_line":"futurist\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils!\u003d2.6.0,\u003e\u003d2.4.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.serialization\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":17,"context_line":"python-consul\u003e\u003d0.5.2"}],"source_content_type":"text/plain","patch_set":1,"id":"da85f559_e6c53f3d","line":17,"updated":"2015-11-14 16:49:08.000000000","message":"You are going to have to submit this to:\n\nhttps://github.com/openstack/requirements","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"futurist\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils!\u003d2.6.0,\u003e\u003d2.4.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.serialization\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":17,"context_line":"python-consul\u003e\u003d0.5.2"}],"source_content_type":"text/plain","patch_set":1,"id":"ba8a016a_d9e1e3d1","line":17,"in_reply_to":"da85f559_e6c53f3d","updated":"2015-11-17 21:36:26.000000000","message":"submitted patch https://review.openstack.org/#/c/246021/","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"4e9be83fe2d1df750bdec886783b7c06819db546","unresolved":false,"context_lines":[{"line_number":14,"context_line":"futurist\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils!\u003d2.6.0,\u003e\u003d2.4.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.serialization\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":17,"context_line":"python-consul\u003e\u003d0.4.7 # MIT License "}],"source_content_type":"text/plain","patch_set":10,"id":"9a8ffd7b_8499a621","line":17,"updated":"2015-11-26 05:38:12.000000000","message":"Just a TODO thing.. whitespace here","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":14,"context_line":"futurist\u003e\u003d0.1.2 # Apache-2.0"},{"line_number":15,"context_line":"oslo.utils!\u003d2.6.0,\u003e\u003d2.4.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.serialization\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":17,"context_line":"python-consul\u003e\u003d0.4.7 # MIT License "}],"source_content_type":"text/plain","patch_set":10,"id":"9a8ffd7b_8da74f4f","line":17,"in_reply_to":"9a8ffd7b_8499a621","updated":"2015-12-08 03:39:18.000000000","message":"Done","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c68f9ae103017db9cde339ba9f789b7849846666","unresolved":false,"context_lines":[{"line_number":18,"context_line":"oslo.serialization\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":19,"context_line":"requests!\u003d2.9.0,\u003e\u003d2.8.1 # Apache-2.0"},{"line_number":20,"context_line":"python-consul\u003e\u003d0.4.7 # MIT License"},{"line_number":21,"context_line":""}],"source_content_type":"text/plain","patch_set":46,"id":"dab17558_98078bc9","line":21,"updated":"2016-05-10 10:47:54.000000000","message":"empty line","commit_id":"45da0b17330f17d0a5a1d8a041f77b8ed2d916cf"}],"setup-consul-env.sh":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"trap \"clean_exit\" EXIT"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"cd $CONSUL_BIN_DIR"},{"line_number":21,"context_line":"wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":22,"context_line":"unzip consul_0.6.0_linux_amd64.zip"},{"line_number":23,"context_line":"PATH\u003d$PATH:$CONSUL_BIN_DIR"},{"line_number":24,"context_line":"export PATH"}],"source_content_type":"text/x-sh","patch_set":15,"id":"5a710552_75cfa57f","line":21,"updated":"2015-12-16 03:18:52.000000000","message":"This really isn\u0027t suitable for inclusion in gate jobs: I think infra need to be looped in on this.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6e466c76e63ce38e031c5d794433a4718c9e8bfd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"export PATH"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"consul_exe\u003d$(which consul || true)"},{"line_number":27,"context_line":"if [ -n \"$consul_exe\" ]; then"},{"line_number":28,"context_line":"    $consul_exe agent -server -bootstrap-expect 1 -data-dir $CONSUL_TMP_DIR -node\u003dagent-one -bind\u003d127.0.0.1 \u0026"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"7a740942_1cefd31e","line":27,"updated":"2015-12-09 06:47:39.000000000","message":"Should this exit 1 if consul is not found?","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":24,"context_line":"export PATH"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"consul_exe\u003d$(which consul || true)"},{"line_number":27,"context_line":"if [ -n \"$consul_exe\" ]; then"},{"line_number":28,"context_line":"    $consul_exe agent -server -bootstrap-expect 1 -data-dir $CONSUL_TMP_DIR -node\u003dagent-one -bind\u003d127.0.0.1 \u0026"},{"line_number":29,"context_line":"fi"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"5a710552_9f08302f","line":27,"in_reply_to":"7a740942_1cefd31e","updated":"2015-12-16 02:08:11.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d89b2fc794aaae7dcd6d65ecb16e87b74b7a8a12","unresolved":false,"context_lines":[{"line_number":18,"context_line":"trap \"clean_exit\" EXIT"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"cd $CONSUL_BIN_DIR"},{"line_number":21,"context_line":"wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":22,"context_line":"unzip consul_0.6.0_linux_amd64.zip"},{"line_number":23,"context_line":"PATH\u003d$PATH:$CONSUL_BIN_DIR"},{"line_number":24,"context_line":"export PATH"}],"source_content_type":"text/x-sh","patch_set":19,"id":"1a7b0d38_b6295739","line":21,"updated":"2015-12-28 12:56:24.000000000","message":"I understand we have to do that on some system, but on some, no. So please at least check that consul is not installed before doing that blindly. Let\u0027s be a bit sane.","commit_id":"af4f7b5f8a5c4df9b2561fa6c61977b97289592a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"64e5b51739418e82a4fdc93a0bf825180926ea92","unresolved":false,"context_lines":[{"line_number":18,"context_line":"trap \"clean_exit\" EXIT"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"cd $CONSUL_BIN_DIR"},{"line_number":21,"context_line":"wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":22,"context_line":"unzip consul_0.6.0_linux_amd64.zip"},{"line_number":23,"context_line":"PATH\u003d$PATH:$CONSUL_BIN_DIR"},{"line_number":24,"context_line":"export PATH"}],"source_content_type":"text/x-sh","patch_set":19,"id":"fa69d971_7dc3e3ed","line":21,"in_reply_to":"1a7b0d38_b6295739","updated":"2016-01-04 22:17:39.000000000","message":"Done","commit_id":"af4f7b5f8a5c4df9b2561fa6c61977b97289592a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"set -x -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"CONSUL_BIN_DIR\u003d$(mktemp -d /tmp/CONSUL-BIN-XXXXX)"},{"line_number":5,"context_line":"CONSUL_TMP_DIR\u003d$(mktemp -d /tmp/CONSUL-TMP-XXXXX)"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"function clean_exit(){"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_afb7c8f3","line":4,"updated":"2016-01-05 12:46:26.000000000","message":"Please use -t rather than hard coding /tmp","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"set -x -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"CONSUL_BIN_DIR\u003d$(mktemp -d /tmp/CONSUL-BIN-XXXXX)"},{"line_number":5,"context_line":"CONSUL_TMP_DIR\u003d$(mktemp -d /tmp/CONSUL-TMP-XXXXX)"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"function clean_exit(){"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_154fe16b","line":4,"in_reply_to":"fa69d971_afb7c8f3","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    local error_code\u003d\"$?\""},{"line_number":9,"context_line":"    local spawned\u003d$(jobs -p)"},{"line_number":10,"context_line":"    if [ -n \"$spawned\" ]; then"},{"line_number":11,"context_line":"        kill $(jobs -p)"},{"line_number":12,"context_line":"    fi"},{"line_number":13,"context_line":"    rm -rf ${CONSUL_TMP_DIR}"},{"line_number":14,"context_line":"    rm -rf ${CONSUL_BIN_DIR}"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_d228a388","line":11,"updated":"2016-01-05 12:46:26.000000000","message":"kill $spawned","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    local error_code\u003d\"$?\""},{"line_number":9,"context_line":"    local spawned\u003d$(jobs -p)"},{"line_number":10,"context_line":"    if [ -n \"$spawned\" ]; then"},{"line_number":11,"context_line":"        kill $(jobs -p)"},{"line_number":12,"context_line":"    fi"},{"line_number":13,"context_line":"    rm -rf ${CONSUL_TMP_DIR}"},{"line_number":14,"context_line":"    rm -rf ${CONSUL_BIN_DIR}"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_15284185","line":11,"in_reply_to":"fa69d971_d228a388","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"CURRENT\u003d`pwd`"},{"line_number":21,"context_line":"if [ ! -x \"$(which consul)\" ]; then"},{"line_number":22,"context_line":"    cd $CONSUL_BIN_DIR"},{"line_number":23,"context_line":"    wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":24,"context_line":"    unzip consul_0.6.0_linux_amd64.zip"},{"line_number":25,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_12615bd3","line":22,"updated":"2016-01-05 12:46:26.000000000","message":"You don\u0027t need to use cd, just wget/curl in the right place.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"CURRENT\u003d`pwd`"},{"line_number":21,"context_line":"if [ ! -x \"$(which consul)\" ]; then"},{"line_number":22,"context_line":"    cd $CONSUL_BIN_DIR"},{"line_number":23,"context_line":"    wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":24,"context_line":"    unzip consul_0.6.0_linux_amd64.zip"},{"line_number":25,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_d5794983","line":22,"in_reply_to":"fa69d971_12615bd3","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":20,"context_line":"CURRENT\u003d`pwd`"},{"line_number":21,"context_line":"if [ ! -x \"$(which consul)\" ]; then"},{"line_number":22,"context_line":"    cd $CONSUL_BIN_DIR"},{"line_number":23,"context_line":"    wget https://releases.hashicorp.com/consul/0.6.0/consul_0.6.0_linux_amd64.zip"},{"line_number":24,"context_line":"    unzip consul_0.6.0_linux_amd64.zip"},{"line_number":25,"context_line":"fi"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-sh","patch_set":22,"id":"fa69d971_f27b678a","line":23,"updated":"2016-01-05 12:46:26.000000000","message":"Please support other os than Linux.\n\nSee how it\u0027s done for etcd. :)","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"d027ce66a0d82986b02fdec4f374c2b1e55214ed","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    unzip $CONSUL_BIN_DIR/consul_0.5.0_linux_amd64.zip -d $CONSUL_BIN_DIR"},{"line_number":34,"context_line":"fi"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"echo \u0027Already installed\u0027"},{"line_number":37,"context_line":"PATH\u003d$PATH:$CONSUL_BIN_DIR"},{"line_number":38,"context_line":"export PATH"},{"line_number":39,"context_line":"consul_exe\u003d$(which consul || true)"}],"source_content_type":"text/x-sh","patch_set":30,"id":"7a5de9d1_c0efdbae","line":36,"updated":"2016-01-28 01:52:58.000000000","message":"This isn\u0027t quite the right place to echo this btw.","commit_id":"80a9292b5247d9959fc832c166f994cde431479a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d5c4e23ecd8dac06153920bd0f2e826563bba946","unresolved":false,"context_lines":[{"line_number":2,"context_line":"set -x -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"CONSUL_BIN_DIR\u003d/tmp/consul-bin"},{"line_number":5,"context_line":"CONSUL_TMP_DIR\u003d/tmp/consul-temp"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ ! -e $CONSUL_BIN_DIR ]]; then"},{"line_number":8,"context_line":"    mkdir $CONSUL_BIN_DIR"}],"source_content_type":"text/x-sh","patch_set":33,"id":"7a5de9d1_3ba33651","line":5,"updated":"2016-01-29 09:48:06.000000000","message":"MY EYES\n\ni\u0027ll replace that with overtest so I\u0027m going to close my eyes here…","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3aa23f07c50d58696262dfc57c159eaa4efee6a6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"set -x -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"CONSUL_BIN_DIR\u003d/tmp/consul-bin"},{"line_number":5,"context_line":"CONSUL_TMP_DIR\u003d/tmp/consul-temp"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"if [[ ! -e $CONSUL_BIN_DIR ]]; then"},{"line_number":8,"context_line":"    mkdir $CONSUL_BIN_DIR"}],"source_content_type":"text/x-sh","patch_set":33,"id":"7a5de9d1_4bcde464","line":5,"in_reply_to":"7a5de9d1_3ba33651","updated":"2016-01-29 19:18:47.000000000","message":"tried this to get consul tests working. There was a problem reported initially by jenkins when mktemp was used and to overcome it tried to provide hardcoded path.","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d5c4e23ecd8dac06153920bd0f2e826563bba946","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"$consul_exe agent -server -bootstrap-expect 1 -data-dir $CONSUL_TMP_DIR -node\u003dagent-one -bind\u003d127.0.0.1 \u0026"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"sleep 10"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"export TOOZ_TEST_CONSUL_URL\u003d\"consul://localhost:8500/v1\""},{"line_number":50,"context_line":"cd $CURRENT"}],"source_content_type":"text/x-sh","patch_set":33,"id":"7a5de9d1_7bc0cee0","line":47,"updated":"2016-01-29 09:48:06.000000000","message":"OMG","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3aa23f07c50d58696262dfc57c159eaa4efee6a6","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"$consul_exe agent -server -bootstrap-expect 1 -data-dir $CONSUL_TMP_DIR -node\u003dagent-one -bind\u003d127.0.0.1 \u0026"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"sleep 10"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"export TOOZ_TEST_CONSUL_URL\u003d\"consul://localhost:8500/v1\""},{"line_number":50,"context_line":"cd $CURRENT"}],"source_content_type":"text/x-sh","patch_set":33,"id":"7a5de9d1_8bfc3c73","line":47,"in_reply_to":"7a5de9d1_7bc0cee0","updated":"2016-01-29 19:18:47.000000000","message":"saw problem when trying to use curl with the consul url thought the server is not up before the commands are run. So thought to introduce some delay so that the server is up and commands are run later.","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"}],"tooz/drivers/consul.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._node \u003d node"},{"line_number":32,"context_line":"        self._address \u003d address"},{"line_number":33,"context_line":"        self._session \u003d session"},{"line_number":34,"context_line":"        self._value \u003d value"},{"line_number":35,"context_line":"        self.client \u003d ConsulDriver.make_client()"},{"line_number":36,"context_line":"        self.acquired \u003d False"},{"line_number":37,"context_line":"        self.session_id \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_46dd2b13","line":34,"updated":"2015-11-14 16:49:08.000000000","message":"Why not just pass the client from the coordinator into __init__ here, therefore not creating a new client for every lock.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._node \u003d node"},{"line_number":32,"context_line":"        self._address \u003d address"},{"line_number":33,"context_line":"        self._session \u003d session"},{"line_number":34,"context_line":"        self._value \u003d value"},{"line_number":35,"context_line":"        self.client \u003d ConsulDriver.make_client()"},{"line_number":36,"context_line":"        self.acquired \u003d False"},{"line_number":37,"context_line":"        self.session_id \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_878d7133","line":34,"in_reply_to":"da85f559_46dd2b13","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.session_id \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_06e723e5","line":40,"updated":"2015-11-14 16:49:08.000000000","message":"Shouldn\u0027t this be done in the coordinator start() method?","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.session_id \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_27828501","line":40,"in_reply_to":"da85f559_06e723e5","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.session_id \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_4631ab0a","line":40,"in_reply_to":"da85f559_06e723e5","updated":"2015-11-14 18:18:22.000000000","message":"yes I agree with Josh, this is part of the coordinator presence management, not the lock.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.session_id \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_4787890f","line":40,"in_reply_to":"da85f559_4631ab0a","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_26ea67ad","line":41,"updated":"2015-11-14 16:49:08.000000000","message":"Same as above, why create a new session identifier? Is this needed?","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_e77c7d22","line":41,"in_reply_to":"da85f559_26ea67ad","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_4618cb84","line":41,"in_reply_to":"da85f559_26ea67ad","updated":"2015-11-14 18:18:22.000000000","message":"https://www.consul.io/docs/internals/sessions.html suggests you really only ever want one session, so yeah, this goes in the coordinator.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":40,"context_line":"        self.client.catalog.register(self._node, self._address)"},{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_077ae124","line":41,"in_reply_to":"da85f559_4618cb84","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":45,"context_line":"                                           flags\u003dNone, acquire\u003dself.session_id,"},{"line_number":46,"context_line":"                                           release\u003dNone, token\u003dNone, dc\u003dNone)"},{"line_number":47,"context_line":"        return self.acquired"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_c6d11bfd","line":44,"updated":"2015-11-14 16:49:08.000000000","message":"So if blocking is true you probably want to keep on retrying here right?","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":45,"context_line":"                                           flags\u003dNone, acquire\u003dself.session_id,"},{"line_number":46,"context_line":"                                           release\u003dNone, token\u003dNone, dc\u003dNone)"},{"line_number":47,"context_line":"        return self.acquired"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_799a3765","line":44,"in_reply_to":"ba8a016a_4423d205","updated":"2015-11-17 21:36:26.000000000","message":"Thanks for your feedback. I did think along similar lines yesterday https://gist.github.com/vilobhmm/b65bec1ebb58b6bb59e9 but have tried to make it better in next patch. Please check patch #2.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"722c663396372eaa7bc5f9efd1a612207144dacd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":45,"context_line":"                                           flags\u003dNone, acquire\u003dself.session_id,"},{"line_number":46,"context_line":"                                           release\u003dNone, token\u003dNone, dc\u003dNone)"},{"line_number":47,"context_line":"        return self.acquired"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_4423d205","line":44,"in_reply_to":"da85f559_61bdb9d6","updated":"2015-11-17 19:14:12.000000000","message":"I had to look at this sideways with vilobhmm\u0027s help. put does not actually return an index, and in fact the only way to get an index for blocking is to read once without one. UGH. This explains why one cannot do fair locking with consul, since in the time between trying to acquire, and getting, other users could acquire the lock and you\u0027d be left spinning forever trying to acquire.\n\nSo it should look slightly different, like this:\n\nindex \u003d None\nwhile not self.acquired:\n    self.acquired \u003d self.client.kv.put(...)\n    if self.acquired or not blocking:\n        break\n    index, contents \u003d self.client.kv.get(..., index\u003dindex)","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        session_identifier \u003d self.client.session.create(self._session,"},{"line_number":42,"context_line":"                                                        self._node)"},{"line_number":43,"context_line":"        self.session_id \u003d session_identifier"},{"line_number":44,"context_line":"        self.acquired \u003d self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":45,"context_line":"                                           flags\u003dNone, acquire\u003dself.session_id,"},{"line_number":46,"context_line":"                                           release\u003dNone, token\u003dNone, dc\u003dNone)"},{"line_number":47,"context_line":"        return self.acquired"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_61bdb9d6","line":44,"in_reply_to":"da85f559_c6d11bfd","updated":"2015-11-14 18:18:22.000000000","message":"cas and acquire are mutually exclusive. Do not set cas at all.\n\nhttps://www.consul.io/docs/agent/http/kv.html\n\nAlso, kv.put will return X-Consul-Index, so any puts need to receive that as a tuple with the result.\n\nAlso when blocking \u003d True, you do need to do a loop, something like this:\n\n    while not self.acquired:\n        index, self.acquired \u003d self.client.kv.put(...)\n        if self.acquired or not blocking:\n            break\n        index, contents \u003d self.client.kg.get(..., index\u003dindex)","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def release(self):"},{"line_number":50,"context_line":"        if self.acquired:"},{"line_number":51,"context_line":"            self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":52,"context_line":"                               flags\u003dNone, acquire\u003dNone,"},{"line_number":53,"context_line":"                               release\u003dself.session_id, token\u003dNone, dc\u003dNone)"},{"line_number":54,"context_line":"            self.acquired \u003d False"},{"line_number":55,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e6cc5f63","line":52,"updated":"2015-11-14 16:49:08.000000000","message":"What does the cas value do here, do u need it?","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def release(self):"},{"line_number":50,"context_line":"        if self.acquired:"},{"line_number":51,"context_line":"            self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":52,"context_line":"                               flags\u003dNone, acquire\u003dNone,"},{"line_number":53,"context_line":"                               release\u003dself.session_id, token\u003dNone, dc\u003dNone)"},{"line_number":54,"context_line":"            self.acquired \u003d False"},{"line_number":55,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_999d9b5b","line":52,"in_reply_to":"da85f559_e1c9a97a","updated":"2015-11-17 21:36:26.000000000","message":"Sure. Please check patch #2","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def release(self):"},{"line_number":50,"context_line":"        if self.acquired:"},{"line_number":51,"context_line":"            self.client.kv.put(self._name, self._value, cas\u003d0,"},{"line_number":52,"context_line":"                               flags\u003dNone, acquire\u003dNone,"},{"line_number":53,"context_line":"                               release\u003dself.session_id, token\u003dNone, dc\u003dNone)"},{"line_number":54,"context_line":"            self.acquired \u003d False"},{"line_number":55,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e1c9a97a","line":52,"in_reply_to":"da85f559_e6cc5f63","updated":"2015-11-14 18:18:22.000000000","message":"No. CAS is for when you actually do want to do a check-and-set. acquire and cas do not need to appear when you\u0027re doing a release. I also don\u0027t think you need token or dc here.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a712af6763706972c5d5898ceb20c48454f22cde","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, parsed_url, options):"},{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_a6d657ef","line":69,"updated":"2015-11-14 16:49:08.000000000","message":"So why are some of these hidden attributes and some aren\u0027t. I\u0027d almost prefer picking hidden or not, and sticking with it (I prefer hidden by default, and exposing as needed; others may not agree with that, but thats my preference).","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, parsed_url, options):"},{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_f9ae2784","line":69,"in_reply_to":"da85f559_21aed198","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, parsed_url, options):"},{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_b9b73fd7","line":69,"in_reply_to":"da85f559_a6d657ef","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, parsed_url, options):"},{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_21aed198","line":69,"in_reply_to":"da85f559_a6d657ef","updated":"2015-11-14 18:18:22.000000000","message":"I prefer that scheme too Josh. And in Tooz driver space.. basically nothing outside what the driver interface defines should be public.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"},{"line_number":73,"context_line":"        self.scheme \u003d options.get(\u0027scheme\u0027, \u0027http\u0027)"},{"line_number":74,"context_line":"        self.consistency \u003d options.get(\u0027consistency\u0027, \u0027default\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e190c950","line":71,"updated":"2015-11-14 18:18:22.000000000","message":"This is not an appropriate default host. I suggest importing socket and using socket.gethostname()","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"},{"line_number":73,"context_line":"        self.scheme \u003d options.get(\u0027scheme\u0027, \u0027http\u0027)"},{"line_number":74,"context_line":"        self.consistency \u003d options.get(\u0027consistency\u0027, \u0027default\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_c104c27f","line":71,"in_reply_to":"da85f559_e190c950","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"},{"line_number":73,"context_line":"        self.scheme \u003d options.get(\u0027scheme\u0027, \u0027http\u0027)"},{"line_number":74,"context_line":"        self.consistency \u003d options.get(\u0027consistency\u0027, \u0027default\u0027)"},{"line_number":75,"context_line":"        self.dc \u003d options(\u0027dc\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_c17ca522","line":72,"updated":"2015-11-14 18:18:22.000000000","message":"This is unused. Also if we mean the port to connect to consul agent on, I don\u0027t think we should be picking a default for that, let the consul client do that.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":70,"context_line":"        self._options \u003d options"},{"line_number":71,"context_line":"        self.host \u003d options.get(\u0027host\u0027, \u0027127.0.0.1\u0027)"},{"line_number":72,"context_line":"        self.port \u003d options.get(\u0027port\u0027, \u00278500\u0027)"},{"line_number":73,"context_line":"        self.scheme \u003d options.get(\u0027scheme\u0027, \u0027http\u0027)"},{"line_number":74,"context_line":"        self.consistency \u003d options.get(\u0027consistency\u0027, \u0027default\u0027)"},{"line_number":75,"context_line":"        self.dc \u003d options(\u0027dc\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_21d90e22","line":72,"in_reply_to":"da85f559_c17ca522","updated":"2015-11-17 21:36:26.000000000","message":"Done","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"cfbffb1edc1f45143b6786a3510b47d7ed3065d4","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            LOG.debug(\"Node is not registered\")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_session(self, session_name, node, checks\u003dNone, lock_delay\u003d15,"},{"line_number":100,"context_line":"                       behavior\u003d\u0027release\u0027, ttl\u003dNone, dc\u003dNone):"},{"line_number":101,"context_line":"        # Create a session"},{"line_number":102,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"},{"line_number":103,"context_line":"                                                        self.host, checks,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_6192994d","line":100,"updated":"2015-11-14 18:18:22.000000000","message":"This isn\u0027t used, and isn\u0027t part of the CoordinationDriver interface.","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3104ef5b12ae5630aac3d8d4ef39cf45222b1dd7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            LOG.debug(\"Node is not registered\")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_session(self, session_name, node, checks\u003dNone, lock_delay\u003d15,"},{"line_number":100,"context_line":"                       behavior\u003d\u0027release\u0027, ttl\u003dNone, dc\u003dNone):"},{"line_number":101,"context_line":"        # Create a session"},{"line_number":102,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"},{"line_number":103,"context_line":"                                                        self.host, checks,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_61ccf689","line":100,"in_reply_to":"da85f559_6192994d","updated":"2015-11-17 21:36:26.000000000","message":"Have made this part of the start method itself in next patch","commit_id":"ac816b49e84627cffe74f90ad68e0f40347ed54f"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d9f723a7ec88b88c4b87e32b3172622d96c911d5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    # Block the request."},{"line_number":59,"context_line":"                    # NB : How will one the blocked request will be picked up"},{"line_number":60,"context_line":"                    #      when the lock is released by the request/session"},{"line_number":61,"context_line":"                    #      needs to be resolved."},{"line_number":62,"context_line":"                    self._client.kv.get(key\u003dself._name, index\u003dindex)"},{"line_number":63,"context_line":"                else:"},{"line_number":64,"context_line":"                    return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_ab2a867c","line":61,"updated":"2015-11-17 22:59:10.000000000","message":"This comment doesn\u0027t parse right. Can you maybe retry to construct the sentence? I don\u0027t know what needs to be resolved.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"544618f5e429ce676a4dda684321731481e4702b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    # Block the request."},{"line_number":59,"context_line":"                    # NB : How will one the blocked request will be picked up"},{"line_number":60,"context_line":"                    #      when the lock is released by the request/session"},{"line_number":61,"context_line":"                    #      needs to be resolved."},{"line_number":62,"context_line":"                    self._client.kv.get(key\u003dself._name, index\u003dindex)"},{"line_number":63,"context_line":"                else:"},{"line_number":64,"context_line":"                    return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_75af9394","line":61,"in_reply_to":"ba8a016a_ab2a867c","updated":"2015-11-18 01:01:15.000000000","message":"sure updated","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d9f723a7ec88b88c4b87e32b3172622d96c911d5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    # NB : How will one the blocked request will be picked up"},{"line_number":60,"context_line":"                    #      when the lock is released by the request/session"},{"line_number":61,"context_line":"                    #      needs to be resolved."},{"line_number":62,"context_line":"                    self._client.kv.get(key\u003dself._name, index\u003dindex)"},{"line_number":63,"context_line":"                else:"},{"line_number":64,"context_line":"                    return False"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_8bbd426a","line":62,"updated":"2015-11-17 22:59:10.000000000","message":"I believe doing two gets is unnecessary. Just pass in index\u003dindex on all reads. The first one will have None for the index, and thus should behave as if it was not passed and fetch the current state without blocking.\n\nAs far as the contents, I believe we should skip the PUT if the contents return a session ID, since that means the lock is not available, there\u0027s no point in trying the PUT then.\n\nSo something like this maybe:\n\n    index \u003d None\n    owner \u003d None\n    while not self.acquired:\n        if owner is None:\n            self.acquired \u003d self._client.kv.put(...)\n        if self.acquired or not blocking:\n            break\n        else:\n            index, contents \u003d self._client.kv.get(key\u003dself._name, index\u003dindex)\n            owner \u003d contents.get(\u0027Session\u0027)\n     return self.acquired","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"544618f5e429ce676a4dda684321731481e4702b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    # NB : How will one the blocked request will be picked up"},{"line_number":60,"context_line":"                    #      when the lock is released by the request/session"},{"line_number":61,"context_line":"                    #      needs to be resolved."},{"line_number":62,"context_line":"                    self._client.kv.get(key\u003dself._name, index\u003dindex)"},{"line_number":63,"context_line":"                else:"},{"line_number":64,"context_line":"                    return False"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_9589d728","line":62,"in_reply_to":"ba8a016a_8bbd426a","updated":"2015-11-18 01:01:15.000000000","message":"Makes sense. Updated please check next patch","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d9f723a7ec88b88c4b87e32b3172622d96c911d5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # Release the acquired lock."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        output \u003d False"},{"line_number":70,"context_line":"        if self.acquired:"},{"line_number":71,"context_line":"            output \u003d self.client.kv.put(self._name, self._value,"},{"line_number":72,"context_line":"                                        release\u003dself._session_id)"},{"line_number":73,"context_line":"            if output:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_4e0a0823","line":70,"updated":"2015-11-17 22:59:10.000000000","message":"I believe right here we need to first verify we still own the lock by getting it, and comparing the contents[\u0027Session\u0027] with our own session ID. If we don\u0027t have it, that means it was broken somehow, and so we need to set acquired back to False and return True.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"544618f5e429ce676a4dda684321731481e4702b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # Release the acquired lock."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        output \u003d False"},{"line_number":70,"context_line":"        if self.acquired:"},{"line_number":71,"context_line":"            output \u003d self.client.kv.put(self._name, self._value,"},{"line_number":72,"context_line":"                                        release\u003dself._session_id)"},{"line_number":73,"context_line":"            if output:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_909c85c1","line":70,"in_reply_to":"ba8a016a_4e0a0823","updated":"2015-11-18 01:01:15.000000000","message":"Sure but IMHO only the request/session that acquired the lock will be able to release it. I guess when you mean broken somehow it seems like more of a timeout issue or something because of which the session is no more valid or the lock is dropped abruptly. If not please clarify.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d9f723a7ec88b88c4b87e32b3172622d96c911d5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # Construct a session name"},{"line_number":116,"context_line":"        session_name \u003d \u0027session\u0027"},{"line_number":117,"context_line":"        for i in range(11):"},{"line_number":118,"context_line":"            session_name +\u003d \u0027i\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create a session"},{"line_number":121,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_0e9880bf","line":118,"updated":"2015-11-17 22:59:10.000000000","message":"I don\u0027t understand this code at all. Do you want it to be random  or something? This will make every session named \"sessioniiiiiiiiiii\". Anyway, seems like this should be something tooz has in its API to let each coordinator be named when created. This is likely a human-useful piece of text when debugging things, so having something logical here passed in by developer (plus some kind of number or uuid) would make some sense.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"544618f5e429ce676a4dda684321731481e4702b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        # Construct a session name"},{"line_number":116,"context_line":"        session_name \u003d \u0027session\u0027"},{"line_number":117,"context_line":"        for i in range(11):"},{"line_number":118,"context_line":"            session_name +\u003d \u0027i\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create a session"},{"line_number":121,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_5027fd63","line":118,"in_reply_to":"ba8a016a_0e9880bf","updated":"2015-11-18 01:01:15.000000000","message":"sure. The intention here was to construct session_name on the fly since session_id is what we are interested in but I agree that can be useful for debugging.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d9f723a7ec88b88c4b87e32b3172622d96c911d5","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create a session"},{"line_number":121,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"},{"line_number":122,"context_line":"                                                        self._node)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self._session_id \u003d session_identifier"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_ce1b581a","line":122,"updated":"2015-11-17 22:59:10.000000000","message":"total nitpick, but just self._session_id, and return self._session_id ??","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"544618f5e429ce676a4dda684321731481e4702b","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create a session"},{"line_number":121,"context_line":"        session_identifier \u003d self.client.session.create(session_name,"},{"line_number":122,"context_line":"                                                        self._node)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self._session_id \u003d session_identifier"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_705c81ed","line":122,"in_reply_to":"ba8a016a_ce1b581a","updated":"2015-11-18 01:01:15.000000000","message":"Done. Please check patch #3.","commit_id":"a0281f0209f06848c6a13db07c7f28d4ea7b54fd"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2c62951139e5fea567f58df255f1902d17df31ba","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self._options \u003d options"},{"line_number":109,"context_line":"        self.host \u003d socket.gethostname()"},{"line_number":110,"context_line":"        # Construct client with default values"},{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_36d272d3","line":111,"updated":"2015-11-18 01:36:26.000000000","message":"Any reason why these are public attributes?","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self._options \u003d options"},{"line_number":109,"context_line":"        self.host \u003d socket.gethostname()"},{"line_number":110,"context_line":"        # Construct client with default values"},{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_bf3e0789","line":111,"in_reply_to":"ba8a016a_36d272d3","updated":"2015-11-19 02:21:45.000000000","message":"Made it private","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1e32d56f1099c570dce9c4a044617b780fc4e697","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # Construct client with default values"},{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_f66e2a2e","line":113,"updated":"2015-11-18 01:35:58.000000000","message":"Can this be none?","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # Construct client with default values"},{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_df43cb11","line":113,"in_reply_to":"ba8a016a_f66e2a2e","updated":"2015-11-19 02:21:45.000000000","message":"Done","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1e32d56f1099c570dce9c4a044617b780fc4e697","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_d673e613","line":114,"updated":"2015-11-18 01:35:58.000000000","message":"Same with this, is none ok as a value, if not raise a value error before _start() dies imho, instead of failing in _start()","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.client \u003d self.make_client()"},{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_7f4dff3c","line":114,"in_reply_to":"ba8a016a_d673e613","updated":"2015-11-19 02:21:45.000000000","message":"Done","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1e32d56f1099c570dce9c4a044617b780fc4e697","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def make_client(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_565e1677","line":115,"updated":"2015-11-18 01:35:58.000000000","message":"Same question. Is this optional ?","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self._session_id \u003d None"},{"line_number":113,"context_line":"        self._node \u003d self._options.get(\u0027node\u0027)"},{"line_number":114,"context_line":"        self._address \u003d self._options.get(\u0027address\u0027)"},{"line_number":115,"context_line":"        self._session_name \u003d self._options.get(\u0027session\u0027)"},{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def make_client(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_3f53f7e3","line":115,"in_reply_to":"ba8a016a_565e1677","updated":"2015-11-19 02:21:45.000000000","message":"Done","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bdc991f88e77c191d3dc0c6da01c865ac25391eb","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def make_client(self):"},{"line_number":119,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        return consul.Consul()"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_f6270a10","line":119,"updated":"2015-11-18 01:33:53.000000000","message":"make this a staticmethod?","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def make_client(self):"},{"line_number":119,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        return consul.Consul()"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_3fef77ea","line":119,"in_reply_to":"ba8a016a_f6270a10","updated":"2015-11-19 02:21:45.000000000","message":"Done","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1e32d56f1099c570dce9c4a044617b780fc4e697","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        lpaths \u003d []"},{"line_number":159,"context_line":"        for arg in args:"},{"line_number":160,"context_line":"            lpaths.append(arg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        return lpaths"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_f655ca4f","line":161,"updated":"2015-11-18 01:35:58.000000000","message":"Is supposed to be something like \"/\".join(lpaths) ? or is it really supposed to return a list that isn\u0027t joined?","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"26b3e360d6cefe788dfbb0ad2fa8ad96cf2cae5d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        lpaths \u003d []"},{"line_number":159,"context_line":"        for arg in args:"},{"line_number":160,"context_line":"            lpaths.append(arg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        return lpaths"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_c25452ff","line":161,"in_reply_to":"ba8a016a_f655ca4f","updated":"2015-11-19 02:21:45.000000000","message":"You can\u0027t be wrong ! :) My bad missed that one.","commit_id":"f3ce77416a343ff4ff3c66c1571019fb3f7bc165"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cadc4efa48271c4b5835364acdc5b324f1fc26cc","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self._member_id \u003d member_id"},{"line_number":109,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":110,"context_line":"        self._options \u003d options"},{"line_number":111,"context_line":"        self.host \u003d socket.gethostname()"},{"line_number":112,"context_line":"        # Construct client with default values"},{"line_number":113,"context_line":"        self._client \u003d None"},{"line_number":114,"context_line":"        self._session_id \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_dd250109","line":111,"updated":"2015-11-19 06:57:17.000000000","message":"Why was this one attribute made public?","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"982a9d6d4c88a326d56380d084c15a37799d8ac6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self._member_id \u003d member_id"},{"line_number":109,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":110,"context_line":"        self._options \u003d options"},{"line_number":111,"context_line":"        self.host \u003d socket.gethostname()"},{"line_number":112,"context_line":"        # Construct client with default values"},{"line_number":113,"context_line":"        self._client \u003d None"},{"line_number":114,"context_line":"        self._session_id \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_db9dd80a","line":111,"in_reply_to":"ba8a016a_dd250109","updated":"2015-11-19 22:54:23.000000000","message":"Done","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cadc4efa48271c4b5835364acdc5b324f1fc26cc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\"Create client, register a node and create a session"},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Create a consul client"},{"line_number":139,"context_line":"        self._client \u003d ConsulDriver.make_client()"},{"line_number":140,"context_line":"        # Register a Node"},{"line_number":141,"context_line":"        self._client.catalog.register(self._node, self._address)"},{"line_number":142,"context_line":"        # Create a session"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_bd283de3","line":139,"updated":"2015-11-19 06:57:17.000000000","message":"U can just do self.make_client() here.","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"982a9d6d4c88a326d56380d084c15a37799d8ac6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\"Create client, register a node and create a session"},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Create a consul client"},{"line_number":139,"context_line":"        self._client \u003d ConsulDriver.make_client()"},{"line_number":140,"context_line":"        # Register a Node"},{"line_number":141,"context_line":"        self._client.catalog.register(self._node, self._address)"},{"line_number":142,"context_line":"        # Create a session"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_3b9bc419","line":139,"in_reply_to":"ba8a016a_bd283de3","updated":"2015-11-19 22:54:23.000000000","message":"Done","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cadc4efa48271c4b5835364acdc5b324f1fc26cc","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        return self.paths_join(self._namespace, group_id)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @staticmethod"},{"line_number":170,"context_line":"    def paths_join(**args):"},{"line_number":171,"context_line":"        lpaths \u003d []"},{"line_number":172,"context_line":"        for arg in args:"},{"line_number":173,"context_line":"            lpaths.append(arg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_9d1bf9c9","line":170,"updated":"2015-11-19 06:57:17.000000000","message":"**args implies keyword arguments, is that what u meant? or did u mean *args ?","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"982a9d6d4c88a326d56380d084c15a37799d8ac6","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        return self.paths_join(self._namespace, group_id)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @staticmethod"},{"line_number":170,"context_line":"    def paths_join(**args):"},{"line_number":171,"context_line":"        lpaths \u003d []"},{"line_number":172,"context_line":"        for arg in args:"},{"line_number":173,"context_line":"            lpaths.append(arg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_9b8c30db","line":170,"in_reply_to":"ba8a016a_9d1bf9c9","updated":"2015-11-19 22:54:23.000000000","message":"Yep. My bad.","commit_id":"69c60cce59f643614fb2a4c322a3417f41ea9f37"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7098ce1ae8959a6590124a868551051556ba0946","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        index \u003d None"},{"line_number":44,"context_line":"        owner \u003d None"},{"line_number":45,"context_line":"        while not self.acquired:"},{"line_number":46,"context_line":"            if owner is None:"},{"line_number":47,"context_line":"                self.acquired \u003d self._client.kv.put(self._name,"},{"line_number":48,"context_line":"                                                    self._value,"},{"line_number":49,"context_line":"                                                    acquire\u003dself._session_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_1107bf82","line":46,"updated":"2015-11-19 23:06:41.000000000","message":"hm, this logic is actually wrong (I forget what I wrote before, but it isn\u0027t right now that I see it here).\n\nIt\u0027s possible we\u0027ll enter this section thinking we don\u0027t have the lock, but in fact do (since locks could live on while we restart our process). So we should actually have an \u0027else\u0027 block here that will set self.acquired to true and return true _if_ owner \u003d\u003d self._session_id.\n\nI\u0027d also like to make sure all of these scenarios are covered in the greater tooz test suite. Maybe the are... I suspect not.","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"e4be8a36998c251afe7bd305f9144c53a780098c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        index \u003d None"},{"line_number":44,"context_line":"        owner \u003d None"},{"line_number":45,"context_line":"        while not self.acquired:"},{"line_number":46,"context_line":"            if owner is None:"},{"line_number":47,"context_line":"                self.acquired \u003d self._client.kv.put(self._name,"},{"line_number":48,"context_line":"                                                    self._value,"},{"line_number":49,"context_line":"                                                    acquire\u003dself._session_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_93a9417e","line":46,"in_reply_to":"ba8a016a_1107bf82","updated":"2015-11-21 07:33:43.000000000","message":"Good point but I think even that is not enough please check the next patch for modified logic.","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7098ce1ae8959a6590124a868551051556ba0946","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                self.acquired \u003d self._client.kv.put(self._name,"},{"line_number":48,"context_line":"                                                    self._value,"},{"line_number":49,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":50,"context_line":"            # If lock was acquired and its a non-blocking call"},{"line_number":51,"context_line":"            if self.acquired:"},{"line_number":52,"context_line":"                break"},{"line_number":53,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_f1b55bec","line":50,"updated":"2015-11-19 23:06:41.000000000","message":"This comment is untrue. If the lock was acquired, whether it was non-blocking or not, we return here.","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"e4be8a36998c251afe7bd305f9144c53a780098c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                self.acquired \u003d self._client.kv.put(self._name,"},{"line_number":48,"context_line":"                                                    self._value,"},{"line_number":49,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":50,"context_line":"            # If lock was acquired and its a non-blocking call"},{"line_number":51,"context_line":"            if self.acquired:"},{"line_number":52,"context_line":"                break"},{"line_number":53,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_13eb11b2","line":50,"in_reply_to":"ba8a016a_f1b55bec","updated":"2015-11-21 07:33:43.000000000","message":"Done","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7098ce1ae8959a6590124a868551051556ba0946","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if self.acquired:"},{"line_number":52,"context_line":"                break"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                if blocking:"},{"line_number":55,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":56,"context_line":"                    # Block the request."},{"line_number":57,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_71c2cb54","line":54,"updated":"2015-11-19 23:06:41.000000000","message":"nitpick: use elif","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7098ce1ae8959a6590124a868551051556ba0946","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                             \"a valid session name.\")"},{"line_number":125,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def make_client():"},{"line_number":129,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":130,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_be87a2b3","line":127,"updated":"2015-11-19 23:06:41.000000000","message":"Now that you\u0027re using it as an instance method, you should drop the staticmethod, and pass in self.","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"e4be8a36998c251afe7bd305f9144c53a780098c","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                             \"a valid session name.\")"},{"line_number":125,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def make_client():"},{"line_number":129,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":130,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_13023170","line":127,"in_reply_to":"ba8a016a_be87a2b3","updated":"2015-11-21 07:33:43.000000000","message":"Done","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7098ce1ae8959a6590124a868551051556ba0946","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def delete_group(self, group_id):"},{"line_number":161,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":162,"context_line":"        self._client.kv.delete(key\u003dgroup_path, recurse\u003dFalse)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def _path_group(self, group_id):"},{"line_number":165,"context_line":"        return self.paths_join(self._namespace, group_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_d1429767","line":162,"updated":"2015-11-19 23:06:41.000000000","message":"I actually think you want recurse\u003dTrue here. Otherwise if the group is created again, it will suddenly have members in it.","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"e4be8a36998c251afe7bd305f9144c53a780098c","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def delete_group(self, group_id):"},{"line_number":161,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":162,"context_line":"        self._client.kv.delete(key\u003dgroup_path, recurse\u003dFalse)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def _path_group(self, group_id):"},{"line_number":165,"context_line":"        return self.paths_join(self._namespace, group_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_6c2f14f7","line":162,"in_reply_to":"ba8a016a_d1429767","updated":"2015-11-21 07:33:43.000000000","message":"Done","commit_id":"60a2f916f24eb75c6b14b293963c62e7f0d2c094"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"deb347ba1e90ba58a9d5f97f02f1db127357209a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                else:"},{"line_number":81,"context_line":"                    return self.acquired"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self._coord._acquired_locks.append(self)"},{"line_number":84,"context_line":"        return self.acquired"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def release(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_0dd8bb1c","line":83,"updated":"2015-11-22 08:05:42.000000000","message":"Not sure I like this class poking things into a private attribute of that object.","commit_id":"11aa8fefab14e6f34ae025db75060b8cac588797"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"77b56e65db646baa661ead357da8df5320ec53c2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                else:"},{"line_number":81,"context_line":"                    return self.acquired"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self._coord._acquired_locks.append(self)"},{"line_number":84,"context_line":"        return self.acquired"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def release(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_4d232306","line":83,"in_reply_to":"ba8a016a_0dd8bb1c","updated":"2015-11-22 08:21:01.000000000","message":"Ya, this is for better or worse a pre-existing behavior so that tooz can ensure any coordinator provided locks are heartbeated/refreshed (if they need to be, for example in a driver that has locks with an expiry). In the case of this driver it may not be needed... because afaik its locks are not connected to a TTL but are connected to the session they came from.","commit_id":"11aa8fefab14e6f34ae025db75060b8cac588797"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def heartbeat(self, session_id):"},{"line_number":115,"context_line":"        \"\"\"Keep the lock alive.\"\"\""},{"line_number":116,"context_line":"        self._client.session.renew(session_id)"},{"line_number":117,"context_line":"        LOG.debug(\"Renewed session %s\" % (session_id))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_df0027ad","line":117,"updated":"2015-11-24 20:53:36.000000000","message":"So ya, not sure what this is doing in the lock heartbeat, isn\u0027t the coordinator heartbeat that keeps the session alive all that is needed to keep associated locks alive?","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def heartbeat(self, session_id):"},{"line_number":115,"context_line":"        \"\"\"Keep the lock alive.\"\"\""},{"line_number":116,"context_line":"        self._client.session.renew(session_id)"},{"line_number":117,"context_line":"        LOG.debug(\"Renewed session %s\" % (session_id))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_6331610b","line":117,"in_reply_to":"9a8ffd7b_df0027ad","updated":"2015-11-25 02:23:04.000000000","message":"This is not needed. Removed it and handled it with another approach. Please check.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self._session_id \u003d None"},{"line_number":140,"context_line":"        self._node \u003d options.get(\u0027node\u0027, None)"},{"line_number":141,"context_line":"        if self._node is None:"},{"line_number":142,"context_line":"            raise ValueError(\"Node can\u0027t be empty. \""},{"line_number":143,"context_line":"                             \"Please provide a valid node.\")"},{"line_number":144,"context_line":"        self._address \u003d options.get(\u0027address\u0027, None)"},{"line_number":145,"context_line":"        if self._address is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_ffe72b10","line":142,"updated":"2015-11-24 20:53:36.000000000","message":"Same question as below, emptyness is not equivalent to a thing being none from my point of view. IMHO all of https://docs.python.org/2.4/lib/truth.html are empty.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self._session_id \u003d None"},{"line_number":140,"context_line":"        self._node \u003d options.get(\u0027node\u0027, None)"},{"line_number":141,"context_line":"        if self._node is None:"},{"line_number":142,"context_line":"            raise ValueError(\"Node can\u0027t be empty. \""},{"line_number":143,"context_line":"                             \"Please provide a valid node.\")"},{"line_number":144,"context_line":"        self._address \u003d options.get(\u0027address\u0027, None)"},{"line_number":145,"context_line":"        if self._address is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_4340dd56","line":142,"in_reply_to":"9a8ffd7b_ffe72b10","updated":"2015-11-25 02:23:04.000000000","message":"Sure.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            raise ValueError(\"Node can\u0027t be empty. \""},{"line_number":143,"context_line":"                             \"Please provide a valid node.\")"},{"line_number":144,"context_line":"        self._address \u003d options.get(\u0027address\u0027, None)"},{"line_number":145,"context_line":"        if self._address is None:"},{"line_number":146,"context_line":"            raise ValueError(\"Address can\u0027t be empty. Please provide \""},{"line_number":147,"context_line":"                             \"a valid address.\")"},{"line_number":148,"context_line":"        self._session_name \u003d options.get(\u0027session\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_3fddb342","line":145,"updated":"2015-11-24 20:53:36.000000000","message":"So \"\" is also empty, not just none.\n\nDid u mean to do:\n\n  if not self._address:\n    raise ...","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            raise ValueError(\"Node can\u0027t be empty. \""},{"line_number":143,"context_line":"                             \"Please provide a valid node.\")"},{"line_number":144,"context_line":"        self._address \u003d options.get(\u0027address\u0027, None)"},{"line_number":145,"context_line":"        if self._address is None:"},{"line_number":146,"context_line":"            raise ValueError(\"Address can\u0027t be empty. Please provide \""},{"line_number":147,"context_line":"                             \"a valid address.\")"},{"line_number":148,"context_line":"        self._session_name \u003d options.get(\u0027session\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_a32f49a0","line":145,"in_reply_to":"9a8ffd7b_3fddb342","updated":"2015-11-25 02:23:04.000000000","message":"Sure.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                             \"a valid address.\")"},{"line_number":148,"context_line":"        self._session_name \u003d options.get(\u0027session\u0027, None)"},{"line_number":149,"context_line":"        if self._session_name is None:"},{"line_number":150,"context_line":"            raise ValueError(\"Session name can\u0027t be empty. Please provide \""},{"line_number":151,"context_line":"                             \"a valid session name.\")"},{"line_number":152,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":153,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_dfeee7eb","line":150,"updated":"2015-11-24 20:53:36.000000000","message":"Same as above.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                             \"a valid address.\")"},{"line_number":148,"context_line":"        self._session_name \u003d options.get(\u0027session\u0027, None)"},{"line_number":149,"context_line":"        if self._session_name is None:"},{"line_number":150,"context_line":"            raise ValueError(\"Session name can\u0027t be empty. Please provide \""},{"line_number":151,"context_line":"                             \"a valid session name.\")"},{"line_number":152,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":153,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_c32ccdad","line":150,"in_reply_to":"9a8ffd7b_dfeee7eb","updated":"2015-11-25 02:23:04.000000000","message":"Sure.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def make_client(self):"},{"line_number":157,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        return consul.Consul()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _start(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_ff3f2b23","line":158,"updated":"2015-11-24 20:53:36.000000000","message":"Where does the user pass in all these options:\n\nhttps://github.com/cablehead/python-consul/blob/master/consul/base.py#L134\n\n    def __init__(\n            self,\n            host\u003d\u0027127.0.0.1\u0027,\n            port\u003d8500,\n            token\u003dNone,\n            scheme\u003d\u0027http\u0027,\n            consistency\u003d\u0027default\u0027,\n            dc\u003dNone,\n            verify\u003dTrue):\n\nDid u not expect people to need to change those? (especially the host value there and port and scheme?)","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def make_client(self):"},{"line_number":157,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        return consul.Consul()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _start(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_99db921b","line":158,"in_reply_to":"9a8ffd7b_ff3f2b23","updated":"2015-11-25 02:23:04.000000000","message":"For now just passed host\n\nWill update patch 9 with more details.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def heartbeat(self, session_id):"},{"line_number":183,"context_line":"        if session_id !\u003d self._session_id:"},{"line_number":184,"context_line":"            LOG.debug(\"Session mis-match\")"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        lock \u003d self.get_lock(name\u003dself._lock_name)"},{"line_number":187,"context_line":"        # Call after every 2 sec to renew the session"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_bf776301","line":184,"updated":"2015-11-24 20:53:36.000000000","message":"Might deserve more than a debug log?","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def heartbeat(self, session_id):"},{"line_number":183,"context_line":"        if session_id !\u003d self._session_id:"},{"line_number":184,"context_line":"            LOG.debug(\"Session mis-match\")"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        lock \u003d self.get_lock(name\u003dself._lock_name)"},{"line_number":187,"context_line":"        # Call after every 2 sec to renew the session"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_e30c7144","line":184,"in_reply_to":"9a8ffd7b_bf776301","updated":"2015-11-25 02:23:04.000000000","message":"This is not needed. Please check next patch for details.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"24207c3cf2a43d635a45f01b9d9199c6ab367f52","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        lock \u003d self.get_lock(name\u003dself._lock_name)"},{"line_number":187,"context_line":"        # Call after every 2 sec to renew the session"},{"line_number":188,"context_line":"        threading.Timer("},{"line_number":189,"context_line":"            self.PERIODIC_CHECK, lock.heartbeat, \u0027session_id\u0027).start()"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def get_members(self, group_id):"},{"line_number":192,"context_line":"        group_path \u003d self.paths_join(self._namespace, group_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_3f5a9384","line":189,"updated":"2015-11-24 20:53:36.000000000","message":"Ya, this is probably not what u want here.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6da969dd4713ce9a502a1b793511277c22e8e64c","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        lock \u003d self.get_lock(name\u003dself._lock_name)"},{"line_number":187,"context_line":"        # Call after every 2 sec to renew the session"},{"line_number":188,"context_line":"        threading.Timer("},{"line_number":189,"context_line":"            self.PERIODIC_CHECK, lock.heartbeat, \u0027session_id\u0027).start()"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def get_members(self, group_id):"},{"line_number":192,"context_line":"        group_path \u003d self.paths_join(self._namespace, group_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_030ad526","line":189,"in_reply_to":"9a8ffd7b_3f5a9384","updated":"2015-11-25 02:23:04.000000000","message":"Yes agree. This is not needed. Please check next patch for details.","commit_id":"67cc599039d792b698de68c04380634bd40b5fad"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"baa6985e8ca30c6a424cd858d46f01627804f68b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                                                       self._ttl)"},{"line_number":168,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":169,"context_line":"                                                 self.heartbeat())"},{"line_number":170,"context_line":"        self._consul_timer.start()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        return self._session_id"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_59bc4a6c","line":170,"updated":"2015-11-25 02:32:55.000000000","message":"I think u want to pass the function itself in here, not call it right?\n\nSo like:\n\n  self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,\n                                 self.heartbeat)","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"4c6304e8d99d51dcb872f11987e15b45024d405b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                                                       self._ttl)"},{"line_number":168,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":169,"context_line":"                                                 self.heartbeat())"},{"line_number":170,"context_line":"        self._consul_timer.start()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        return self._session_id"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_e9a09da1","line":170,"in_reply_to":"9a8ffd7b_59bc4a6c","updated":"2015-11-25 19:14:24.000000000","message":"Yes thats correct. My bad.","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c50e2db95da83c6e708854987f31043d58df96ed","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.stop_thread_event \u003d Event()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def stop(self):"},{"line_number":245,"context_line":"        if self.isAlive() is True:"},{"line_number":246,"context_line":"            self.stop_thread_event.set()"},{"line_number":247,"context_line":"            self.join()"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_39406656","line":245,"updated":"2015-11-25 02:35:33.000000000","message":"Probably just the following is sufficent:\n\n  if self.isAlive():\n     \u003crest of code\u003e","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"4c6304e8d99d51dcb872f11987e15b45024d405b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.stop_thread_event \u003d Event()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def stop(self):"},{"line_number":245,"context_line":"        if self.isAlive() is True:"},{"line_number":246,"context_line":"            self.stop_thread_event.set()"},{"line_number":247,"context_line":"            self.join()"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_a9893528","line":245,"in_reply_to":"9a8ffd7b_39406656","updated":"2015-11-25 19:14:24.000000000","message":"Done","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"88b5b299d22bfbd43a32f784bc3e1deaceff01c6","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def run(self):"},{"line_number":257,"context_line":"        while not self.stop_thread_event.is_set():"},{"line_number":258,"context_line":"            self.worker_function()"},{"line_number":259,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_19448272","line":258,"updated":"2015-11-25 02:34:41.000000000","message":"capture exceptions around this, and log them, so that this thread doesn\u0027t end up dying.","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"4c6304e8d99d51dcb872f11987e15b45024d405b","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def run(self):"},{"line_number":257,"context_line":"        while not self.stop_thread_event.is_set():"},{"line_number":258,"context_line":"            self.worker_function()"},{"line_number":259,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_4951a961","line":258,"in_reply_to":"9a8ffd7b_19448272","updated":"2015-11-25 19:14:24.000000000","message":"Done","commit_id":"220854b646a122832a3195a62809494d7d3bdf2a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2e097a4aaf37786035fbb0f0644d5465dd37b879","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import tooz"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from threading import Event"},{"line_number":23,"context_line":"from threading import Thread"},{"line_number":24,"context_line":"from tooz import coordination"},{"line_number":25,"context_line":"from tooz import locking"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_51a06343","line":23,"updated":"2015-11-26 01:53:48.000000000","message":"http://docs.openstack.org/developer/hacking/#imports\n\n  Do not import objects, only modules","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"4e9be83fe2d1df750bdec886783b7c06819db546","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import tooz"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from threading import Event"},{"line_number":23,"context_line":"from threading import Thread"},{"line_number":24,"context_line":"from tooz import coordination"},{"line_number":25,"context_line":"from tooz import locking"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_c48faeca","line":23,"in_reply_to":"9a8ffd7b_51a06343","updated":"2015-11-26 05:38:12.000000000","message":"Why isn\u0027t the pep8/hacking/flake8 check enforcing this? If it\u0027s ignored in tox.ini.. then it should not be brought up in reviews.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import tooz"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from threading import Event"},{"line_number":23,"context_line":"from threading import Thread"},{"line_number":24,"context_line":"from tooz import coordination"},{"line_number":25,"context_line":"from tooz import locking"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_334b27b3","line":23,"in_reply_to":"9a8ffd7b_b99efab6","updated":"2015-12-08 03:39:18.000000000","message":"Yes...pep8/hacking/flake8 checks are passing.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"41378a6c4b9fc621f1a8562416eefbd177aa6c05","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import tooz"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from threading import Event"},{"line_number":23,"context_line":"from threading import Thread"},{"line_number":24,"context_line":"from tooz import coordination"},{"line_number":25,"context_line":"from tooz import locking"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_b99efab6","line":23,"in_reply_to":"9a8ffd7b_c48faeca","updated":"2015-11-27 16:32:43.000000000","message":"It should be enforcing this, not sure why it isn\u0027t  anymore...","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2e097a4aaf37786035fbb0f0644d5465dd37b879","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                self.acquired \u003d True"},{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            LOG.debug(\"No lock is acquired\")"},{"line_number":113,"context_line":"            return True"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_11ddfbdf","line":112,"updated":"2015-11-26 01:53:48.000000000","message":"Pretty sure u don\u0027t need this :)","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                self.acquired \u003d True"},{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            LOG.debug(\"No lock is acquired\")"},{"line_number":113,"context_line":"            return True"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_3355671d","line":112,"in_reply_to":"9a8ffd7b_11ddfbdf","updated":"2015-12-08 03:39:18.000000000","message":"Done","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"4e9be83fe2d1df750bdec886783b7c06819db546","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                self.acquired \u003d True"},{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            LOG.debug(\"No lock is acquired\")"},{"line_number":113,"context_line":"            return True"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_a4ab8a1c","line":112,"in_reply_to":"9a8ffd7b_11ddfbdf","updated":"2015-11-26 05:38:12.000000000","message":"I think it\u0027s a fine place to add a debug message. But make sure it includes information that helps someone _debug_.\n\nYou don\u0027t actually need the else, as every other branch returns... but meh. ;)","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                self.acquired \u003d True"},{"line_number":110,"context_line":"                return False"},{"line_number":111,"context_line":"        else:"},{"line_number":112,"context_line":"            LOG.debug(\"No lock is acquired\")"},{"line_number":113,"context_line":"            return True"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_935c534c","line":112,"in_reply_to":"9a8ffd7b_a4ab8a1c","updated":"2015-12-08 03:39:18.000000000","message":"Done","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"4e9be83fe2d1df750bdec886783b7c06819db546","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    # Defaults TTL is 15s"},{"line_number":123,"context_line":"    DEFAULT_TTL \u003d 15"},{"line_number":124,"context_line":"    # Periodic heartbeat check interval. Default is 2 sec."},{"line_number":125,"context_line":"    PERIODIC_CHECK \u003d 2"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":128,"context_line":"        super(ConsulDriver, self).__init__()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_ef140b45","line":125,"updated":"2015-11-26 05:38:12.000000000","message":"This seems aggressive. But I have no data to back that up.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    # Defaults TTL is 15s"},{"line_number":123,"context_line":"    DEFAULT_TTL \u003d 15"},{"line_number":124,"context_line":"    # Periodic heartbeat check interval. Default is 2 sec."},{"line_number":125,"context_line":"    PERIODIC_CHECK \u003d 2"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":128,"context_line":"        super(ConsulDriver, self).__init__()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_13370300","line":125,"in_reply_to":"9a8ffd7b_ef140b45","updated":"2015-12-08 03:39:18.000000000","message":"Increased it to 10...as it seem little aggressive to me as well.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7baae6ffefee96f803e71240198c439d886e2ff6","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":128,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":129,"context_line":"        self._member_id \u003d member_id"},{"line_number":130,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":131,"context_line":"        self._options \u003d options"},{"line_number":132,"context_line":"        self._host \u003d socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_5dd27a01","line":129,"updated":"2015-12-02 23:25:50.000000000","message":"I think this should probably be included in the session name.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":128,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":129,"context_line":"        self._member_id \u003d member_id"},{"line_number":130,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":131,"context_line":"        self._options \u003d options"},{"line_number":132,"context_line":"        self._host \u003d socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_4e8ac265","line":129,"in_reply_to":"9a8ffd7b_5dd27a01","updated":"2015-12-08 03:39:18.000000000","message":"Agree.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"7baae6ffefee96f803e71240198c439d886e2ff6","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        # Create a consul client"},{"line_number":161,"context_line":"        self._client \u003d self.make_client()"},{"line_number":162,"context_line":"        # Register a Node"},{"line_number":163,"context_line":"        self._client.catalog.register(self._node, self._address)"},{"line_number":164,"context_line":"        # Create a session"},{"line_number":165,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":166,"context_line":"                                                       self._node,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_9dac6289","line":163,"updated":"2015-12-02 23:25:50.000000000","message":"According to https://www.consul.io/docs/agent/http/catalog.html it is preferrable to just use the agent\u0027s node name if you have local agents. So I think you should default the \u0027node\u0027 option to None, and if it is None, use this:\n\n    self._client.agent.self[\u0027Member\u0027][\u0027Name\u0027]","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        # Create a consul client"},{"line_number":161,"context_line":"        self._client \u003d self.make_client()"},{"line_number":162,"context_line":"        # Register a Node"},{"line_number":163,"context_line":"        self._client.catalog.register(self._node, self._address)"},{"line_number":164,"context_line":"        # Create a session"},{"line_number":165,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":166,"context_line":"                                                       self._node,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_4d008701","line":163,"in_reply_to":"9a8ffd7b_9dac6289","updated":"2015-12-08 03:39:18.000000000","message":"Sure good idea!\n\nused\nself._node \u003d self._client.agent.self[\u0027Member\u0027][\u0027Name\u0027]\nself._address \u003d self._client.agent.self[\u0027Member\u0027][\u0027Addr\u0027]\n\nplease check next patch for details.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2e097a4aaf37786035fbb0f0644d5465dd37b879","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def get_lock(self, name):"},{"line_number":178,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":179,"context_line":"        self._lock_name \u003d name"},{"line_number":180,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":181,"context_line":"                          session\u003dself._session_id, value\u003d\"foo\","},{"line_number":182,"context_line":"                          client\u003dself._client)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_51e9437f","line":179,"updated":"2015-11-26 01:53:48.000000000","message":"What is this doing here? Confused...","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def get_lock(self, name):"},{"line_number":178,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":179,"context_line":"        self._lock_name \u003d name"},{"line_number":180,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":181,"context_line":"                          session\u003dself._session_id, value\u003d\"foo\","},{"line_number":182,"context_line":"                          client\u003dself._client)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_2ea73e51","line":179,"in_reply_to":"9a8ffd7b_51e9437f","updated":"2015-12-08 03:39:18.000000000","message":"Removed it ; its not needed.","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"924812466d62cea14f1a095f19a4ac4870066878","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        while not self.stop_thread_event.is_set():"},{"line_number":258,"context_line":"            try:"},{"line_number":259,"context_line":"                self.worker_function()"},{"line_number":260,"context_line":"            except Exception as e:"},{"line_number":261,"context_line":"                LOG.debug(\"Worker function raised exception %s\" % (e))"},{"line_number":262,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_11565b5c","line":260,"updated":"2015-11-26 01:51:17.000000000","message":"Is this supposed to be debug, also why not use exc_info\u003d1?","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6f3571dfd2f22345fe8c74850e57d230eea90f24","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        while not self.stop_thread_event.is_set():"},{"line_number":258,"context_line":"            try:"},{"line_number":259,"context_line":"                self.worker_function()"},{"line_number":260,"context_line":"            except Exception as e:"},{"line_number":261,"context_line":"                LOG.debug(\"Worker function raised exception %s\" % (e))"},{"line_number":262,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_4def2787","line":260,"in_reply_to":"9a8ffd7b_11565b5c","updated":"2015-12-08 03:39:18.000000000","message":"please check next patch for details","commit_id":"2e6eeca391a263989bd9d51b48975fec300aa169"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2a22e829511555b813ee41303604cfbdb86c01fe","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    # Lock release didn\u0027t happen."},{"line_number":106,"context_line":"                    # NB : Try to log the reason if we can get"},{"line_number":107,"context_line":"                    # additional information"},{"line_number":108,"context_line":"                    return False"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                self.acquired \u003d True"},{"line_number":111,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_a83acecb","line":108,"updated":"2015-12-04 01:12:21.000000000","message":"Ya, another suggestion here is to raise an exception (with a useful message), this would be a bad situation I think.","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    # Lock release didn\u0027t happen."},{"line_number":106,"context_line":"                    # NB : Try to log the reason if we can get"},{"line_number":107,"context_line":"                    # additional information"},{"line_number":108,"context_line":"                    return False"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                self.acquired \u003d True"},{"line_number":111,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_774fb7bd","line":108,"in_reply_to":"7a740942_a83acecb","updated":"2015-12-04 20:01:33.000000000","message":"Sure.","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2a22e829511555b813ee41303604cfbdb86c01fe","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    def get_lock(self, name):"},{"line_number":171,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":172,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":173,"context_line":"                          session\u003dself._session_id, value\u003d\"foo\","},{"line_number":174,"context_line":"                          client\u003dself._client)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def heartbeat(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_48524a15","line":173,"updated":"2015-12-04 01:12:21.000000000","message":"I guess the value doesn\u0027t matter?","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    def get_lock(self, name):"},{"line_number":171,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":172,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":173,"context_line":"                          session\u003dself._session_id, value\u003d\"foo\","},{"line_number":174,"context_line":"                          client\u003dself._client)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def heartbeat(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_1c453a16","line":173,"in_reply_to":"7a740942_48524a15","updated":"2015-12-04 20:01:33.000000000","message":"Value doesn\u0027t matter but needs to be provided as its mandatory while doing a put. May be I can just default it to some value while actually doing put not pass it through from here to ConsulLock","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    def get_lock(self, name):"},{"line_number":171,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":172,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":173,"context_line":"                          session\u003dself._session_id, value\u003d\"foo\","},{"line_number":174,"context_line":"                          client\u003dself._client)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def heartbeat(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_17ec338e","line":173,"in_reply_to":"7a740942_48524a15","updated":"2015-12-04 20:01:33.000000000","message":"Yes kv.put needs it ..will just use it where its needed rather than passing the parameters from one class to another. Does that make sense ?","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"2a22e829511555b813ee41303604cfbdb86c01fe","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            except Exception:"},{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_a8688ebb","line":255,"updated":"2015-12-04 01:12:21.000000000","message":"Didn\u0027t decide to use exc_val\u003dTrue (which logs the exception + backtrace...)?\n\nWhat do u think about the following:\n\n    class ConsulIntervalTimer(HeartBeatThread):\n        max_delay \u003d 120\n\n        def __init__(self, interval, worker_function):\n            super(HeartBeatThread, self).__init__()\n            self.interval \u003d interval\n            self.worker_function \u003d worker_function\n            self.failure_backoff_increment \u003d 1\n            self.failure_backoff_count \u003d 0\n\n        def run(self):\n            while not self.stop_thread_event.is_set():\n                try:\n                    self.worker_function()\n                except Exception:\n                    LOG.error(\"Worker function %s raised exception\",\n                              self.worker_function.__name__, exc_info\u003dTrue)\n                    self.failure_backoff_count +\u003d 1\n                else:\n                    self.failure_backoff_count \u003d 0\n                wait_delay \u003d self.interval + (self.failure_backoff_count * self.failure_backoff_increment)\n                wait_delay \u003d min(self.max_delay, wait_delay)\n                LOG.debug(\"Worker function %s will run again in %0.2f seconds\",\n                          self.worker_function.__name__, wait_delay)\n                self.stop_thread_event.wait(wait_delay)\n\n\nThe above will backoff on failures (to avoid frequent recalling that will likely just fail again) and it will log when the next call will (likely) happen and it will limit itself to an upper bound delay (120 seconds?)","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            except Exception:"},{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_d73d4bbc","line":255,"in_reply_to":"7a740942_a8688ebb","updated":"2015-12-04 20:01:33.000000000","message":"Seem like a cleaner approach, although 120 sec sounds too much to me...it should be bound by the ttl IMHO","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"b7c213145d1004882d67a294c466e61ed107b33e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_c81dda10","line":256,"updated":"2015-12-04 00:58:49.000000000","message":"Heh, this is worse. What Josh meant was\n\n    LOG.error(\"...\", exc_info\u003dTrue)\n\nCheck it out at https://docs.python.org/2/library/logging.html","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_377a8ff2","line":256,"in_reply_to":"7a740942_a86dee33","updated":"2015-12-04 20:01:33.000000000","message":"Sure","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"976233d262ccde655b060ba4cefb74e889ebfe3a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_7721f7fa","line":256,"in_reply_to":"7a740942_c81dda10","updated":"2015-12-04 20:01:33.000000000","message":"Done","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"63ee306aef2b478adc221e4802be653f8275f0f1","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                excp_type, excp_value \u003d sys.exc_info()[:2]"},{"line_number":254,"context_line":"                LOG.error(\"Worker function raised exception %s \""},{"line_number":255,"context_line":"                          \"with value %s\" % (excp_type.__name__,"},{"line_number":256,"context_line":"                                             excp_value))"},{"line_number":257,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_a86dee33","line":256,"in_reply_to":"7a740942_c81dda10","updated":"2015-12-04 01:12:37.000000000","message":"Ya, see above :-P","commit_id":"f4147010c2371e03995f0f36cd589072365a0c79"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import consul"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import tooz"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_757d651b","line":17,"updated":"2015-12-16 03:18:52.000000000","message":"PEP-8 order:\n\nstdlib\n\nthird party\n\nlocal\n\nconsul is third party and tooz is local. threading, logging and socket are stdlib","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import consul"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import tooz"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_4c46f4c0","line":17,"in_reply_to":"5a710552_757d651b","updated":"2015-12-17 02:20:48.000000000","message":"This is good to know. Thanks for the feedback.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":42,"context_line":"        # Acquire the lock"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        index \u003d None"},{"line_number":45,"context_line":"        owner \u003d None"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_75a485a5","line":43,"updated":"2015-12-16 03:18:52.000000000","message":"The comment and blank line here are disruptive: the comment is zero-information, and the blank line is spurious vertical whitespace (frowned on by PEP-8)","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":42,"context_line":"        # Acquire the lock"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        index \u003d None"},{"line_number":45,"context_line":"        owner \u003d None"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_cc10a4ab","line":43,"in_reply_to":"5a710552_75a485a5","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":42,"context_line":"        # Acquire the lock"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        index \u003d None"},{"line_number":45,"context_line":"        owner \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_152f41f7","line":44,"updated":"2015-12-16 03:18:52.000000000","message":"This isn\u0027t C - there\u0027s no need to predeclare variables, and its unidiomatic in python. index is assigned unconditionally below, so this line can be skipped. Same for owner.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def acquire(self, blocking\u003dTrue):"},{"line_number":42,"context_line":"        # Acquire the lock"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        index \u003d None"},{"line_number":45,"context_line":"        owner \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_ecc6c015","line":44,"in_reply_to":"5a710552_152f41f7","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"},{"line_number":48,"context_line":"        # since locks will be persistent but the in-memory"},{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_15bae1c0","line":49,"updated":"2015-12-16 03:18:52.000000000","message":"\u0027It is\u0027","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"},{"line_number":48,"context_line":"        # since locks will be persistent but the in-memory"},{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_ccd504ba","line":49,"in_reply_to":"5a710552_15bae1c0","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"},{"line_number":48,"context_line":"        # since locks will be persistent but the in-memory"},{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."},{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_75cb2554","line":50,"updated":"2015-12-16 03:18:52.000000000","message":"\u0027owns\u0027","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # This is useful in case when a process re-starts"},{"line_number":48,"context_line":"        # since locks will be persistent but the in-memory"},{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."},{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_6cdbb0ee","line":50,"in_reply_to":"5a710552_75cb2554","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."},{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":54,"context_line":"                                              index\u003dindex)"},{"line_number":55,"context_line":"        owner \u003d contents.get(\u0027Session\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_15e181d0","line":52,"updated":"2015-12-16 03:18:52.000000000","message":"Perhaps \"Owner will be None when acquiring the lock for the first time.\" (Otherwise you need a comma between time and owner. I\u0027d move the comment about owner down to the \u0027if owner is None\u0027 line too.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # state will be re-constructed again. Is better"},{"line_number":50,"context_line":"        # to check who own the lock and set the in-memory"},{"line_number":51,"context_line":"        # state accordingly. While acquiring lock for the first"},{"line_number":52,"context_line":"        # time owner will be None."},{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":54,"context_line":"                                              index\u003dindex)"},{"line_number":55,"context_line":"        owner \u003d contents.get(\u0027Session\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_8cfffc33","line":52,"in_reply_to":"5a710552_15e181d0","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":54,"context_line":"                                              index\u003dindex)"},{"line_number":55,"context_line":"        owner \u003d contents.get(\u0027Session\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        while not self.acquired:"},{"line_number":58,"context_line":"            # Check if we have a lock owner"},{"line_number":59,"context_line":"            if owner is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_d55d397a","line":56,"updated":"2015-12-16 03:18:52.000000000","message":"Is it correct to say that acquire() can be called when the lock is already held?\n\nIt might be clearer to structure it like so:\n\n if self.acquired:\n     return True\n index, contents \u003d ..\n owner \u003d ...\n while True:\n     ....\n    return ...","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":54,"context_line":"                                              index\u003dindex)"},{"line_number":55,"context_line":"        owner \u003d contents.get(\u0027Session\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        while not self.acquired:"},{"line_number":58,"context_line":"            # Check if we have a lock owner"},{"line_number":59,"context_line":"            if owner is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_4c7ef4af","line":56,"in_reply_to":"5a710552_d55d397a","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            # Check if we have a lock owner"},{"line_number":59,"context_line":"            if owner is None:"},{"line_number":60,"context_line":"                self.acquired \u003d self._client.kv.put(key\u003dself._name,"},{"line_number":61,"context_line":"                                                    value\u003d\u0027foo\u0027,"},{"line_number":62,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                if owner \u003d\u003d self._session_id:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_35303d01","line":61,"updated":"2015-12-16 03:18:52.000000000","message":"Whats the \u0027foo\u0027 for? Please document in here.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            # Check if we have a lock owner"},{"line_number":59,"context_line":"            if owner is None:"},{"line_number":60,"context_line":"                self.acquired \u003d self._client.kv.put(key\u003dself._name,"},{"line_number":61,"context_line":"                                                    value\u003d\u0027foo\u0027,"},{"line_number":62,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                if owner \u003d\u003d self._session_id:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_6c25f0c0","line":61,"in_reply_to":"5a710552_35303d01","updated":"2015-12-17 02:20:48.000000000","message":"Done. Value can be anything to make it meaningful will set the value as session_id.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                if owner \u003d\u003d self._session_id:"},{"line_number":65,"context_line":"                    self.acquired \u003d True"},{"line_number":66,"context_line":"                    return self.acquired"},{"line_number":67,"context_line":"                else:"},{"line_number":68,"context_line":"                    self.acquired \u003d False"},{"line_number":69,"context_line":"            # If lock was acquired return"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_bc56bfcb","line":66,"updated":"2015-12-09 07:01:23.000000000","message":"What about just letting the break at 71 be the thing that returns? Might save some future misunderstanding (to many return points from functions usually are hard to figure/reason out, now or in the future).","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                if owner \u003d\u003d self._session_id:"},{"line_number":65,"context_line":"                    self.acquired \u003d True"},{"line_number":66,"context_line":"                    return self.acquired"},{"line_number":67,"context_line":"                else:"},{"line_number":68,"context_line":"                    self.acquired \u003d False"},{"line_number":69,"context_line":"            # If lock was acquired return"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_62acce35","line":66,"in_reply_to":"7a740942_bc56bfcb","updated":"2015-12-16 02:08:11.000000000","message":"Sure. Done.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":75,"context_line":"                    # Block the request."},{"line_number":76,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":77,"context_line":"                                                          index\u003dindex)"},{"line_number":78,"context_line":"                else:"},{"line_number":79,"context_line":"                    return self.acquired"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_15642147","line":77,"updated":"2015-12-16 03:18:52.000000000","message":"You\u0027re missing an owner \u003d call here, I think ?\n\nPerhaps factor the index, contents \u003d  \\n owner \u003d ... stuff into a helper function to avoid such bugs.\n\nAlso it means you\u0027re missing a test for this case.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":75,"context_line":"                    # Block the request."},{"line_number":76,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":77,"context_line":"                                                          index\u003dindex)"},{"line_number":78,"context_line":"                else:"},{"line_number":79,"context_line":"                    return self.acquired"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_a710d14f","line":77,"in_reply_to":"5a710552_15642147","updated":"2015-12-17 02:20:48.000000000","message":"No owner will already computed on line #55 in the patch. We should be good here. If needed will add tests for the consul driver to verify it.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def release(self):"},{"line_number":84,"context_line":"        # Release the acquired lock."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        index \u003d None"},{"line_number":87,"context_line":"        owner \u003d None"},{"line_number":88,"context_line":"        output \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_55ee29b5","line":85,"updated":"2015-12-16 03:18:52.000000000","message":"Same here on the comment and vertical white space","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def release(self):"},{"line_number":84,"context_line":"        # Release the acquired lock."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        index \u003d None"},{"line_number":87,"context_line":"        owner \u003d None"},{"line_number":88,"context_line":"        output \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_47348ddd","line":85,"in_reply_to":"5a710552_55ee29b5","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # Get the lock to verify the session ID\u0027s are same"},{"line_number":92,"context_line":"            index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":93,"context_line":"                                                  index\u003dindex)"},{"line_number":94,"context_line":"            owner \u003d contents.get(\u0027Session\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"            if owner \u003d\u003d self._session_id:"},{"line_number":97,"context_line":"                output \u003d self._client.kv.put(self._name, self._value,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_d53e99d9","line":94,"updated":"2015-12-16 03:18:52.000000000","message":"definitely factor this common code out. It will make a good hook point for tests too I suspect.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # Get the lock to verify the session ID\u0027s are same"},{"line_number":92,"context_line":"            index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":93,"context_line":"                                                  index\u003dindex)"},{"line_number":94,"context_line":"            owner \u003d contents.get(\u0027Session\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"            if owner \u003d\u003d self._session_id:"},{"line_number":97,"context_line":"                output \u003d self._client.kv.put(self._name, self._value,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_8741153c","line":94,"in_reply_to":"5a710552_d53e99d9","updated":"2015-12-17 02:20:48.000000000","message":"Initially I thought about it but it made code difficult to understand so kept it like this unless we feel strongly about it.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                    LOG.debug(\"Lock could not be released by the \""},{"line_number":104,"context_line":"                              \"session %s\" % (self._session_id))"},{"line_number":105,"context_line":"                    raise Exception(\"Lock could not be released by the \""},{"line_number":106,"context_line":"                                    \"session that owns the lock\")"},{"line_number":107,"context_line":"            else:"},{"line_number":108,"context_line":"                self.acquired \u003d True"},{"line_number":109,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_fc2e8741","line":106,"updated":"2015-12-09 07:01:23.000000000","message":"Probably better to raise a tooz exception so that people can actually catch something if they want to, hard to catch Exception and do anything meaningful with it usually... at least raise a ToozError to start.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                    LOG.debug(\"Lock could not be released by the \""},{"line_number":104,"context_line":"                              \"session %s\" % (self._session_id))"},{"line_number":105,"context_line":"                    raise Exception(\"Lock could not be released by the \""},{"line_number":106,"context_line":"                                    \"session that owns the lock\")"},{"line_number":107,"context_line":"            else:"},{"line_number":108,"context_line":"                self.acquired \u003d True"},{"line_number":109,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_7da0fa9f","line":106,"in_reply_to":"7a740942_fc2e8741","updated":"2015-12-16 02:08:11.000000000","message":"Sure makes sense.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"6d304fc2681d4ccbd093326c0e8253ba2ada6c3f","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"},{"line_number":115,"context_line":"    \"\"\"Initialize the Consul driver."},{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    # Default namespace when none is provided"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_552b8994","line":115,"updated":"2015-12-16 03:18:52.000000000","message":"pep -257 - all on one line:\n\n  \"\"\"foo bar baz\"\"\"","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8fae26a593a9a89e6a8b6bb62848dcdaf68281b3","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"},{"line_number":115,"context_line":"    \"\"\"Initialize the Consul driver."},{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    # Default namespace when none is provided"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_07820553","line":115,"in_reply_to":"5a710552_552b8994","updated":"2015-12-17 02:20:48.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self._node \u003d None"},{"line_number":134,"context_line":"        self._address \u003d None"},{"line_number":135,"context_line":"        self._session_name \u003d member_id"},{"line_number":136,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":137,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":138,"context_line":"        self._consul_timer \u003d None"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_5cc23b54","line":136,"updated":"2015-12-09 07:01:23.000000000","message":"Did u check that this works when passed into get coordinator via a option/url?\n\nFrom my last memory u need to do something like https://github.com/openstack/tooz/blob/master/tooz/drivers/memcached.py#L153 or u need to do different access here, one or the other.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self._node \u003d None"},{"line_number":134,"context_line":"        self._address \u003d None"},{"line_number":135,"context_line":"        self._session_name \u003d member_id"},{"line_number":136,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":137,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":138,"context_line":"        self._consul_timer \u003d None"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_fde86a7e","line":136,"in_reply_to":"7a740942_5cc23b54","updated":"2015-12-16 02:08:11.000000000","message":"Please check next patch for details.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self._address \u003d None"},{"line_number":135,"context_line":"        self._session_name \u003d member_id"},{"line_number":136,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":137,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":138,"context_line":"        self._consul_timer \u003d None"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def make_client(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_9ccf4355","line":137,"updated":"2015-12-09 07:01:23.000000000","message":"Ensure namespace if user provided is really a binary string; otherwise this will blowup later.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self._address \u003d None"},{"line_number":135,"context_line":"        self._session_name \u003d member_id"},{"line_number":136,"context_line":"        self._ttl \u003d options.get(\u0027ttl\u0027, self.DEFAULT_TTL)"},{"line_number":137,"context_line":"        self._namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":138,"context_line":"        self._consul_timer \u003d None"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def make_client(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_bfcacc9f","line":137,"in_reply_to":"7a740942_9ccf4355","updated":"2015-12-16 02:08:11.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"944f39b4fd4f7570fc0a4d281986eaa0c6ba6c54","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                                 self.heartbeat)"},{"line_number":163,"context_line":"        self._consul_timer.start()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._session_id"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def _stop(self):"},{"line_number":168,"context_line":"        self._consul_timer.stop()"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_5ca47b49","line":165,"updated":"2015-12-09 07:03:38.000000000","message":"Whats up with this return? Doesn\u0027t seem to do anything.\n\nhttps://github.com/openstack/tooz/blob/master/tooz/coordination.py#L205 doesnt use the return value, so not sure this is useful.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                                 self.heartbeat)"},{"line_number":163,"context_line":"        self._consul_timer.start()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._session_id"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def _stop(self):"},{"line_number":168,"context_line":"        self._consul_timer.stop()"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_4855e71b","line":165,"in_reply_to":"7a740942_5ca47b49","updated":"2015-12-16 02:08:11.000000000","message":"Agree.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._session_id"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def _stop(self):"},{"line_number":168,"context_line":"        self._consul_timer.stop()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def get_lock(self, name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_dcd2abd0","line":167,"updated":"2015-12-09 07:01:23.000000000","message":"Do the following:\n\n  if self._consul_timer is not None:\n     self._consul_timer.stop()\n\nBetter safe than sorry.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return self._session_id"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def _stop(self):"},{"line_number":168,"context_line":"        self._consul_timer.stop()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def get_lock(self, name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_687b03bf","line":167,"in_reply_to":"7a740942_dcd2abd0","updated":"2015-12-16 02:08:11.000000000","message":"Yes always ! :)","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self._consul_timer.stop()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def get_lock(self, name):"},{"line_number":171,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":172,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":173,"context_line":"                          session\u003dself._session_id,"},{"line_number":174,"context_line":"                          client\u003dself._client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_7cd4d7ea","line":171,"updated":"2015-12-09 07:01:23.000000000","message":"Did u want to convert name into a binary string to?\n\nOn py3.x this will not end well.\n\n    Python 3.4.0 (default, Jun 19 2015, 14:20:21) \n    [GCC 4.8.2] on linux\n    Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n    \u003e\u003e\u003e x \u003d [\u0027a\u0027, \u0027b\u0027, b\u0027c\u0027]\n    \u003e\u003e\u003e x\n    [\u0027a\u0027, \u0027b\u0027, b\u0027c\u0027]\n    \u003e\u003e\u003e \"/\".join(x)\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n    TypeError: sequence item 2: expected str instance, bytes found","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self._consul_timer.stop()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def get_lock(self, name):"},{"line_number":171,"context_line":"        key \u003d self.paths_join(self._namespace, b\"locks\", name)"},{"line_number":172,"context_line":"        return ConsulLock(key, self._node, self._address,"},{"line_number":173,"context_line":"                          session\u003dself._session_id,"},{"line_number":174,"context_line":"                          client\u003dself._client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_4803a710","line":171,"in_reply_to":"7a740942_7cd4d7ea","updated":"2015-12-16 02:08:11.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        return self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_group(self, group_id):"},{"line_number":188,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_5cec7bba","line":188,"updated":"2015-12-09 07:01:23.000000000","message":"Same question here, ensure group_id is a binary string?\n\nIdeally pick either unicode or binary and stick to it, because mixing them won\u0027t work out on py3.x (although it does work out to some degree on py2.x because of the brokeness of py2.x); I\u0027d pick binary because thats what we\u0027ve been doing for the other drivers.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        return self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_group(self, group_id):"},{"line_number":188,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_f3abbb87","line":188,"in_reply_to":"7a740942_371c2869","updated":"2015-12-16 02:08:11.000000000","message":"Changed it to unicode","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        return self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_group(self, group_id):"},{"line_number":188,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_53a5efb2","line":188,"in_reply_to":"7a740942_5cec7bba","updated":"2015-12-16 02:08:11.000000000","message":"Changed it to unicode","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"36b50c8b4636e433c02e2f26c1d5eb221882ed08","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        return self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def create_group(self, group_id):"},{"line_number":188,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_371c2869","line":188,"in_reply_to":"7a740942_5cec7bba","updated":"2015-12-09 07:06:25.000000000","message":"To help with conversion, something like the following can be used:\n\nhttps://github.com/openstack/tooz/blob/master/tooz/drivers/redis.py#L336\n\nThen u just have to make sure u use that in the right places...","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"},{"line_number":192,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":193,"context_line":"        self._client.kv.delete(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _path_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_9c24230d","line":192,"updated":"2015-12-09 07:01:23.000000000","message":"Same question here, ensure group_id is a binary string?","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        self._client.kv.put(key\u003dgroup_path, value\u003dgroup_id)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def delete_group(self, group_id):"},{"line_number":192,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":193,"context_line":"        self._client.kv.delete(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _path_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_df7f9864","line":192,"in_reply_to":"7a740942_9c24230d","updated":"2015-12-16 02:08:11.000000000","message":"Changed it to unicode","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        for arg in args:"},{"line_number":202,"context_line":"            lpaths.append(arg)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        return \"/\".join(lpaths)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @staticmethod"},{"line_number":207,"context_line":"    def watch_join_group(group_id, callback):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_3cfbaf48","line":204,"updated":"2015-12-09 07:01:23.000000000","message":"Mix of binary and unicode here on py3.x, this won\u0027t end well.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        for arg in args:"},{"line_number":202,"context_line":"            lpaths.append(arg)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        return \"/\".join(lpaths)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @staticmethod"},{"line_number":207,"context_line":"    def watch_join_group(group_id, callback):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_5f8c087f","line":204,"in_reply_to":"7a740942_3cfbaf48","updated":"2015-12-16 02:08:11.000000000","message":"Changed it to unicode","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            wait_delay \u003d self.interval + (self.failure_backoff_count *"},{"line_number":264,"context_line":"                                          self.failure_backoff_increment)"},{"line_number":265,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":266,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":267,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":268,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_5c71db0a","line":265,"updated":"2015-12-09 07:01:23.000000000","message":"Why self.ttl - 1?","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"            wait_delay \u003d self.interval + (self.failure_backoff_count *"},{"line_number":264,"context_line":"                                          self.failure_backoff_increment)"},{"line_number":265,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":266,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":267,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":268,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_9fd91086","line":265,"in_reply_to":"7a740942_5c71db0a","updated":"2015-12-16 02:08:11.000000000","message":"anyway session will get destroyed after ttl-1 so better to check min(ttl-1, wait_delay)","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"6912b5632b75becba8ba2c2915fb22e6ca6cf067","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":266,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":267,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":268,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_5c48fbb2","line":268,"updated":"2015-12-09 07:01:23.000000000","message":"Pretty sure u meant to use wait_delay here, not self.interval.","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3b4e8beb6ad125e0fbe68d879fc2154084d00759","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":266,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":267,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":268,"context_line":"            self.stop_thread_event.wait(self.interval)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_5fe3a833","line":268,"in_reply_to":"7a740942_5c48fbb2","updated":"2015-12-16 02:08:11.000000000","message":"Done","commit_id":"6e046c2655f27a74f0f74de0600c8e61cae98261"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bf82ab0030393f17be89fde1e24c88b2cd19a002","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self._namespace \u003d self._to_unicode(namespace)"},{"line_number":142,"context_line":"        self._consul_timer \u003d None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def make_client(self):"},{"line_number":145,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":146,"context_line":"        \"\"\""},{"line_number":147,"context_line":"        return consul.Consul(self._host)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_4993eda3","line":144,"updated":"2015-12-16 05:56:39.000000000","message":"Out of curosity, why is this a public method?","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6fd78041dbf72a28c47db4f15134fd6f56bfbac6","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self._namespace \u003d self._to_unicode(namespace)"},{"line_number":142,"context_line":"        self._consul_timer \u003d None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def make_client(self):"},{"line_number":145,"context_line":"        \"\"\"Create a Consul Client."},{"line_number":146,"context_line":"        \"\"\""},{"line_number":147,"context_line":"        return consul.Consul(self._host)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_0cbb0cc6","line":144,"in_reply_to":"5a710552_4993eda3","updated":"2015-12-17 02:21:50.000000000","message":"Not needed made it private. Initially it was a staicmethod and being shared between the driver and lock class. Since now its only used by the Driver class making it private","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bf82ab0030393f17be89fde1e24c88b2cd19a002","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def unwatch_elected_as_leader(group_id, callback):"},{"line_number":230,"context_line":"        raise tooz.NotImplemented"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def _to_unicode(self, text):"},{"line_number":234,"context_line":"        \"\"\"Convert to unicode\"\"\""},{"line_number":235,"context_line":"        default_encoding \u003d \u0027utf-8\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_a9837155","line":232,"updated":"2015-12-16 05:56:39.000000000","message":"If this is a staticmethod it shouldn\u0027t be getting the \u0027self\u0027 argument.","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6fd78041dbf72a28c47db4f15134fd6f56bfbac6","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def unwatch_elected_as_leader(group_id, callback):"},{"line_number":230,"context_line":"        raise tooz.NotImplemented"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def _to_unicode(self, text):"},{"line_number":234,"context_line":"        \"\"\"Convert to unicode\"\"\""},{"line_number":235,"context_line":"        default_encoding \u003d \u0027utf-8\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_ccb424d3","line":232,"in_reply_to":"5a710552_a9837155","updated":"2015-12-17 02:21:50.000000000","message":"My bad.","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"bf82ab0030393f17be89fde1e24c88b2cd19a002","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def _to_unicode(self, text):"},{"line_number":234,"context_line":"        \"\"\"Convert to unicode\"\"\""},{"line_number":235,"context_line":"        default_encoding \u003d \u0027utf-8\u0027"},{"line_number":236,"context_line":"        if not isinstance(text, six.text_type):"},{"line_number":237,"context_line":"            text \u003d text.decode(default_encoding)"},{"line_number":238,"context_line":"        return text"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_c99fddb2","line":235,"updated":"2015-12-16 05:56:39.000000000","message":"Why is this a variable in the function, just use it in text.decode directly as a string, or put it as a class constant or something?","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6fd78041dbf72a28c47db4f15134fd6f56bfbac6","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def _to_unicode(self, text):"},{"line_number":234,"context_line":"        \"\"\"Convert to unicode\"\"\""},{"line_number":235,"context_line":"        default_encoding \u003d \u0027utf-8\u0027"},{"line_number":236,"context_line":"        if not isinstance(text, six.text_type):"},{"line_number":237,"context_line":"            text \u003d text.decode(default_encoding)"},{"line_number":238,"context_line":"        return text"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_4cc1142e","line":235,"in_reply_to":"5a710552_c99fddb2","updated":"2015-12-17 02:21:50.000000000","message":"Done","commit_id":"5ada8dece8298d9aafd1ac6acd8ac8db19b2a530"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3cdd3ae1508dabe3a22040201a0082e68e748fbd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param blocking: Whether its a blocking or non-blocking request"},{"line_number":49,"context_line":"        :return: Boolean whether able to acquire the lock or not"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        index \u003d None"},{"line_number":52,"context_line":"        # If lock is already acquired return immediately"},{"line_number":53,"context_line":"        if self.acquired:"},{"line_number":54,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_e787b9d5","line":51,"updated":"2015-12-17 02:42:09.000000000","message":"Move this after if check?","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"14bea79027cae4133a86ee67e354769ca5ececc7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param blocking: Whether its a blocking or non-blocking request"},{"line_number":49,"context_line":"        :return: Boolean whether able to acquire the lock or not"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        index \u003d None"},{"line_number":52,"context_line":"        # If lock is already acquired return immediately"},{"line_number":53,"context_line":"        if self.acquired:"},{"line_number":54,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_90fee269","line":51,"in_reply_to":"3a7e1126_e216c754","updated":"2015-12-17 19:06:40.000000000","message":"On line #61 explicitly passes index\u003dNone.","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"d298c2fcfbbee2f123cc872a4c23b5b1b2fdd541","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param blocking: Whether its a blocking or non-blocking request"},{"line_number":49,"context_line":"        :return: Boolean whether able to acquire the lock or not"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        index \u003d None"},{"line_number":52,"context_line":"        # If lock is already acquired return immediately"},{"line_number":53,"context_line":"        if self.acquired:"},{"line_number":54,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_e216c754","line":51,"in_reply_to":"3a7e1126_e787b9d5","updated":"2015-12-17 03:29:51.000000000","message":"Is just unneeded.","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"d298c2fcfbbee2f123cc872a4c23b5b1b2fdd541","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":84,"context_line":"                    # Block the request."},{"line_number":85,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":86,"context_line":"                                                          index\u003dindex)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    return self.acquired"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_4206bb21","line":86,"range":{"start_line":86,"start_character":69,"end_line":86,"end_character":70},"updated":"2015-12-17 03:29:51.000000000","message":"contents has changed here. Doesn\u0027t that mean that owner might be different?","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"14bea79027cae4133a86ee67e354769ca5ececc7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":84,"context_line":"                    # Block the request."},{"line_number":85,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":86,"context_line":"                                                          index\u003dindex)"},{"line_number":87,"context_line":"                else:"},{"line_number":88,"context_line":"                    return self.acquired"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_7d4c6e42","line":86,"range":{"start_line":86,"start_character":69,"end_line":86,"end_character":70},"in_reply_to":"3a7e1126_4206bb21","updated":"2015-12-17 19:06:40.000000000","message":"No. Owner is the session_id of the session who own\u0027s the lock.\n\nQuick test\n\nhttp://paste.openstack.org/show/482217/","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3cdd3ae1508dabe3a22040201a0082e68e748fbd","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"},{"line_number":125,"context_line":"    # Initialize the Consul driver."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # Default namespace when none is provided"},{"line_number":128,"context_line":"    TOOZ_NAMESPACE \u003d u\"tooz\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_8754b554","line":125,"updated":"2015-12-17 02:42:09.000000000","message":"It\u0027d be nice to fill this in in the format that other drivers are using, with information on how it works, why certain design choices/decisions were made..\n\nExample:\n\nhttps://github.com/openstack/tooz/blob/master/tooz/drivers/zookeeper.py#L371\n\nAnother example:\n\nhttps://github.com/openstack/tooz/blob/master/tooz/drivers/redis.py#L105","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"14bea79027cae4133a86ee67e354769ca5ececc7","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class ConsulDriver(coordination.CoordinationDriver):"},{"line_number":125,"context_line":"    # Initialize the Consul driver."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # Default namespace when none is provided"},{"line_number":128,"context_line":"    TOOZ_NAMESPACE \u003d u\"tooz\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_7d730e81","line":125,"in_reply_to":"3a7e1126_8754b554","updated":"2015-12-17 19:06:40.000000000","message":"Done","commit_id":"253740517425f0c02f181ce6b925c57d65953236"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"105c8fead30916c1ba1cff63cdd159576abb651f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # state accordingly."},{"line_number":59,"context_line":"        index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":60,"context_line":"                                              index\u003dNone)"},{"line_number":61,"context_line":"        owner \u003d contents.get(\u0027Session\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        while not self.acquired:"},{"line_number":64,"context_line":"            # Check if we have a lock owner. Owner will be None when"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a7b0d38_f9819a4e","line":61,"updated":"2015-12-22 20:14:42.000000000","message":"I think it would make more sense to move line #61 to line #64.","commit_id":"cc9bf72e154271665b8f4f2c16cadb54165c1dae"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"17f2a02a6490bc3fcc3a9a3941f8133a5b90708c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                # The value can be anything. To make it meaningful"},{"line_number":68,"context_line":"                # setting value as the session_id."},{"line_number":69,"context_line":"                self.acquired \u003d self._client.kv.put(key\u003dself._name,"},{"line_number":70,"context_line":"                                                    value\u003dself._session_id,"},{"line_number":71,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":72,"context_line":"            else:"},{"line_number":73,"context_line":"                if owner \u003d\u003d self._session_id:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_eecf2d7d","line":70,"range":{"start_line":70,"start_character":74,"end_line":70,"end_character":75},"updated":"2015-12-18 08:58:39.000000000","message":"the API docs suggest that None would be acceptable; if we have no need for the value perhaps we should use None ? (I\u0027m fine with _session_id).","commit_id":"cc9bf72e154271665b8f4f2c16cadb54165c1dae"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"105c8fead30916c1ba1cff63cdd159576abb651f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                # The value can be anything. To make it meaningful"},{"line_number":68,"context_line":"                # setting value as the session_id."},{"line_number":69,"context_line":"                self.acquired \u003d self._client.kv.put(key\u003dself._name,"},{"line_number":70,"context_line":"                                                    value\u003dself._session_id,"},{"line_number":71,"context_line":"                                                    acquire\u003dself._session_id)"},{"line_number":72,"context_line":"            else:"},{"line_number":73,"context_line":"                if owner \u003d\u003d self._session_id:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a7b0d38_d9f7fef3","line":70,"range":{"start_line":70,"start_character":74,"end_line":70,"end_character":75},"in_reply_to":"3a7e1126_eecf2d7d","updated":"2015-12-22 20:14:42.000000000","message":"Ok thanks!.","commit_id":"cc9bf72e154271665b8f4f2c16cadb54165c1dae"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"17f2a02a6490bc3fcc3a9a3941f8133a5b90708c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":83,"context_line":"                    # Block the request."},{"line_number":84,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":85,"context_line":"                                                          index\u003dindex)"},{"line_number":86,"context_line":"                else:"},{"line_number":87,"context_line":"                    return self.acquired"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_aec9257a","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":58},"updated":"2015-12-18 08:58:39.000000000","message":"So that pastebin seems to show exactly my concern.\n\nConcurrency: line 61 reads the current owner. Its None then. We then try to aquire on 69, but someone else has acquired it, so we enter this if block. We block until timeout or update. The update doesn\u0027t imply a release - it could be any change to the record. Now when we go back to line 66, owner is invalid: it should be the holder of the lock, so we know to not attempt the put, but instead we\u0027ll try the put *even though the lock is held*. And this will never self correct.\n\nIt works only because the put will fail immediately and then we\u0027ll fall back through to here; what we actually want to do (at least, as far as I can figure your intent out) is loop in this segment until owner becomes None, and then try again.\n\nOTOH if trying the put when owner is not None is fine, we can make this whole function a lot simpler I suspect by just doing that unconditionally (while still preserving the check for whether we already hold it ... for the case where the put fails.","commit_id":"cc9bf72e154271665b8f4f2c16cadb54165c1dae"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"105c8fead30916c1ba1cff63cdd159576abb651f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    # Get the Session for the Key we want to lock."},{"line_number":83,"context_line":"                    # Block the request."},{"line_number":84,"context_line":"                    index, contents \u003d self._client.kv.get(key\u003dself._name,"},{"line_number":85,"context_line":"                                                          index\u003dindex)"},{"line_number":86,"context_line":"                else:"},{"line_number":87,"context_line":"                    return self.acquired"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a7b0d38_39e72242","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":58},"in_reply_to":"3a7e1126_aec9257a","updated":"2015-12-22 20:14:42.000000000","message":"I agree that session who own\u0027s the lock should be known and hence proposed moving owner information from line #61 to line #64. Please let me know if that sounds good to you.\n\n\nI don\u0027t get this \"OTOH if trying the put when owner is not None is fine, we can make this whole function a lot simpler I suspect by just doing that unconditionally (while still preserving the check for whether we already hold it ... for the case where the put fails.\"\n\nwould like to discuss when you are free.","commit_id":"cc9bf72e154271665b8f4f2c16cadb54165c1dae"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"66d8f1cbc55e66b64f6c52210a819c0286d1b0ee","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        return self.paths_join(self._namespace, group_id)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    @staticmethod"},{"line_number":222,"context_line":"    def paths_join(*args):"},{"line_number":223,"context_line":"        lpaths \u003d []"},{"line_number":224,"context_line":"        for arg in args:"},{"line_number":225,"context_line":"            lpaths.append(ConsulDriver._to_unicode(arg))"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_cebfb3a8","line":222,"updated":"2016-01-04 23:47:39.000000000","message":"Does this need to be a public static method?","commit_id":"4d59d72b5f4d962b1775f0e4ffe8b52273608313"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7909f76719a15bd71883013f60f91a9e23825126","unresolved":false,"context_lines":[{"line_number":222,"context_line":"    def paths_join(*args):"},{"line_number":223,"context_line":"        lpaths \u003d []"},{"line_number":224,"context_line":"        for arg in args:"},{"line_number":225,"context_line":"            lpaths.append(ConsulDriver._to_unicode(arg))"},{"line_number":226,"context_line":"        return u\"/\".join(lpaths)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_6ea327b3","line":225,"updated":"2016-01-04 23:42:54.000000000","message":"Use self._to_unicode to just be consistent with your usage of self._from_unicode","commit_id":"4d59d72b5f4d962b1775f0e4ffe8b52273608313"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"2be9bf6226581e11bfb681c3f676b2b543002930","unresolved":false,"context_lines":[{"line_number":222,"context_line":"    def paths_join(*args):"},{"line_number":223,"context_line":"        lpaths \u003d []"},{"line_number":224,"context_line":"        for arg in args:"},{"line_number":225,"context_line":"            lpaths.append(ConsulDriver._to_unicode(arg))"},{"line_number":226,"context_line":"        return u\"/\".join(lpaths)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_2ecf6f2a","line":225,"in_reply_to":"fa69d971_6ea327b3","updated":"2016-01-04 23:56:47.000000000","message":"Since I was calling a static method from a static method in a class thought of using ClassName.static-method syntax.","commit_id":"4d59d72b5f4d962b1775f0e4ffe8b52273608313"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"from threading import Event"},{"line_number":22,"context_line":"from threading import Thread"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import consul"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_12b87b29","line":21,"updated":"2016-01-05 12:46:26.000000000","message":"This is not pep8 compliant, I wonder why pep8 is not yelling.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c8905369c2d87f6080ae0bda306b3a19e13b7b21","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"from threading import Event"},{"line_number":22,"context_line":"from threading import Thread"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import consul"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_bda7f409","line":21,"in_reply_to":"fa69d971_12b87b29","updated":"2016-01-05 16:38:48.000000000","message":"Ya, I wondered about that on a much earlier patch set, seems odd this isn\u0027t getting yelled about...","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":148,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":149,"context_line":"        options \u003d utils.collapse(options)"},{"line_number":150,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_328c9f7e","line":150,"updated":"2016-01-05 12:46:26.000000000","message":"Looks like it\u0027s not used.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":148,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":149,"context_line":"        options \u003d utils.collapse(options)"},{"line_number":150,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_b2003635","line":150,"in_reply_to":"fa69d971_328c9f7e","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":149,"context_line":"        options \u003d utils.collapse(options)"},{"line_number":150,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_52e03329","line":151,"updated":"2016-01-05 12:46:26.000000000","message":"ditto.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":149,"context_line":"        options \u003d utils.collapse(options)"},{"line_number":150,"context_line":"        self._parsed_url \u003d parsed_url"},{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_52fbfa46","line":151,"in_reply_to":"fa69d971_52e03329","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_43d4e3ea","line":154,"updated":"2016-01-05 12:46:26.000000000","message":"useless","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self._options \u003d options"},{"line_number":152,"context_line":"        self._host \u003d socket.gethostname()"},{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_f2a0ee43","line":154,"in_reply_to":"fa69d971_43d4e3ea","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"},{"line_number":158,"context_line":"        self._session_name \u003d member_id"},{"line_number":159,"context_line":"        self._ttl \u003d int(options.get(\u0027ttl\u0027, self.DEFAULT_TTL))"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_f20cc7ee","line":156,"updated":"2016-01-05 12:46:26.000000000","message":"useless too","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        # Construct client with default values"},{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"},{"line_number":158,"context_line":"        self._session_name \u003d member_id"},{"line_number":159,"context_line":"        self._ttl \u003d int(options.get(\u0027ttl\u0027, self.DEFAULT_TTL))"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_928c12db","line":156,"in_reply_to":"fa69d971_f20cc7ee","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"},{"line_number":158,"context_line":"        self._session_name \u003d member_id"},{"line_number":159,"context_line":"        self._ttl \u003d int(options.get(\u0027ttl\u0027, self.DEFAULT_TTL))"},{"line_number":160,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_63a3279e","line":157,"updated":"2016-01-05 12:46:26.000000000","message":"useless too","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self._client \u003d None"},{"line_number":155,"context_line":"        self._session_id \u003d None"},{"line_number":156,"context_line":"        self._node \u003d None"},{"line_number":157,"context_line":"        self._address \u003d None"},{"line_number":158,"context_line":"        self._session_name \u003d member_id"},{"line_number":159,"context_line":"        self._ttl \u003d int(options.get(\u0027ttl\u0027, self.DEFAULT_TTL))"},{"line_number":160,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_b287d6b3","line":157,"in_reply_to":"fa69d971_63a3279e","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":182,"context_line":"                                                       self._node,"},{"line_number":183,"context_line":"                                                       self._ttl)"},{"line_number":184,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":185,"context_line":"                                                 self._ttl,"},{"line_number":186,"context_line":"                                                 self.heartbeat)"},{"line_number":187,"context_line":"        self._consul_timer.start()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_03fb4b48","line":184,"updated":"2016-01-05 12:46:26.000000000","message":"You are not supposed to be calling heartbeat(). That\u0027s the responsability of the application.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":182,"context_line":"                                                       self._node,"},{"line_number":183,"context_line":"                                                       self._ttl)"},{"line_number":184,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":185,"context_line":"                                                 self._ttl,"},{"line_number":186,"context_line":"                                                 self.heartbeat)"},{"line_number":187,"context_line":"        self._consul_timer.start()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_b2aef62b","line":184,"in_reply_to":"fa69d971_03fb4b48","updated":"2016-01-07 03:04:25.000000000","message":"Done","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c8905369c2d87f6080ae0bda306b3a19e13b7b21","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":182,"context_line":"                                                       self._node,"},{"line_number":183,"context_line":"                                                       self._ttl)"},{"line_number":184,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":185,"context_line":"                                                 self._ttl,"},{"line_number":186,"context_line":"                                                 self.heartbeat)"},{"line_number":187,"context_line":"        self._consul_timer.start()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_5d4d983c","line":184,"in_reply_to":"fa69d971_03fb4b48","updated":"2016-01-05 16:38:48.000000000","message":"So this was a compromise that we talked about, should this driver work more like zookeeper (which has a thread to do the heartbeat) or more like redis/memcache/other, we flipped a coin (sort of) and said make it more like zookeeper, but we can also make it more like the others and require manual \u0027app triggered\u0027 heartbeating.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f267bcc57f5de934c62d359a193ee3c2cfd8e676","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":182,"context_line":"                                                       self._node,"},{"line_number":183,"context_line":"                                                       self._ttl)"},{"line_number":184,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":185,"context_line":"                                                 self._ttl,"},{"line_number":186,"context_line":"                                                 self.heartbeat)"},{"line_number":187,"context_line":"        self._consul_timer.start()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_cc7eb469","line":184,"in_reply_to":"fa69d971_5d4d983c","updated":"2016-01-05 18:09:52.000000000","message":"ZK does not have a thread to do the heartbeat in tooz. Kazoo has one I imagine, but that\u0027s not tooz problem.\n\nSo we should make all tooz driver work in the same way. If we decide we should have a thread, we\u0027ll do for *all* drivers. :)","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f5932618a349f413addc81459770836c6a230c25","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self._session_id \u003d self._client.session.create(self._session_name,"},{"line_number":182,"context_line":"                                                       self._node,"},{"line_number":183,"context_line":"                                                       self._ttl)"},{"line_number":184,"context_line":"        self._consul_timer \u003d ConsulIntervalTimer(self.PERIODIC_CHECK,"},{"line_number":185,"context_line":"                                                 self._ttl,"},{"line_number":186,"context_line":"                                                 self.heartbeat)"},{"line_number":187,"context_line":"        self._consul_timer.start()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_596a7def","line":184,"in_reply_to":"fa69d971_cc7eb469","updated":"2016-01-05 23:07:50.000000000","message":"Sure, fair enough, meant kazoo (not zk).","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        return text"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"class HeartBeatThread(Thread):"},{"line_number":268,"context_line":"    def __init__(self):"},{"line_number":269,"context_line":"        super(Thread, self).__init__()"},{"line_number":270,"context_line":"        self.stop_thread_event \u003d Event()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_c362133e","line":267,"updated":"2016-01-05 12:46:26.000000000","message":"Not sure this is super useful since it\u0027s only used once.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c6ebe2977f47f3e9f7d6b9d967c67c8a15ec8538","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        return text"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"class HeartBeatThread(Thread):"},{"line_number":268,"context_line":"    def __init__(self):"},{"line_number":269,"context_line":"        super(Thread, self).__init__()"},{"line_number":270,"context_line":"        self.stop_thread_event \u003d Event()"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_3250c631","line":267,"in_reply_to":"fa69d971_c362133e","updated":"2016-01-07 03:04:25.000000000","message":"As we discussed will remove this for now. If we decide to take the route to have background thread for all drivers we can think about this later.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"96a723c7cc2e411f8fb8bd4c438d0b618b213820","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":301,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":302,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":303,"context_line":"            self.stop_thread_event.wait(wait_delay)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_a3d4bfbc","line":303,"updated":"2016-01-05 12:46:26.000000000","message":"You should use the retrying module for that.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"619af9335b4353811dfe5660c4a09ec922bf9268","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":301,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":302,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":303,"context_line":"            self.stop_thread_event.wait(wait_delay)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_fd7a4c87","line":303,"in_reply_to":"fa69d971_a3d4bfbc","updated":"2016-01-05 16:36:34.000000000","message":"Usually I\u0027d agree, except retrying module is time.sleep based, so it can\u0027t be stopped when its sleeping, using an event and wait() here can be stopped before the sleep/wait period is up.","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f267bcc57f5de934c62d359a193ee3c2cfd8e676","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            wait_delay \u003d min(self.ttl - 1, wait_delay)"},{"line_number":301,"context_line":"            LOG.debug(\"Worker function %s will run again in %0.2f seconds\","},{"line_number":302,"context_line":"                      self.worker_function.__name__, wait_delay)"},{"line_number":303,"context_line":"            self.stop_thread_event.wait(wait_delay)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa69d971_ccf554ed","line":303,"in_reply_to":"fa69d971_fd7a4c87","updated":"2016-01-05 18:09:52.000000000","message":"Since that should go away anyway, I won\u0027t dig into it :)","commit_id":"4f70b2bc4c25966e40736031cede30a483b4a38e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c90cf526c02e40ca662dfef9baa91410aa5788f8","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":144,"context_line":"        super(ConsulDriver, self).__init__()"},{"line_number":145,"context_line":"        options \u003d utils.collapse(options)"},{"line_number":146,"context_line":"        self._host \u003d \u0027127.0.0.1\u0027"},{"line_number":147,"context_line":"        # Construct client with default values"},{"line_number":148,"context_line":"        self._session_id \u003d None"},{"line_number":149,"context_line":"        self._session_name \u003d member_id"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a5de9d1_6db1108f","line":146,"updated":"2016-01-28 19:24:00.000000000","message":"This should likely be the following:\n\n  self._host \u003d parsed_url.netloc or \u0027localhost:8500\u0027","commit_id":"289517f04cf66c8cdf7343a72bce01a044891b16"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d5c4e23ecd8dac06153920bd0f2e826563bba946","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # Construct client with default values"},{"line_number":147,"context_line":"        self._session_id \u003d None"},{"line_number":148,"context_line":"        self._session_name \u003d member_id"},{"line_number":149,"context_line":"        self._ttl \u003d self.DEFAULT_TTL"},{"line_number":150,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":151,"context_line":"        self._namespace \u003d self._to_unicode(namespace)"},{"line_number":152,"context_line":"        self._consul_timer \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a5de9d1_db5f823f","line":149,"updated":"2016-01-29 09:48:06.000000000","message":"self._ttl \u003d options.get(\"ttl\", self.DEFAULT_TTL)\n\nso a user can pass it?","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e40f0b9ba7519b56e99be59feb5583391ab37298","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # Construct client with default values"},{"line_number":147,"context_line":"        self._session_id \u003d None"},{"line_number":148,"context_line":"        self._session_name \u003d member_id"},{"line_number":149,"context_line":"        self._ttl \u003d self.DEFAULT_TTL"},{"line_number":150,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":151,"context_line":"        self._namespace \u003d self._to_unicode(namespace)"},{"line_number":152,"context_line":"        self._consul_timer \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a5de9d1_24c20735","line":149,"in_reply_to":"7a5de9d1_2bee68b4","updated":"2016-01-30 12:36:17.000000000","message":"Why can\u0027t you run tox -e py27 locally?","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3aa23f07c50d58696262dfc57c159eaa4efee6a6","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # Construct client with default values"},{"line_number":147,"context_line":"        self._session_id \u003d None"},{"line_number":148,"context_line":"        self._session_name \u003d member_id"},{"line_number":149,"context_line":"        self._ttl \u003d self.DEFAULT_TTL"},{"line_number":150,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":151,"context_line":"        self._namespace \u003d self._to_unicode(namespace)"},{"line_number":152,"context_line":"        self._consul_timer \u003d None"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a5de9d1_2bee68b4","line":149,"in_reply_to":"7a5de9d1_db5f823f","updated":"2016-01-29 19:18:47.000000000","message":"Again was seeing error in Jenkins so thought to pass hard coded value. I can\u0027t run tox -e py27 (uni test locally) and hence have to try out changes by pushing changes as part of the patch to see how jenkins behaves).\n\nPlease note will make it better when i overcome all the jenkins related issues with consul tests.","commit_id":"abed81749982e2078d9a46ecaad5fa5894216447"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"233e17d4e782e9a098c42e9845e6cf56f73cd58e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        group_path \u003d self.paths_join(self._namespace, group_id)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        def _get_members():"},{"line_number":202,"context_line":"            self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        return ConsulFutureResult(self._executor.submit(_get_members))"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_96b92a7c","line":202,"updated":"2016-02-23 06:14:17.000000000","message":"What\u0027s the return result of this function?\n\nProbably should be all the members right?","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8bb23d91e13cd6fb6253f2ea439a366720629d51","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        group_path \u003d self.paths_join(self._namespace, group_id)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        def _get_members():"},{"line_number":202,"context_line":"            self._client.kv.get(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        return ConsulFutureResult(self._executor.submit(_get_members))"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_83c7c063","line":202,"in_reply_to":"bae84128_96b92a7c","updated":"2016-02-24 17:55:50.000000000","message":"Yes","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"233e17d4e782e9a098c42e9845e6cf56f73cd58e","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        def _create_group():"},{"line_number":210,"context_line":"            self._client.kv.put(key\u003dgroup_path,"},{"line_number":211,"context_line":"                                value\u003dself._from_unicode(group_id))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        return ConsulFutureResult(self._executor.submit(_create_group))"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_16a6ba52","line":210,"updated":"2016-02-23 06:14:17.000000000","message":"Any expected return result of this local method?","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8bb23d91e13cd6fb6253f2ea439a366720629d51","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        def _create_group():"},{"line_number":210,"context_line":"            self._client.kv.put(key\u003dgroup_path,"},{"line_number":211,"context_line":"                                value\u003dself._from_unicode(group_id))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        return ConsulFutureResult(self._executor.submit(_create_group))"}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_e3ae8c97","line":210,"in_reply_to":"bae84128_16a6ba52","updated":"2016-02-24 17:55:50.000000000","message":"Boolean T/F","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"233e17d4e782e9a098c42e9845e6cf56f73cd58e","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        def _delete_group():"},{"line_number":219,"context_line":"            self._client.kv.delete(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        return ConsulFutureResult(self._executor.submit(_delete_group))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_566a02ef","line":219,"updated":"2016-02-23 06:14:17.000000000","message":"Same question.","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"8bb23d91e13cd6fb6253f2ea439a366720629d51","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        group_path \u003d self._path_group(group_id)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        def _delete_group():"},{"line_number":219,"context_line":"            self._client.kv.delete(key\u003dgroup_path, recurse\u003dTrue)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        return ConsulFutureResult(self._executor.submit(_delete_group))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bae84128_639b9c73","line":219,"in_reply_to":"bae84128_566a02ef","updated":"2016-02-24 17:55:50.000000000","message":"Sure","commit_id":"599c16159ce0865edea0ca711c04fe04f71ac710"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c68f9ae103017db9cde339ba9f789b7849846666","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                                                       ttl\u003dself._ttl)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _stop(self):"},{"line_number":150,"context_line":"        self._executor.stop()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_lock(self, name):"},{"line_number":153,"context_line":"        real_name \u003d self._paths_join(self._namespace, u\"locks\", name)"}],"source_content_type":"text/x-python","patch_set":46,"id":"dab17558_98d5cb1d","line":150,"updated":"2016-05-10 10:47:54.000000000","message":"Stupid question, no need to unregister in the catalog?","commit_id":"45da0b17330f17d0a5a1d8a041f77b8ed2d916cf"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"a614d9a1011d94ef178c4b9f6ec8ce4fd4ffa333","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from tooz import utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ConsulLock(locking.Lock):"}],"source_content_type":"text/x-python","patch_set":48,"id":"dab17558_1ad96184","line":32,"updated":"2016-05-12 08:11:59.000000000","message":"unused also","commit_id":"bcda86efc650e9c135ba67693166b20fd622564c"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"568b2940133f8c701646c5a476f803dbdefa2814","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from tooz import utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ConsulLock(locking.Lock):"}],"source_content_type":"text/x-python","patch_set":48,"id":"dab17558_3acd4587","line":32,"in_reply_to":"dab17558_1ad96184","updated":"2016-05-12 08:20:49.000000000","message":"Done","commit_id":"bcda86efc650e9c135ba67693166b20fd622564c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"60f7944a4df7dde75372d88a9f6bd4b65593dbf7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":126,"context_line":"        self._namespace \u003d encodeutils.safe_decode(namespace)"},{"line_number":127,"context_line":"        self._client \u003d None"},{"line_number":128,"context_line":"        self._last_state \u003d None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _start(self):"},{"line_number":131,"context_line":"        \"\"\"Create a client, register a node and create a session.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"dab17558_7ab86d2b","line":128,"updated":"2016-05-12 08:11:29.000000000","message":"unused","commit_id":"bcda86efc650e9c135ba67693166b20fd622564c"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"568b2940133f8c701646c5a476f803dbdefa2814","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        namespace \u003d options.get(\u0027namespace\u0027, self.TOOZ_NAMESPACE)"},{"line_number":126,"context_line":"        self._namespace \u003d encodeutils.safe_decode(namespace)"},{"line_number":127,"context_line":"        self._client \u003d None"},{"line_number":128,"context_line":"        self._last_state \u003d None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _start(self):"},{"line_number":131,"context_line":"        \"\"\"Create a client, register a node and create a session.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"dab17558_1aca016f","line":128,"in_reply_to":"dab17558_7ab86d2b","updated":"2016-05-12 08:20:49.000000000","message":"Done","commit_id":"bcda86efc650e9c135ba67693166b20fd622564c"}],"tooz/utils.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c68f9ae103017db9cde339ba9f789b7849846666","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    return collapsed"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"def to_unicode(text, encoding\u003d\u0027utf8\u0027):"},{"line_number":185,"context_line":"    \"\"\"Return the unicode representation of string (if not already unicode).\"\"\""},{"line_number":186,"context_line":"    if not isinstance(text, six.text_type):"},{"line_number":187,"context_line":"        text \u003d text.decode(encoding)"}],"source_content_type":"text/x-python","patch_set":46,"id":"dab17558_f87b3726","line":184,"updated":"2016-05-10 10:47:54.000000000","message":"use oslo_utils.encodeutils.safe_decode instead","commit_id":"45da0b17330f17d0a5a1d8a041f77b8ed2d916cf"}]}
