)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"8bb99306a890d17d8688b73a5a8cc6270c2982d2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch extend the @passthru and @driver_passthru decorators to"},{"line_number":10,"context_line":"add support to vendor to determine whether their methods should run"},{"line_number":11,"context_line":"synchrounously or asynchrounously."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A new flag was added to the decorators called \"iamadummy\" (I am a dummy),"},{"line_number":14,"context_line":"if True means to run the method synchrounously, docstrings were updated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a8c0949_ae99da20","line":11,"updated":"2014-11-07 14:14:49.000000000","message":"I think you want \u0027synchronously\u0027 and \u0027asynchronously\u0027 - just a global search and replace :)","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7a0945509e34f2b99c9bacf85444542dd678fcf7","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch extend the @passthru and @driver_passthru decorators to"},{"line_number":10,"context_line":"add support to vendor to determine whether their methods should run"},{"line_number":11,"context_line":"synchrounously or asynchrounously."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A new flag was added to the decorators called \"iamadummy\" (I am a dummy),"},{"line_number":14,"context_line":"if True means to run the method synchrounously, docstrings were updated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a890539_209c8769","line":11,"in_reply_to":"7a8c0949_ae99da20","updated":"2014-11-10 09:31:23.000000000","message":"Done","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"}],"ironic/conductor/manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"48102c034db3b51ce6779471c44ddb6ddd183387","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                        **info)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"            options \u003d task.driver.vendor.vendor_routes[driver_method]"},{"line_number":401,"context_line":"            mode \u003d \u0027async\u0027 if \u0027mode\u0027 not in options else options[\u0027mode\u0027]"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            ret \u003d None"},{"line_number":404,"context_line":"            if mode \u003d\u003d \u0027async\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_3119f188","line":401,"updated":"2014-10-22 09:13:03.000000000","message":"mode \u003d options.get(\u0027mode\u0027, \u0027async\u0027) is the Python way.\nAnd Dmitry\u0027s proposal makes sense.","commit_id":"afb5d5986a04bd4eead2a02283ef425198c40ac1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c72600693d24204417ea9cefd5dc92aa444f239d","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                        **info)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"            options \u003d task.driver.vendor.vendor_routes[driver_method]"},{"line_number":401,"context_line":"            mode \u003d \u0027async\u0027 if \u0027mode\u0027 not in options else options[\u0027mode\u0027]"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            ret \u003d None"},{"line_number":404,"context_line":"            if mode \u003d\u003d \u0027async\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_b120814a","line":401,"updated":"2014-10-22 08:58:42.000000000","message":"the same thing as before: this assumes base implementation of vendor_passthru and works quite badly with things like MixingPassthru. I would prefer like:\n\n is_async \u003d task.driver.vendor.is_async_method(method)  # also raises InvalidParameterValue if method is not found\n\nthus we\u0027ll keep the particular method dispatch implementation self-contained within VendorPassthru without exposing random details to manager.","commit_id":"afb5d5986a04bd4eead2a02283ef425198c40ac1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c72600693d24204417ea9cefd5dc92aa444f239d","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                _(\u0027No handler for method %s\u0027) % driver_method)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        options \u003d driver.vendor.driver_routes[driver_method]"},{"line_number":457,"context_line":"        mode \u003d \u0027async\u0027 if \u0027mode\u0027 not in options else options[\u0027mode\u0027]"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        ret \u003d None"},{"line_number":460,"context_line":"        if mode \u003d\u003d \u0027async\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_1116adf1","line":457,"updated":"2014-10-22 08:58:42.000000000","message":"ditto","commit_id":"afb5d5986a04bd4eead2a02283ef425198c40ac1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"32ca7add99197ecaf4190f2b35e077b5491e854e","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                task.spawn_after(self._spawn_worker,"},{"line_number":414,"context_line":"                                 vendor_iface.vendor_passthru, task,"},{"line_number":415,"context_line":"                                 method\u003ddriver_method, **info)"},{"line_number":416,"context_line":"                return"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            try:"},{"line_number":419,"context_line":"                vendor_opts \u003d vendor_iface.vendor_routes[driver_method]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_5081498e","line":416,"updated":"2014-11-11 10:55:26.000000000","message":"should return a tuple","commit_id":"b0c3243dc26ca6b09ef584eb1efd1465a9b5b422"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"067cd13ccbd6fa30ff40ad764b2c9745c2357943","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                task.spawn_after(self._spawn_worker,"},{"line_number":414,"context_line":"                                 vendor_iface.vendor_passthru, task,"},{"line_number":415,"context_line":"                                 method\u003ddriver_method, **info)"},{"line_number":416,"context_line":"                return"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            try:"},{"line_number":419,"context_line":"                vendor_opts \u003d vendor_iface.vendor_routes[driver_method]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_934d7b75","line":416,"in_reply_to":"5a890539_5081498e","updated":"2014-11-11 11:00:15.000000000","message":"Done","commit_id":"b0c3243dc26ca6b09ef584eb1efd1465a9b5b422"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"32ca7add99197ecaf4190f2b35e077b5491e854e","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                            \"deprecated. Please update the code to use \""},{"line_number":488,"context_line":"                            \"the @driver_passthru decorator.\"))"},{"line_number":489,"context_line":"            return driver.vendor.driver_vendor_passthru("},{"line_number":490,"context_line":"                            context, method\u003ddriver_method, **info)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        try:"},{"line_number":493,"context_line":"            vendor_opts \u003d driver.vendor.driver_routes[driver_method]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_b04fcd91","line":490,"updated":"2014-11-11 10:55:26.000000000","message":"again, should be a tuple","commit_id":"b0c3243dc26ca6b09ef584eb1efd1465a9b5b422"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"067cd13ccbd6fa30ff40ad764b2c9745c2357943","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                            \"deprecated. Please update the code to use \""},{"line_number":488,"context_line":"                            \"the @driver_passthru decorator.\"))"},{"line_number":489,"context_line":"            return driver.vendor.driver_vendor_passthru("},{"line_number":490,"context_line":"                            context, method\u003ddriver_method, **info)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        try:"},{"line_number":493,"context_line":"            vendor_opts \u003d driver.vendor.driver_routes[driver_method]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_7331efeb","line":490,"in_reply_to":"5a890539_b04fcd91","updated":"2014-11-11 11:00:15.000000000","message":"Done","commit_id":"b0c3243dc26ca6b09ef584eb1efd1465a9b5b422"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c9946a07f0def0b2356d6f9638f2bf17b37e8c1d","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # Invoke the vendor method accordingly with the mode"},{"line_number":503,"context_line":"        is_async \u003d vendor_opts[\u0027async\u0027]"},{"line_number":504,"context_line":"        ret \u003d None"},{"line_number":505,"context_line":"        if is_async:"},{"line_number":506,"context_line":"            self._spawn_worker(vendor_func, context, **info)"},{"line_number":507,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_6204b27b","line":504,"updated":"2014-11-11 15:04:15.000000000","message":"validate should be called here","commit_id":"b2f7d0bac57ca06bc7b8015e64ec4b7ee858661f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"08a821c821223b641bb353a0c80a4952e46b873f","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # Invoke the vendor method accordingly with the mode"},{"line_number":503,"context_line":"        is_async \u003d vendor_opts[\u0027async\u0027]"},{"line_number":504,"context_line":"        ret \u003d None"},{"line_number":505,"context_line":"        if is_async:"},{"line_number":506,"context_line":"            self._spawn_worker(vendor_func, context, **info)"},{"line_number":507,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_c2fc8641","line":504,"in_reply_to":"5a890539_6204b27b","updated":"2014-11-11 15:14:09.000000000","message":"The only problem of calling validate() here is that validate() expects a task, the driver_vendor_passthru doesn\u0027t have a task object because there\u0027s no Nodes involved. We need to discuss it a bit.","commit_id":"b2f7d0bac57ca06bc7b8015e64ec4b7ee858661f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d8c039b2dbb9e895fe4129e1f95eaff4e231d94f","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # Invoke the vendor method accordingly with the mode"},{"line_number":503,"context_line":"        is_async \u003d vendor_opts[\u0027async\u0027]"},{"line_number":504,"context_line":"        ret \u003d None"},{"line_number":505,"context_line":"        if is_async:"},{"line_number":506,"context_line":"            self._spawn_worker(vendor_func, context, **info)"},{"line_number":507,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_b3934ef9","line":504,"in_reply_to":"5a890539_c2fc8641","updated":"2014-11-11 16:43:00.000000000","message":"as talked on IRC, I\u0027m going to leave a FIXME here and open a bug about it. This patch is not introducing this problem since it already worked that way before.","commit_id":"b2f7d0bac57ca06bc7b8015e64ec4b7ee858661f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        :raises: UnsupportedDriverExtension if current driver does not have"},{"line_number":380,"context_line":"                 vendor interface or method is unsupported."},{"line_number":381,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":382,"context_line":"                 async task."},{"line_number":383,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":384,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":385,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_02890a26","line":382,"updated":"2014-11-12 16:30:23.000000000","message":"if you feel like it, raises NodeLocked isn\u0027t mentioned here.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        :raises: UnsupportedDriverExtension if current driver does not have"},{"line_number":380,"context_line":"                 vendor interface or method is unsupported."},{"line_number":381,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":382,"context_line":"                 async task."},{"line_number":383,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":384,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":385,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_419f87b4","line":382,"in_reply_to":"5a890539_02890a26","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                 async task."},{"line_number":383,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":384,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":385,"context_line":"                  always None."},{"line_number":386,"context_line":"        \"\"\""},{"line_number":387,"context_line":"        LOG.debug(\"RPC vendor_passthru called for node %s.\" % node_id)"},{"line_number":388,"context_line":"        # NOTE(max_lobur): Even though not all vendor_passthru calls may"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_27e1b8d0","line":385,"updated":"2014-11-12 16:30:23.000000000","message":"by \u0027mode\u0027, are the possible values \u0027async\u0027 and \u0027sync\u0027?\n\nWhen I look at the code in controllers/v1/driver.py and node.py, it seems like the 2nd value in the tuple is \u0027True\u0027 if the mode is async, and \u0027False\u0027 if the mode is sync.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                 async task."},{"line_number":383,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":384,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":385,"context_line":"                  always None."},{"line_number":386,"context_line":"        \"\"\""},{"line_number":387,"context_line":"        LOG.debug(\"RPC vendor_passthru called for node %s.\" % node_id)"},{"line_number":388,"context_line":"        # NOTE(max_lobur): Even though not all vendor_passthru calls may"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_61cba3a5","line":385,"in_reply_to":"5a890539_27e1b8d0","updated":"2014-11-12 22:25:32.000000000","message":"Yeah it\u0027s a boolean indicating whether the function is async or not. I will update this docstring","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                  info):"},{"line_number":445,"context_line":"        \"\"\"Handle top-level vendor actions."},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        RPC method which synchronously handles driver-level vendor passthru"},{"line_number":448,"context_line":"        calls. These calls don\u0027t require a node UUID and are executed on a"},{"line_number":449,"context_line":"        random conductor with the specified driver. If the method mode is"},{"line_number":450,"context_line":"        async the conductor will start background worker to perform"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_87250cc4","line":447,"updated":"2014-11-12 16:30:23.000000000","message":"This isn\u0027t quite correct. Maybe just delete \u0027synchronously\u0027.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                  info):"},{"line_number":445,"context_line":"        \"\"\"Handle top-level vendor actions."},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        RPC method which synchronously handles driver-level vendor passthru"},{"line_number":448,"context_line":"        calls. These calls don\u0027t require a node UUID and are executed on a"},{"line_number":449,"context_line":"        random conductor with the specified driver. If the method mode is"},{"line_number":450,"context_line":"        async the conductor will start background worker to perform"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_a1f90bca","line":447,"in_reply_to":"5a890539_87250cc4","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                 vendor interface, if the vendor interface does not implement"},{"line_number":461,"context_line":"                 driver-level vendor passthru or if the passthru method is"},{"line_number":462,"context_line":"                 unsupported."},{"line_number":463,"context_line":"        :raises: DriverNotFound if the supplied driver is not loaded."},{"line_number":464,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":465,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":466,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_620d6e37","line":463,"updated":"2014-11-12 16:30:23.000000000","message":"might want to add :raises: NoFreeConductorWorker...","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                 vendor interface, if the vendor interface does not implement"},{"line_number":461,"context_line":"                 driver-level vendor passthru or if the passthru method is"},{"line_number":462,"context_line":"                 unsupported."},{"line_number":463,"context_line":"        :raises: DriverNotFound if the supplied driver is not loaded."},{"line_number":464,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":465,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":466,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c1f457d1","line":463,"in_reply_to":"5a890539_620d6e37","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        :raises: DriverNotFound if the supplied driver is not loaded."},{"line_number":464,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":465,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":466,"context_line":"                  always None."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"        \"\"\""},{"line_number":469,"context_line":"        # Any locking in a top-level vendor action will need to be done by the"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c24b8257","line":466,"updated":"2014-11-12 16:30:23.000000000","message":"similar comment to above. the 2nd value of the tuple is \u0027True\u0027 if this is an async operation/mode; and \u0027False\u0027 for sync...","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        :raises: DriverNotFound if the supplied driver is not loaded."},{"line_number":464,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":465,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":466,"context_line":"                  always None."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"        \"\"\""},{"line_number":469,"context_line":"        # Any locking in a top-level vendor action will need to be done by the"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e10313b6","line":466,"in_reply_to":"5a890539_c24b8257","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":500,"context_line":"                _(\u0027No handler for method %s\u0027) % driver_method)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # FIXME(lucasagomes): This code should be able to call"},{"line_number":503,"context_line":"        # validate(). The problem is that at the moment the validate()"},{"line_number":504,"context_line":"        # expects a task object as the first parameter and in this"},{"line_number":505,"context_line":"        # method we don\u0027t have it because we don\u0027t have a Node to"},{"line_number":506,"context_line":"        # acquire."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_42cb12a5","line":503,"updated":"2014-11-12 16:30:23.000000000","message":"so some kind of validation, whether it is validate() or something else, right? [Just checking, no need to change this comment.]","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":500,"context_line":"                _(\u0027No handler for method %s\u0027) % driver_method)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        # FIXME(lucasagomes): This code should be able to call"},{"line_number":503,"context_line":"        # validate(). The problem is that at the moment the validate()"},{"line_number":504,"context_line":"        # expects a task object as the first parameter and in this"},{"line_number":505,"context_line":"        # method we don\u0027t have it because we don\u0027t have a Node to"},{"line_number":506,"context_line":"        # acquire."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e1e7933e","line":503,"in_reply_to":"5a890539_42cb12a5","updated":"2014-11-12 22:25:32.000000000","message":"Yeah I used validate() as a refence because that\u0027s the method called on the vendor_passthru()","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c72600693d24204417ea9cefd5dc92aa444f239d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    |    1.15 - Added rebuild parameter to do_node_deploy."},{"line_number":57,"context_line":"    |    1.16 - Added get_driver_properties."},{"line_number":58,"context_line":"    |    1.17 - Added set_boot_device, get_boot_device and"},{"line_number":59,"context_line":"    |          get_supported_boot_devices."},{"line_number":60,"context_line":"    |    1.18 - Remove change_node_maintenance_mode."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_f6067f1f","line":59,"updated":"2014-10-22 08:58:42.000000000","message":"I suspect version should be bumped","commit_id":"afb5d5986a04bd4eead2a02283ef425198c40ac1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        :raises: UnsupportedDriverExtension if current driver does not have"},{"line_number":177,"context_line":"                 vendor interface."},{"line_number":178,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":179,"context_line":"                 async task."},{"line_number":180,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":181,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":182,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c276223e","line":179,"updated":"2014-11-12 16:30:23.000000000","message":"if you feel like it, raises NodeLocked isn\u0027t mentioned here.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        :raises: UnsupportedDriverExtension if current driver does not have"},{"line_number":177,"context_line":"                 vendor interface."},{"line_number":178,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":179,"context_line":"                 async task."},{"line_number":180,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":181,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":182,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_61272365","line":179,"in_reply_to":"5a890539_c276223e","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"de5eeb56ba748e48a668e55da8187ba95890eeb6","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":179,"context_line":"                 async task."},{"line_number":180,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":181,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":182,"context_line":"                  always None."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_13dec611","line":181,"updated":"2014-11-12 14:06:00.000000000","message":"Description of mode is not very clear here, some can understand that mode is the string.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":179,"context_line":"                 async task."},{"line_number":180,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":181,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":182,"context_line":"                  always None."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_41a5c7b3","line":181,"in_reply_to":"5a890539_025f4ae6","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":179,"context_line":"                 async task."},{"line_number":180,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":181,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":182,"context_line":"                  always None."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_025f4ae6","line":181,"in_reply_to":"5a890539_13dec611","updated":"2014-11-12 16:30:23.000000000","message":"+1 (see comments in manager.py)","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def driver_vendor_passthru(self, context, driver_name, driver_method, info,"},{"line_number":190,"context_line":"                        topic\u003dNone):"},{"line_number":191,"context_line":"        \"\"\"Pass vendor-specific calls which don\u0027t specify a node to a driver."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        :param context: request context."},{"line_number":194,"context_line":"        :param driver_name: name of the driver on which to call the method."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_82209a4a","line":191,"updated":"2014-11-12 16:30:23.000000000","message":"Might be worth mentioning sync vs asych mode here too -- similar to vendor_passthru().","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def driver_vendor_passthru(self, context, driver_name, driver_method, info,"},{"line_number":190,"context_line":"                        topic\u003dNone):"},{"line_number":191,"context_line":"        \"\"\"Pass vendor-specific calls which don\u0027t specify a node to a driver."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        :param context: request context."},{"line_number":194,"context_line":"        :param driver_name: name of the driver on which to call the method."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c1e29700","line":191,"in_reply_to":"5a890539_82209a4a","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":200,"context_line":"        :raises: UnsupportedDriverExtension if the driver doesn\u0027t have a vendor"},{"line_number":201,"context_line":"                 interface, or if the vendor interface does not support the"},{"line_number":202,"context_line":"                 specified driver_method."},{"line_number":203,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":204,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":205,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_82e7ba11","line":202,"updated":"2014-11-12 16:30:23.000000000","message":"raises NoFreeConductorWorker\n\nhmm, also DriverNotFound not mentioned.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":200,"context_line":"        :raises: UnsupportedDriverExtension if the driver doesn\u0027t have a vendor"},{"line_number":201,"context_line":"                 interface, or if the vendor interface does not support the"},{"line_number":202,"context_line":"                 specified driver_method."},{"line_number":203,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":204,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":205,"context_line":"                  always None."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_41d78723","line":202,"in_reply_to":"5a890539_82e7ba11","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"de5eeb56ba748e48a668e55da8187ba95890eeb6","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                 interface, or if the vendor interface does not support the"},{"line_number":202,"context_line":"                 specified driver_method."},{"line_number":203,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":204,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":205,"context_line":"                  always None."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_73eb8ab0","line":204,"updated":"2014-11-12 14:06:00.000000000","message":"ditto","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                 interface, or if the vendor interface does not support the"},{"line_number":202,"context_line":"                 specified driver_method."},{"line_number":203,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":204,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":205,"context_line":"                  always None."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_21a27bae","line":204,"in_reply_to":"5a890539_625c8eee","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                 interface, or if the vendor interface does not support the"},{"line_number":202,"context_line":"                 specified driver_method."},{"line_number":203,"context_line":"        :returns: A tuple containing the response of the invoked method"},{"line_number":204,"context_line":"                  and the mode. If the mode is async the response will be"},{"line_number":205,"context_line":"                  always None."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_625c8eee","line":204,"in_reply_to":"5a890539_73eb8ab0","updated":"2014-11-12 16:30:23.000000000","message":"+1 :)","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}],"ironic/drivers/base.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6e3145ceb19000ea4dc8e7bd6553041ed99ebdea","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        # NOTE(lucasagomes): It\u0027s adding an empty dictionary for now but"},{"line_number":391,"context_line":"        # in the following patches this is going to have more metadata"},{"line_number":392,"context_line":"        # about the vendor method. For e.g the supported HTTP methods and"},{"line_number":393,"context_line":"        # whether it should run asynchrounously or not."},{"line_number":394,"context_line":"        metadata \u003d VendorMetadata(api_method, {\u0027async\u0027: not iamadummy})"},{"line_number":395,"context_line":"        if not driver_passthru:"},{"line_number":396,"context_line":"            func._vendor_metadata \u003d metadata"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_a3e9411c","line":393,"updated":"2014-10-31 15:36:02.000000000","message":"will remove this NOTE on the next patch-set","commit_id":"7b3f7ddfbb570c15f4fd8f984d3e60a1e247f386"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"8bb99306a890d17d8688b73a5a8cc6270c2982d2","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                                           \u0027metadata\u0027])"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def _passthru(method\u003dNone, iamadummy\u003dFalse, driver_passthru\u003dFalse):"},{"line_number":365,"context_line":"    \"\"\"A decorator for registering a function as a passthru function."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    Decorator ensures function is ready to catch any ironic exceptions"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8c0949_decfb527","line":364,"updated":"2014-11-07 14:14:49.000000000","message":"I\u0027m sorry but I really don\u0027t like this.  We shouldn\u0027t name a parameter based upon how we *feel* about synchronicity.  I would suggest that we say \u0027asynchronous\u003dTrue\u0027 and put a strong warning in CAPS in the docstring instead suggesting the we really do want an asynchronous interface here.","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7a0945509e34f2b99c9bacf85444542dd678fcf7","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                                           \u0027metadata\u0027])"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def _passthru(method\u003dNone, iamadummy\u003dFalse, driver_passthru\u003dFalse):"},{"line_number":365,"context_line":"    \"\"\"A decorator for registering a function as a passthru function."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    Decorator ensures function is ready to catch any ironic exceptions"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_80829bfe","line":364,"in_reply_to":"7a8c0949_decfb527","updated":"2014-11-10 09:31:23.000000000","message":"heh +1 I will change it :) Thanks for pointing that out","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    :param method: an arbitrary string describing the action to be taken."},{"line_number":376,"context_line":"    :param async: Boolean value. If True invoke the vendor method"},{"line_number":377,"context_line":"                  asynchronously if False synchronously. If a vendor method"},{"line_number":378,"context_line":"                  touches the BMC we strongly recommend it to run"},{"line_number":379,"context_line":"                  asynchronously. Defaults to True."},{"line_number":380,"context_line":"    :param driver_passthru: Boolean value. Whether this is a driver"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_4236b253","line":377,"updated":"2014-11-12 16:30:23.000000000","message":"nit. Add some punctuation, eg \u0027asynchronously; if False, synchronously.\u0027\n\nJust a suggestion. \u0027vendor method\u0027 isn\u0027t used elsewhere in this description, so I\u0027d stick with a term that was used, eg \u0027passthru function\u0027. Or change the first line of the docstring above to use \u0027vendor method\u0027 instead of \u0027passthru function\u0027.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    :param method: an arbitrary string describing the action to be taken."},{"line_number":376,"context_line":"    :param async: Boolean value. If True invoke the vendor method"},{"line_number":377,"context_line":"                  asynchronously if False synchronously. If a vendor method"},{"line_number":378,"context_line":"                  touches the BMC we strongly recommend it to run"},{"line_number":379,"context_line":"                  asynchronously. Defaults to True."},{"line_number":380,"context_line":"    :param driver_passthru: Boolean value. Whether this is a driver"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_8186cf11","line":377,"in_reply_to":"5a890539_4236b253","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                  asynchronously. Defaults to True."},{"line_number":380,"context_line":"    :param driver_passthru: Boolean value. Whether this is a driver"},{"line_number":381,"context_line":"                            vendor passthru or a node vendor passthru"},{"line_number":382,"context_line":"                            method."},{"line_number":383,"context_line":"    \"\"\""},{"line_number":384,"context_line":"    def handle_passthru(func):"},{"line_number":385,"context_line":"        api_method \u003d method"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_22f2866f","line":382,"updated":"2014-11-12 16:30:23.000000000","message":"Or more specifically, \u0027True if this is a driver vendor passthru method, and False if it is a node vendor passthru method.\u0027\n\n(Just suggesting, your call.)","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                  asynchronously. Defaults to True."},{"line_number":380,"context_line":"    :param driver_passthru: Boolean value. Whether this is a driver"},{"line_number":381,"context_line":"                            vendor passthru or a node vendor passthru"},{"line_number":382,"context_line":"                            method."},{"line_number":383,"context_line":"    \"\"\""},{"line_number":384,"context_line":"    def handle_passthru(func):"},{"line_number":385,"context_line":"        api_method \u003d method"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_41e147cf","line":382,"in_reply_to":"5a890539_22f2866f","updated":"2014-11-12 22:25:32.000000000","message":"Thanks for the suggestion :)","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return handle_passthru"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def passthru(method\u003dNone, async\u003dTrue):"},{"line_number":413,"context_line":"    return _passthru(method, async, driver_passthru\u003dFalse)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e22a3e8f","line":412,"updated":"2014-11-12 16:30:23.000000000","message":"just wondering. What do you think about calling this \u0027node_passthru\u0027 instead of \u0027passthru\u0027, to make it more obvious that this is \u0027node_passthru\u0027 vs \u0027driver_passthru\u0027?","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"924d7f769bb2cadafa3e6344b385bf876366892b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return handle_passthru"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def passthru(method\u003dNone, async\u003dTrue):"},{"line_number":413,"context_line":"    return _passthru(method, async, driver_passthru\u003dFalse)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_499ecd57","line":412,"in_reply_to":"5a890539_e1c4f341","updated":"2014-11-12 23:27:33.000000000","message":"Ah yes, it should be in a separate patch then.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    return handle_passthru"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def passthru(method\u003dNone, async\u003dTrue):"},{"line_number":413,"context_line":"    return _passthru(method, async, driver_passthru\u003dFalse)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e1c4f341","line":412,"in_reply_to":"5a890539_e22a3e8f","updated":"2014-11-12 22:25:32.000000000","message":"I wouldn\u0027t mind, but this name was introduced at the logging patch[1], I\u0027m just extending the decorator, maybe in a following patch? I feel it\u0027s a bit out of scope to this patch to rename this decorator. \n\n[1] https://review.openstack.org/#/c/129298/","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        rebooted for some reason. We will use the mac addresses listed in the"},{"line_number":445,"context_line":"        kwargs to find the matching node, then return the node object to the"},{"line_number":446,"context_line":"        agent. The agent can that use that UUID to use the normal vendor"},{"line_number":447,"context_line":"        passthru method."},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        Currently, we don\u0027t handle the instance where the agent doesn\u0027t have"},{"line_number":450,"context_line":"        a matching node (i.e. a brand new, never been in Ironic node)."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_2d9fd7b5","line":447,"updated":"2014-11-12 16:30:23.000000000","message":"What do you think about changing \u0027normal vendor passthru method\u0027 to eg \u0027node passthru method\u0027.\n\nUnless people think \u0027node passthru\u0027 \u003d\u003d \u0027normal passthru\u0027. Not sure.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        rebooted for some reason. We will use the mac addresses listed in the"},{"line_number":445,"context_line":"        kwargs to find the matching node, then return the node object to the"},{"line_number":446,"context_line":"        agent. The agent can that use that UUID to use the normal vendor"},{"line_number":447,"context_line":"        passthru method."},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        Currently, we don\u0027t handle the instance where the agent doesn\u0027t have"},{"line_number":450,"context_line":"        a matching node (i.e. a brand new, never been in Ironic node)."}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_01d73fee","line":447,"in_reply_to":"5a890539_2d9fd7b5","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}],"ironic/drivers/modules/fake.py":[{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"8bb99306a890d17d8688b73a5a8cc6270c2982d2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            bar \u003d kwargs.get(\u0027bar\u0027)"},{"line_number":127,"context_line":"            if not bar:"},{"line_number":128,"context_line":"                raise exception.MissingParameterValue(_("},{"line_number":129,"context_line":"                    \"Parameter \u0027bar\u0027 not passed to method \u0027second_method\u0027.\"))"},{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":"        _raise_unsupported_error(method)"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8c0949_1e8bfdc3","line":129,"updated":"2014-11-07 14:14:49.000000000","message":"or \u0027third method\u0027","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7a0945509e34f2b99c9bacf85444542dd678fcf7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            bar \u003d kwargs.get(\u0027bar\u0027)"},{"line_number":127,"context_line":"            if not bar:"},{"line_number":128,"context_line":"                raise exception.MissingParameterValue(_("},{"line_number":129,"context_line":"                    \"Parameter \u0027bar\u0027 not passed to method \u0027second_method\u0027.\"))"},{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":"        _raise_unsupported_error(method)"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_a087970e","line":129,"in_reply_to":"7a8c0949_1e8bfdc3","updated":"2014-11-10 09:31:23.000000000","message":"Done","commit_id":"8d78b113604593361206b13083e77d43e9f50d0e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"816151e5d3ef98d94d801c3a84314159da73ff07","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            if not bar:"},{"line_number":128,"context_line":"                raise exception.MissingParameterValue(_("},{"line_number":129,"context_line":"                    \"Parameter \u0027bar\u0027 not passed to method \u0027second_method\u0027 \""},{"line_number":130,"context_line":"                    \"or \u0027third_method_sync\u0027.\"))"},{"line_number":131,"context_line":"            return"},{"line_number":132,"context_line":"        _raise_unsupported_error(method)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_6df71ff6","line":130,"updated":"2014-11-12 16:30:23.000000000","message":"Why not just use the value of \u0027method\u0027?, eg _(\"Parameter \u0027bar\u0027 not passed to method \u0027%s\u0027.\"), method","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            if not bar:"},{"line_number":128,"context_line":"                raise exception.MissingParameterValue(_("},{"line_number":129,"context_line":"                    \"Parameter \u0027bar\u0027 not passed to method \u0027second_method\u0027 \""},{"line_number":130,"context_line":"                    \"or \u0027third_method_sync\u0027.\"))"},{"line_number":131,"context_line":"            return"},{"line_number":132,"context_line":"        _raise_unsupported_error(method)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_81024f6d","line":130,"in_reply_to":"5a890539_6df71ff6","updated":"2014-11-12 22:25:32.000000000","message":"+1\n\nThe only nit is that the interpolation should be done with \u0027%\u0027 insteand of \u0027,\u0027. The comma is used on the logging functions, for exceptions it doesn\u0027t work.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"924d7f769bb2cadafa3e6344b385bf876366892b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            if not bar:"},{"line_number":128,"context_line":"                raise exception.MissingParameterValue(_("},{"line_number":129,"context_line":"                    \"Parameter \u0027bar\u0027 not passed to method \u0027second_method\u0027 \""},{"line_number":130,"context_line":"                    \"or \u0027third_method_sync\u0027.\"))"},{"line_number":131,"context_line":"            return"},{"line_number":132,"context_line":"        _raise_unsupported_error(method)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_6940e9a5","line":130,"in_reply_to":"5a890539_81024f6d","updated":"2014-11-12 23:27:33.000000000","message":"oops ;)","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aee813d8b429c9d556f385c33d295dfd0b32e5fe","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        response \u003d self.service.vendor_passthru("},{"line_number":652,"context_line":"                       self.context, node.uuid, \u0027test_method\u0027, {\u0027bar\u0027: \u0027baz\u0027})"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        self.assertIsInstance(response, tuple)"},{"line_number":655,"context_line":"        self.assertEqual(response, (None, True))"},{"line_number":656,"context_line":"        task.spawn_after.assert_called_once_with(mock.ANY, vendor_passthru_ref,"},{"line_number":657,"context_line":"            task, bar\u003d\u0027baz\u0027, method\u003d\u0027test_method\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_a2cbfa70","line":654,"updated":"2014-11-11 15:00:16.000000000","message":"redundant due to the following line IMO","commit_id":"b2f7d0bac57ca06bc7b8015e64ec4b7ee858661f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aee813d8b429c9d556f385c33d295dfd0b32e5fe","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        response \u003d self.service.driver_vendor_passthru(self.context,"},{"line_number":756,"context_line":"                       \u0027fake\u0027, \u0027test_method\u0027, vendor_args)"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"        self.assertIsInstance(response, tuple)"},{"line_number":759,"context_line":"        self.assertEqual(response, (expected, False))"},{"line_number":760,"context_line":"        driver_vendor_passthru_ref.assert_called_once_with("},{"line_number":761,"context_line":"                self.context, test\u003d\u0027arg\u0027, method\u003d\u0027test_method\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_c2c80677","line":758,"updated":"2014-11-11 15:00:16.000000000","message":"ditto","commit_id":"b2f7d0bac57ca06bc7b8015e64ec4b7ee858661f"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"d2bee2184f8cb65f36dc374b6b60c3e26cd8ec4a","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        response \u003d self.service.vendor_passthru("},{"line_number":652,"context_line":"                       self.context, node.uuid, \u0027test_method\u0027, {\u0027bar\u0027: \u0027baz\u0027})"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        self.assertEqual(response, (None, True))"},{"line_number":655,"context_line":"        task.spawn_after.assert_called_once_with(mock.ANY, vendor_passthru_ref,"},{"line_number":656,"context_line":"            task, bar\u003d\u0027baz\u0027, method\u003d\u0027test_method\u0027)"},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_f24beb56","line":654,"updated":"2014-11-12 18:14:10.000000000","message":"Need to switch these arguments so that expected value is first.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        response \u003d self.service.vendor_passthru("},{"line_number":652,"context_line":"                       self.context, node.uuid, \u0027test_method\u0027, {\u0027bar\u0027: \u0027baz\u0027})"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        self.assertEqual(response, (None, True))"},{"line_number":655,"context_line":"        task.spawn_after.assert_called_once_with(mock.ANY, vendor_passthru_ref,"},{"line_number":656,"context_line":"            task, bar\u003d\u0027baz\u0027, method\u003d\u0027test_method\u0027)"},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_81396f43","line":654,"in_reply_to":"5a890539_f24beb56","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"d2bee2184f8cb65f36dc374b6b60c3e26cd8ec4a","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        response \u003d self.service.driver_vendor_passthru(self.context,"},{"line_number":755,"context_line":"                       \u0027fake\u0027, \u0027test_method\u0027, vendor_args)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        self.assertEqual(response, (expected, False))"},{"line_number":758,"context_line":"        driver_vendor_passthru_ref.assert_called_once_with("},{"line_number":759,"context_line":"                self.context, test\u003d\u0027arg\u0027, method\u003d\u0027test_method\u0027)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_92a9c7e1","line":757,"updated":"2014-11-12 18:14:10.000000000","message":"Need to switch these arguments, too.","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"81adb7216fa90bf4b65916fed3611a0e10a46513","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        response \u003d self.service.driver_vendor_passthru(self.context,"},{"line_number":755,"context_line":"                       \u0027fake\u0027, \u0027test_method\u0027, vendor_args)"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        self.assertEqual(response, (expected, False))"},{"line_number":758,"context_line":"        driver_vendor_passthru_ref.assert_called_once_with("},{"line_number":759,"context_line":"                self.context, test\u003d\u0027arg\u0027, method\u003d\u0027test_method\u0027)"},{"line_number":760,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_a13f4b24","line":757,"in_reply_to":"5a890539_92a9c7e1","updated":"2014-11-12 22:25:32.000000000","message":"Done","commit_id":"e9ddb84b89cc22a61bcd330bf5e75af2d8e8dc6d"}]}
