)]}'
{"ironicclient/common/http.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7f063282377391b7d2a163574e6b74eb03e7289c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"API_VERSION_SELECTED_STATES \u003d (\u0027user\u0027, \u0027negotiated\u0027, \u0027default\u0027)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# TODO(dtantsur): make these configurable"},{"line_number":52,"context_line":"MAX_RETRIES \u003d 5"},{"line_number":53,"context_line":"RETRY_DELAY \u003d 2"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5aa745d1_03875710","line":51,"updated":"2015-04-16 13:00:49.000000000","message":"+1","commit_id":"d10b6f23ca4a4ff58edc5989d1486b2fd7441b52"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d08b06f5b6ec1330cf1cb4081508f5eb9e861e6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    \"\"\"Wrapper for _http_request adding support for retries.\"\"\""},{"line_number":152,"context_line":"    @functools.wraps(meth)"},{"line_number":153,"context_line":"    def wrapper(self, url, method, **kwargs):"},{"line_number":154,"context_line":"        if not getattr(self, \u0027retry_on_conflict\u0027, False):"},{"line_number":155,"context_line":"            return meth(self, url, method, **kwargs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        num_attempts \u003d (getattr(self, \u0027conflict_max_retries\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_d53120ee","line":154,"updated":"2015-04-16 14:51:02.000000000","message":"if conflict_max_retries \u003e\u003d 1:\n    return meth(self, url, method, **kwargs)\n\nnit: \"meth\" may not be the best variable name :-)","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48f89dd889117ebbf8b11c17af1c9cae9c92d9c6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    \"\"\"Wrapper for _http_request adding support for retries.\"\"\""},{"line_number":152,"context_line":"    @functools.wraps(meth)"},{"line_number":153,"context_line":"    def wrapper(self, url, method, **kwargs):"},{"line_number":154,"context_line":"        if not getattr(self, \u0027retry_on_conflict\u0027, False):"},{"line_number":155,"context_line":"            return meth(self, url, method, **kwargs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        num_attempts \u003d (getattr(self, \u0027conflict_max_retries\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_35cf2481","line":154,"in_reply_to":"5aa745d1_d53120ee","updated":"2015-04-16 14:55:20.000000000","message":"1. we have retry_on_conflict as well, it\u0027s for using the defaults\n\n2. oh man, I didn\u0027t realize :D","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d08b06f5b6ec1330cf1cb4081508f5eb9e861e6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        num_attempts \u003d (getattr(self, \u0027conflict_max_retries\u0027, None)"},{"line_number":158,"context_line":"                        or DEFAULT_MAX_RETRIES)"},{"line_number":159,"context_line":"        delay \u003d (getattr(self, \u0027conflict_retry_interval\u0027, None)"},{"line_number":160,"context_line":"                 or DEFAULT_RETRY_INTERVAL)"},{"line_number":161,"context_line":"        for attempt in range(1, num_attempts + 1):"},{"line_number":162,"context_line":"            try:"},{"line_number":163,"context_line":"                return meth(self, url, method, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_1549c831","line":160,"updated":"2015-04-16 14:51:02.000000000","message":"We can make sure those values are always filled if we set the default value on L191-L193. So that we don\u0027t have to do a getattr all the time","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48f89dd889117ebbf8b11c17af1c9cae9c92d9c6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        num_attempts \u003d (getattr(self, \u0027conflict_max_retries\u0027, None)"},{"line_number":158,"context_line":"                        or DEFAULT_MAX_RETRIES)"},{"line_number":159,"context_line":"        delay \u003d (getattr(self, \u0027conflict_retry_interval\u0027, None)"},{"line_number":160,"context_line":"                 or DEFAULT_RETRY_INTERVAL)"},{"line_number":161,"context_line":"        for attempt in range(1, num_attempts + 1):"},{"line_number":162,"context_line":"            try:"},{"line_number":163,"context_line":"                return meth(self, url, method, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_d5c5a05b","line":160,"in_reply_to":"5aa745d1_1549c831","updated":"2015-04-16 14:55:20.000000000","message":"Done","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d08b06f5b6ec1330cf1cb4081508f5eb9e861e6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            \u0027api_version_select_state\u0027, \u0027default\u0027)"},{"line_number":191,"context_line":"        self.retry_on_conflict \u003d kwargs.pop(\u0027retry_on_conflict\u0027, False)"},{"line_number":192,"context_line":"        self.conflict_max_retries \u003d kwargs.pop(\u0027max_retries\u0027, None)"},{"line_number":193,"context_line":"        self.conflict_retry_interval \u003d kwargs.pop(\u0027retry_interval\u0027, None)"},{"line_number":194,"context_line":"        self.connection_params \u003d self.get_connection_params(endpoint, **kwargs)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_eafc3740","line":193,"updated":"2015-04-16 14:51:02.000000000","message":"self.conflict_max_retries \u003d kwargs.pop(\u0027max_retries\u0027, DEFAULT_MAX_RETRIES)\n\nself.conflict_retry_interval \u003d kwargs.pop(\u0027retry_interval\u0027, DEFAULT_RETRY_INTERVAL)","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48f89dd889117ebbf8b11c17af1c9cae9c92d9c6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            \u0027api_version_select_state\u0027, \u0027default\u0027)"},{"line_number":191,"context_line":"        self.retry_on_conflict \u003d kwargs.pop(\u0027retry_on_conflict\u0027, False)"},{"line_number":192,"context_line":"        self.conflict_max_retries \u003d kwargs.pop(\u0027max_retries\u0027, None)"},{"line_number":193,"context_line":"        self.conflict_retry_interval \u003d kwargs.pop(\u0027retry_interval\u0027, None)"},{"line_number":194,"context_line":"        self.connection_params \u003d self.get_connection_params(endpoint, **kwargs)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_75ab6c8a","line":193,"in_reply_to":"5aa745d1_eafc3740","updated":"2015-04-16 14:55:20.000000000","message":"Done","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"df591fc253b8934956c1f81facd3c95daae5de1b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            try:"},{"line_number":159,"context_line":"                return func(self, url, method, **kwargs)"},{"line_number":160,"context_line":"            except exc.Conflict as error:"},{"line_number":161,"context_line":"                msg \u003d (\"Error contacting Ironic server: %(error)s. \""},{"line_number":162,"context_line":"                       \"Attempt %(attempt)d of %(total)d\" %"},{"line_number":163,"context_line":"                       {\u0027attempt\u0027: attempt,"},{"line_number":164,"context_line":"                        \u0027total\u0027: self.conflict_max_retries,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aa745d1_e0c1f381","line":161,"updated":"2015-04-16 16:44:36.000000000","message":"i18n needed here?","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"faa229d4e3015904f0bb49fcc4fa93aef8961f9c","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            try:"},{"line_number":159,"context_line":"                return func(self, url, method, **kwargs)"},{"line_number":160,"context_line":"            except exc.Conflict as error:"},{"line_number":161,"context_line":"                msg \u003d (\"Error contacting Ironic server: %(error)s. \""},{"line_number":162,"context_line":"                       \"Attempt %(attempt)d of %(total)d\" %"},{"line_number":163,"context_line":"                       {\u0027attempt\u0027: attempt,"},{"line_number":164,"context_line":"                        \u0027total\u0027: self.conflict_max_retries,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_4e04757d","line":161,"in_reply_to":"5aa745d1_e0c1f381","updated":"2015-04-17 07:32:50.000000000","message":"I don\u0027t see i18n used anywhere in this file, so I thought it should be added separately, if we decide so","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4d2329a5f602743bfcdcac4cc712ba7f4e8e746a","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    @functools.wraps(func)"},{"line_number":153,"context_line":"    def wrapper(self, url, method, **kwargs):"},{"line_number":154,"context_line":"        num_attempts \u003d self.conflict_max_retries + 1"},{"line_number":155,"context_line":"        for attempt in range(1, num_attempts + 1):"},{"line_number":156,"context_line":"            try:"},{"line_number":157,"context_line":"                return func(self, url, method, **kwargs)"},{"line_number":158,"context_line":"            except exc.Conflict as error:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ab451fb_7f310eec","line":155,"updated":"2015-04-17 13:51:30.000000000","message":"Why +1 on both lines?","commit_id":"4e6dc4032964277d45fbe5d1c028d1ee1a0f7857"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ea2eaa924ccdc4e78536eeaee5439217b38a74b0","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    @functools.wraps(func)"},{"line_number":153,"context_line":"    def wrapper(self, url, method, **kwargs):"},{"line_number":154,"context_line":"        num_attempts \u003d self.conflict_max_retries + 1"},{"line_number":155,"context_line":"        for attempt in range(1, num_attempts + 1):"},{"line_number":156,"context_line":"            try:"},{"line_number":157,"context_line":"                return func(self, url, method, **kwargs)"},{"line_number":158,"context_line":"            except exc.Conflict as error:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ab451fb_ff13de0b","line":155,"in_reply_to":"3ab451fb_7f310eec","updated":"2015-04-17 13:55:59.000000000","message":"1. total number of attempts \u003d 1 main attempt + N retries\n\n2. range(1, N + 1) \u003d\u003d range(0, N) but is more convenient","commit_id":"4e6dc4032964277d45fbe5d1c028d1ee1a0f7857"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b08c95e770293e61031d06b8f0666087f37adb86","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    @functools.wraps(func)"},{"line_number":153,"context_line":"    def wrapper(self, url, method, **kwargs):"},{"line_number":154,"context_line":"        num_attempts \u003d self.conflict_max_retries + 1"},{"line_number":155,"context_line":"        for attempt in range(1, num_attempts + 1):"},{"line_number":156,"context_line":"            try:"},{"line_number":157,"context_line":"                return func(self, url, method, **kwargs)"},{"line_number":158,"context_line":"            except exc.Conflict as error:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ab451fb_dfe70211","line":155,"in_reply_to":"3ab451fb_7f310eec","updated":"2015-04-17 13:55:57.000000000","message":"Now I understand.  Retries vs attempts :)","commit_id":"4e6dc4032964277d45fbe5d1c028d1ee1a0f7857"}],"ironicclient/shell.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7f063282377391b7d2a163574e6b74eb03e7289c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                                 \u0027\"publicURL\"\u0027)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        parser.add_argument(\u0027--os_endpoint_type\u0027,"},{"line_number":222,"context_line":"                            help\u003dargparse.SUPPRESS)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # FIXME(gyee): this method should come from python-keystoneclient."},{"line_number":225,"context_line":"        # Will refactor this code once it is available."}],"source_content_type":"text/x-python","patch_set":2,"id":"5aa745d1_03bbd773","line":222,"updated":"2015-04-16 13:00:49.000000000","message":"What about?\n\n parser.add_argument(\u0027--max-retries\u0027,\n                     help\u003d\u0027...\u0027,\n                     default\u003dcliutils.env(\u0027IRONIC_MAX_RETRIES\u0027, default\u003d\u00275\u0027)\n\n parser.add_argument(\u0027--retry-interval\u0027,\n                    help\u003d\u0027...\u0027,\n                    default\u003dcliutils.env(\u0027IRONIC_RETRY_INTERVAL\u0027, default\u003d\u00272\u0027))","commit_id":"d10b6f23ca4a4ff58edc5989d1486b2fd7441b52"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7f063282377391b7d2a163574e6b74eb03e7289c","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":503,"context_line":"            }"},{"line_number":504,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":505,"context_line":"        # TODO(dtantsur): make it configurable?"},{"line_number":506,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d True"},{"line_number":507,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"},{"line_number":508,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5aa745d1_23e8137c","line":505,"updated":"2015-04-16 13:00:49.000000000","message":"I think we can make the number of retries and the interval configurable, if someone doesn\u0027t want to retry they can just pass \"--max-retries 1\" (or something like that)","commit_id":"d10b6f23ca4a4ff58edc5989d1486b2fd7441b52"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"09be9675bb087d38ba783ded1f478ca150a4d236","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        parser.add_argument(\u0027--retry-interval\u0027, type\u003dint,"},{"line_number":234,"context_line":"                            help\u003d\u0027Amount of time (in seconds) between retries \u0027"},{"line_number":235,"context_line":"                            \u0027in case of conflict error (HTTP 509). \u0027"},{"line_number":236,"context_line":"                            \u0027Defaults to env[IRONIC_RETRY_INTERVAL].\u0027,"},{"line_number":237,"context_line":"                            default\u003dcliutils.env("},{"line_number":238,"context_line":"                                \u0027IRONIC_RETRY_INTERVAL\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_9065e646","line":235,"updated":"2015-04-16 15:15:43.000000000","message":"s/509/409/","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d08b06f5b6ec1330cf1cb4081508f5eb9e861e6","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":520,"context_line":"            }"},{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_7557ec02","line":522,"updated":"2015-04-16 14:51:02.000000000","message":"retry_on_conflict doesn\u0027t need to be passed as an option right? We can determine that by looking at the max_retries","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"e713461c6269145c300ac4d8ceaebca26cb61426","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":520,"context_line":"            }"},{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_90ee0621","line":522,"in_reply_to":"5aa745d1_1011d652","updated":"2015-04-16 15:06:37.000000000","message":"Right, I think it\u0027s good to have on for API too. For the nova driver for example we implemented that retry mechanism there because without retries it makes thing very unreliable. \n\nIf someone really doesn\u0027t want it so he can set the max-retries to 1\n\nAnyway my 0.2c","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d92acc98dfeb75824d8082c4df3bed1e3d921a14","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":520,"context_line":"            }"},{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_95f39873","line":522,"in_reply_to":"5aa745d1_357de41c","updated":"2015-04-16 15:02:06.000000000","message":"by default they will use this feature no? The only way to not use this feature right now is of they set max-retries to 1 (since setting retry_on_conflict is not an user option)","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48f89dd889117ebbf8b11c17af1c9cae9c92d9c6","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":520,"context_line":"            }"},{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_357de41c","line":522,"in_reply_to":"5aa745d1_7557ec02","updated":"2015-04-16 14:55:20.000000000","message":"I don\u0027t want to force people to set max-retries to use this feature","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"99831b8072dc87997ba039582c0ca5a2aee0032d","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                \u0027password\u0027: args.os_password,"},{"line_number":520,"context_line":"            }"},{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_1011d652","line":522,"in_reply_to":"5aa745d1_95f39873","updated":"2015-04-16 15:03:22.000000000","message":"it\u0027s on for CLI by default, but off for API. if we want it always on, I can remove this option.","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4d08b06f5b6ec1330cf1cb4081508f5eb9e861e6","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_b574549c","line":524,"updated":"2015-04-16 14:51:02.000000000","message":"Also should we do some sanity check here?\n\nCheck if the values are \u003e\u003d 0?","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"48f89dd889117ebbf8b11c17af1c9cae9c92d9c6","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        kwargs[\u0027os_ironic_api_version\u0027] \u003d os_ironic_api_version"},{"line_number":522,"context_line":"        kwargs[\u0027retry_on_conflict\u0027] \u003d args.max_retries \u003e 1"},{"line_number":523,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":524,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":525,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aa745d1_35a4c4a4","line":524,"in_reply_to":"5aa745d1_b574549c","updated":"2015-04-16 14:55:20.000000000","message":"Done","commit_id":"e3044b17716cfb4df1c209b1c0974d6538938a05"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8fa4d5f9ffc4bebd7425690931ac6cf817696fcb","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        parser.add_argument(\u0027--max-retries\u0027, type\u003dint,"},{"line_number":226,"context_line":"                            help\u003d\u0027Maximum number of retries in case of \u0027"},{"line_number":227,"context_line":"                            \u0027conflict error (HTTP 409). \u0027"},{"line_number":228,"context_line":"                            \u0027Defaults to env[IRONIC_MAX_RETRIES].\u0027,"},{"line_number":229,"context_line":"                            default\u003dcliutils.env("},{"line_number":230,"context_line":"                                \u0027IRONIC_MAX_RETRIES\u0027,"},{"line_number":231,"context_line":"                                default\u003dstr(http.DEFAULT_MAX_RETRIES)))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_e9ce9082","line":228,"updated":"2015-04-17 13:17:44.000000000","message":"Maybe \"Defaults to env[IRONIC_MAX_RETRIES] or DEFAULT_MAX_RETRIES\"?","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8fa4d5f9ffc4bebd7425690931ac6cf817696fcb","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        parser.add_argument(\u0027--retry-interval\u0027, type\u003dint,"},{"line_number":234,"context_line":"                            help\u003d\u0027Amount of time (in seconds) between retries \u0027"},{"line_number":235,"context_line":"                            \u0027in case of conflict error (HTTP 409). \u0027"},{"line_number":236,"context_line":"                            \u0027Defaults to env[IRONIC_RETRY_INTERVAL].\u0027,"},{"line_number":237,"context_line":"                            default\u003dcliutils.env("},{"line_number":238,"context_line":"                                \u0027IRONIC_RETRY_INTERVAL\u0027,"},{"line_number":239,"context_line":"                                default\u003dstr(http.DEFAULT_RETRY_INTERVAL)))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_c9cbd471","line":236,"updated":"2015-04-17 13:17:44.000000000","message":"Ditto","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8fa4d5f9ffc4bebd7425690931ac6cf817696fcb","unresolved":false,"context_lines":[{"line_number":524,"context_line":"                                     \"--max-retries\"))"},{"line_number":525,"context_line":"        if args.retry_interval \u003c 1:"},{"line_number":526,"context_line":"            raise exc.CommandError(_(\"You must provide value \u003e\u003d 1 for \""},{"line_number":527,"context_line":"                                     \"--retry-intreval\"))"},{"line_number":528,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"},{"line_number":529,"context_line":"        kwargs[\u0027retry_interval\u0027] \u003d args.retry_interval"},{"line_number":530,"context_line":"        client \u003d iroclient.Client(api_major_version, endpoint, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_c992b457","line":527,"updated":"2015-04-17 13:17:44.000000000","message":"s/intreval/interval/","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"df77fea2c94daf764762e7e19077e1979e47754a","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        if args.max_retries \u003c 0:"},{"line_number":526,"context_line":"            raise exc.CommandError(_(\"You must provide value \u003e\u003d 0 for \""},{"line_number":527,"context_line":"                                     \"--max-retries\"))"},{"line_number":528,"context_line":"        if args.retry_interval \u003c 1:"},{"line_number":529,"context_line":"            raise exc.CommandError(_(\"You must provide value \u003e\u003d 1 for \""},{"line_number":530,"context_line":"                                     \"--retry-interval\"))"},{"line_number":531,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ab451fb_24b6dd8a","line":528,"updated":"2015-04-17 13:45:38.000000000","message":"I would say that \u003e 0 here too..\n\ninterval 0 \u003d\u003d no interval.\n\nBut it\u0027s not a big deal","commit_id":"4e6dc4032964277d45fbe5d1c028d1ee1a0f7857"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ea2eaa924ccdc4e78536eeaee5439217b38a74b0","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        if args.max_retries \u003c 0:"},{"line_number":526,"context_line":"            raise exc.CommandError(_(\"You must provide value \u003e\u003d 0 for \""},{"line_number":527,"context_line":"                                     \"--max-retries\"))"},{"line_number":528,"context_line":"        if args.retry_interval \u003c 1:"},{"line_number":529,"context_line":"            raise exc.CommandError(_(\"You must provide value \u003e\u003d 1 for \""},{"line_number":530,"context_line":"                                     \"--retry-interval\"))"},{"line_number":531,"context_line":"        kwargs[\u0027max_retries\u0027] \u003d args.max_retries"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ab451fb_5f2c124a","line":528,"in_reply_to":"3ab451fb_24b6dd8a","updated":"2015-04-17 13:55:59.000000000","message":"this way we\u0027ll consume all attempts very quickly.","commit_id":"4e6dc4032964277d45fbe5d1c028d1ee1a0f7857"}],"ironicclient/tests/unit/test_http.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7f063282377391b7d2a163574e6b74eb03e7289c","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                                        utils.FakeConnection(good_resp)])"},{"line_number":398,"context_line":"        response, body_iter \u003d client._http_request(\u0027/v1/resources\u0027, \u0027GET\u0027)"},{"line_number":399,"context_line":"        self.assertEqual(200, response.status)"},{"line_number":400,"context_line":"        self.assertEqual(1, mock_negotiate.call_count)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"class SessionClientTest(utils.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aa745d1_c3096f33","line":400,"updated":"2015-04-16 13:00:49.000000000","message":"good catch :-)","commit_id":"d10b6f23ca4a4ff58edc5989d1486b2fd7441b52"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8fa4d5f9ffc4bebd7425690931ac6cf817696fcb","unresolved":false,"context_lines":[{"line_number":473,"context_line":"    def setUp(self):"},{"line_number":474,"context_line":"        super(RetriesTestCase, self).setUp()"},{"line_number":475,"context_line":"        old_retry_delay \u003d http.DEFAULT_RETRY_INTERVAL"},{"line_number":476,"context_line":"        http.DEFAULT_RETRY_INTERVAL \u003d 0.001"},{"line_number":477,"context_line":"        http.SessionClient.conflict_retry_interval \u003d 0.001"},{"line_number":478,"context_line":"        self.addCleanup(setattr, http, \u0027DEFAULT_RETRY_INTERVAL\u0027,"},{"line_number":479,"context_line":"                        old_retry_delay)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ab451fb_c9799431","line":476,"updated":"2015-04-17 13:17:44.000000000","message":"Is this used instead of mocking time.sleep? I think I\u0027d prefer the latter.","commit_id":"d317e30122b3f646079a93a73f6a2edf81d40612"}]}
