)]}'
{"murano/dsl/executor.py":[{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            for obj_id in list_of_destroyed:"},{"line_number":348,"context_line":"                self._object_store.remove(obj_id)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _method_invoke(self, obj, method_name):"},{"line_number":351,"context_line":"        methods \u003d obj.type.find_methods(lambda m: m.name \u003d\u003d method_name)"},{"line_number":352,"context_line":"        for method in methods:"},{"line_number":353,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_74363b53","line":350,"updated":"2016-08-22 17:32:40.000000000","message":"why is this become a parameter? There is a method that invoke generic class method and it works differently. This is special for destruction so what is the case for the name to be a parameter?","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"53036e724129206b8566e9bbcd1bf56232625f10","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            for obj_id in list_of_destroyed:"},{"line_number":348,"context_line":"                self._object_store.remove(obj_id)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _method_invoke(self, obj, method_name):"},{"line_number":351,"context_line":"        methods \u003d obj.type.find_methods(lambda m: m.name \u003d\u003d method_name)"},{"line_number":352,"context_line":"        for method in methods:"},{"line_number":353,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_9d7c6eed","line":350,"in_reply_to":"1ac06dbe_74363b53","updated":"2016-08-24 11:45:23.000000000","message":"Done","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        for obj_id in d_list:"},{"line_number":366,"context_line":"            obj \u003d object_store.get(obj_id)"},{"line_number":367,"context_line":"            if \u0027onDestruction\u0027 in obj.dependencies.keys():"},{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_d473af13","line":368,"updated":"2016-08-22 17:32:40.000000000","message":"It will be faster to to obj.depencies.get(\u0027onDestruction\u0027, []) right from the start instead of doing lookup twice","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"53036e724129206b8566e9bbcd1bf56232625f10","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        for obj_id in d_list:"},{"line_number":366,"context_line":"            obj \u003d object_store.get(obj_id)"},{"line_number":367,"context_line":"            if \u0027onDestruction\u0027 in obj.dependencies.keys():"},{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_46f67e8f","line":368,"in_reply_to":"1ac06dbe_d473af13","updated":"2016-08-24 11:45:23.000000000","message":"Done","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"},{"line_number":372,"context_line":"                        if subscriber_id not in deletion_order:"},{"line_number":373,"context_line":"                            deletion_order.append(obj_id)"},{"line_number":374,"context_line":"                            deletion_order.append(subscriber_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_b4b1d391","line":371,"updated":"2016-08-22 17:32:40.000000000","message":"it will be beneficial to make d_list be a set instead. List searches repeated in loop tend to be slow","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3147df1c319a983e59cc46070f66682f870b8900","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"},{"line_number":372,"context_line":"                        if subscriber_id not in deletion_order:"},{"line_number":373,"context_line":"                            deletion_order.append(obj_id)"},{"line_number":374,"context_line":"                            deletion_order.append(subscriber_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_58c63f4a","line":371,"in_reply_to":"1ac06dbe_a64db2c5","updated":"2016-08-24 15:41:20.000000000","message":"Instead of converting a list it can be a set right from the start.","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"53036e724129206b8566e9bbcd1bf56232625f10","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"},{"line_number":372,"context_line":"                        if subscriber_id not in deletion_order:"},{"line_number":373,"context_line":"                            deletion_order.append(obj_id)"},{"line_number":374,"context_line":"                            deletion_order.append(subscriber_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_a64db2c5","line":371,"in_reply_to":"1ac06dbe_b4b1d391","updated":"2016-08-24 11:45:23.000000000","message":"am I right and you suggest to do something like:\n\n   d_list \u003d set(d_list)\n\nat line 362 for example?","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        deletion_order \u003d []"},{"line_number":363,"context_line":"        destroyed \u003d []"},{"line_number":364,"context_line":"        # Sort ids in order which is dictated by destruction dependency"},{"line_number":365,"context_line":"        for obj_id in d_list:"},{"line_number":366,"context_line":"            obj \u003d object_store.get(obj_id)"},{"line_number":367,"context_line":"            if \u0027onDestruction\u0027 in obj.dependencies.keys():"},{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"},{"line_number":372,"context_line":"                        if subscriber_id not in deletion_order:"},{"line_number":373,"context_line":"                            deletion_order.append(obj_id)"},{"line_number":374,"context_line":"                            deletion_order.append(subscriber_id)"},{"line_number":375,"context_line":"                        elif subscriber_id in deletion_order:"},{"line_number":376,"context_line":"                            index \u003d deletion_order.index(subscriber_id)"},{"line_number":377,"context_line":"                            deletion_order.insert(index, obj_id)"},{"line_number":378,"context_line":"                    else:"},{"line_number":379,"context_line":"                        deletion_order.append(obj_id)"},{"line_number":380,"context_line":"            else:"},{"line_number":381,"context_line":"                deletion_order.append(obj_id)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        # Destroy objects"},{"line_number":384,"context_line":"        for obj_id in deletion_order:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_6f42e611","line":381,"range":{"start_line":365,"start_character":1,"end_line":381,"end_character":45},"updated":"2016-08-22 17:32:40.000000000","message":"The sort is not efficient because you do a lot of insertions in the middle of the list which require a data copy and is not efficient in general. This is okay for relatively small number of items but will hurt performance once this is used for runtime garbage collection. What I suggest is to a) transform list of IDs into list of objects b) write comparator function that compares 2 items (if a depends on b then a \u003e b, id b depends on a then b \u003e a, if neither of them depends on each other (or both, but it doesn\u0027t matter) then a \u003d\u003d b). And then use standard python sort() function that will do a quicksort","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"53036e724129206b8566e9bbcd1bf56232625f10","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        deletion_order \u003d []"},{"line_number":363,"context_line":"        destroyed \u003d []"},{"line_number":364,"context_line":"        # Sort ids in order which is dictated by destruction dependency"},{"line_number":365,"context_line":"        for obj_id in d_list:"},{"line_number":366,"context_line":"            obj \u003d object_store.get(obj_id)"},{"line_number":367,"context_line":"            if \u0027onDestruction\u0027 in obj.dependencies.keys():"},{"line_number":368,"context_line":"                dependencies \u003d obj.dependencies[\u0027onDestruction\u0027]"},{"line_number":369,"context_line":"                for dependency in dependencies:"},{"line_number":370,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":371,"context_line":"                    if subscriber_id in d_list:"},{"line_number":372,"context_line":"                        if subscriber_id not in deletion_order:"},{"line_number":373,"context_line":"                            deletion_order.append(obj_id)"},{"line_number":374,"context_line":"                            deletion_order.append(subscriber_id)"},{"line_number":375,"context_line":"                        elif subscriber_id in deletion_order:"},{"line_number":376,"context_line":"                            index \u003d deletion_order.index(subscriber_id)"},{"line_number":377,"context_line":"                            deletion_order.insert(index, obj_id)"},{"line_number":378,"context_line":"                    else:"},{"line_number":379,"context_line":"                        deletion_order.append(obj_id)"},{"line_number":380,"context_line":"            else:"},{"line_number":381,"context_line":"                deletion_order.append(obj_id)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        # Destroy objects"},{"line_number":384,"context_line":"        for obj_id in deletion_order:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_bf148c9f","line":381,"range":{"start_line":365,"start_character":1,"end_line":381,"end_character":45},"in_reply_to":"1ac06dbe_6f42e611","updated":"2016-08-24 11:45:23.000000000","message":"I decide to create a graph like\n\n   {\n    {obj1_id: {subscriber1_id, subscriber2_id},\n    {obj2_id: {subscriber2_id, subscriber3_id}\n   }\n\nand sort it using custom implementation of topological sort. I guess that it will be good solution for that case.","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":390,"context_line":"                    if object_store.has(subscriber_id):"},{"line_number":391,"context_line":"                        subscriber \u003d object_store.get(subscriber_id)"},{"line_number":392,"context_line":"                        self._method_invoke(subscriber,"},{"line_number":393,"context_line":"                                            dependency[\u0027handler\u0027])"},{"line_number":394,"context_line":"            self._destroy_object(obj)"},{"line_number":395,"context_line":"            destroyed.append(obj_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_4faf2a94","line":392,"updated":"2016-08-22 17:32:40.000000000","message":"methods should be invoked using invoke_method method. _method_invoke which is _destroy_object actually is a special case for .destroy rather than a generic method call method. The difference is that .destroyed is called per each class in inheritance hierarchy and its exceptions are muted while in generic case only one method is called and it may be overridden/inherited","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"7436922955b94cff766d9e6f318e6be0889d97c5","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                    subscriber_id \u003d dependency[\u0027subscriber\u0027]"},{"line_number":390,"context_line":"                    if object_store.has(subscriber_id):"},{"line_number":391,"context_line":"                        subscriber \u003d object_store.get(subscriber_id)"},{"line_number":392,"context_line":"                        self._method_invoke(subscriber,"},{"line_number":393,"context_line":"                                            dependency[\u0027handler\u0027])"},{"line_number":394,"context_line":"            self._destroy_object(obj)"},{"line_number":395,"context_line":"            destroyed.append(obj_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_ca963aef","line":392,"in_reply_to":"1ac06dbe_4faf2a94","updated":"2016-08-23 11:40:15.000000000","message":"ok, get it. thanks for clarification.","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"80741e9b9c92df009a481964684e49f1410489c0","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                    \u0027on {0}: {1}\u0027).format(obj, e), exc_info\u003dTrue)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _clean_garbage(self, object_store, d_list):"},{"line_number":362,"context_line":"        d_list \u003d set(d_list)"},{"line_number":363,"context_line":"        dd_graph \u003d {}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # NOTE(starodubcevna): construct a graph which looks like:"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa7ab95a_9fcd8587","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":20},"updated":"2016-08-29 22:46:25.000000000","message":"this is funny, but misleading. almost worth a -1 IMO, can you pls rename it to d_set instead?","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"e1ae3bcf353c37eeee063e420f96bdaadff582ce","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                    \u0027on {0}: {1}\u0027).format(obj, e), exc_info\u003dTrue)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _clean_garbage(self, object_store, d_list):"},{"line_number":362,"context_line":"        d_list \u003d set(d_list)"},{"line_number":363,"context_line":"        dd_graph \u003d {}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # NOTE(starodubcevna): construct a graph which looks like:"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa7ab95a_707f00e0","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":20},"in_reply_to":"fa7ab95a_9fcd8587","updated":"2016-08-30 07:30:04.000000000","message":"ok, no pb","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"}],"murano/engine/system/garbage_collector.py":[{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"23baf28c84b3912daa089bdff73d1db1cbc4e787","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def subscribe(self, target, handler\u003d\u0027\u0027):"},{"line_number":34,"context_line":"        caller_context \u003d helpers.get_caller_context()"},{"line_number":35,"context_line":"        receiver \u003d helpers.get_type(caller_context)"},{"line_number":36,"context_line":"        target.destruction_dependencies{receiver.id} \u003d handler"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @staticmethod"},{"line_number":39,"context_line":"    def unsubscrube(self, target):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b94b922a","line":36,"range":{"start_line":36,"start_character":39,"end_line":36,"end_character":52},"updated":"2016-08-04 11:28:33.000000000","message":"[] probably?","commit_id":"8bb623ae78664de91f747d2bcdefbda47e77f95d"},{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"23baf28c84b3912daa089bdff73d1db1cbc4e787","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        target.destruction_dependencies{receiver.id} \u003d handler"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @staticmethod"},{"line_number":39,"context_line":"    def unsubscrube(self, target):"},{"line_number":40,"context_line":"        caller_context \u003d helpers.get_caller_context()"},{"line_number":41,"context_line":"        receiver \u003d helpers.get_type(caller_context)"},{"line_number":42,"context_line":"        target.destruction_dependecies.pop(receiver.id, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_193a9e98","line":39,"range":{"start_line":39,"start_character":16,"end_line":39,"end_character":17},"updated":"2016-08-04 11:28:33.000000000","message":"i","commit_id":"8bb623ae78664de91f747d2bcdefbda47e77f95d"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"17d53ae830b9472f964c232e09af93abedb796a8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        raise NotImplementedError"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @staticmethod"},{"line_number":30,"context_line":"    def subscribe(target, handler\u003dNone):"},{"line_number":31,"context_line":"        caller_context \u003d helpers.get_caller_context()"},{"line_number":32,"context_line":"        target_this \u003d target.object"},{"line_number":33,"context_line":"        receiver \u003d helpers.get_this(caller_context)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_d468cf89","line":30,"updated":"2016-08-22 17:32:40.000000000","message":"There should be a parameter spec decorator here. Otherwise it could be anything and not just an object. See other functions (cast, super etc. for example)","commit_id":"98dbff5f9a4dabfb6f82493492cc9aff76f8be94"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"c927206691f54984c9a44a744ecb46be15fb8c2e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    @specs.parameter(\u0027target\u0027, dsl.MuranoObjectParameter())"},{"line_number":35,"context_line":"    @specs.parameter(\u0027handler\u0027, yaqltypes.String(nullable\u003dTrue))"},{"line_number":36,"context_line":"    def set_destruction_dependency(target, handler\u003dNone):"},{"line_number":37,"context_line":"        caller_context \u003d helpers.get_caller_context()"},{"line_number":38,"context_line":"        target_this \u003d target.object"},{"line_number":39,"context_line":"        receiver \u003d helpers.get_this(caller_context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_1574ff65","line":36,"updated":"2016-08-29 19:42:55.000000000","message":"can we name it subscribe_destruction/ unsibscribe_destruction?","commit_id":"32f9d58d01b3762d5199489a49fdbb95ebc43711"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a8eb8bbbcc948d3f7c90155a96704b8dcf8c1b56","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    @specs.parameter(\u0027target\u0027, dsl.MuranoObjectParameter())"},{"line_number":35,"context_line":"    @specs.parameter(\u0027handler\u0027, yaqltypes.String(nullable\u003dTrue))"},{"line_number":36,"context_line":"    def set_destruction_dependency(target, handler\u003dNone):"},{"line_number":37,"context_line":"        caller_context \u003d helpers.get_caller_context()"},{"line_number":38,"context_line":"        target_this \u003d target.object"},{"line_number":39,"context_line":"        receiver \u003d helpers.get_this(caller_context)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa7ab95a_64b7573a","line":36,"in_reply_to":"fa7ab95a_1574ff65","updated":"2016-08-29 21:03:43.000000000","message":"sure. not a big deal.","commit_id":"32f9d58d01b3762d5199489a49fdbb95ebc43711"},{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"80741e9b9c92df009a481964684e49f1410489c0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class GarbageCollector(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @staticmethod"},{"line_number":29,"context_line":"    def _check(receiver, handler):"},{"line_number":30,"context_line":"        if handler:"},{"line_number":31,"context_line":"            receiver.type.find_single_method(handler)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa7ab95a_1f1975d7","line":29,"updated":"2016-08-29 22:46:25.000000000","message":"can we have a slightly more expressive name here, like\n\n  _chec_method_exists","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"e1ae3bcf353c37eeee063e420f96bdaadff582ce","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class GarbageCollector(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @staticmethod"},{"line_number":29,"context_line":"    def _check(receiver, handler):"},{"line_number":30,"context_line":"        if handler:"},{"line_number":31,"context_line":"            receiver.type.find_single_method(handler)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa7ab95a_f0523066","line":29,"in_reply_to":"fa7ab95a_1f1975d7","updated":"2016-08-30 07:30:04.000000000","message":"I think it\u0027s better to remove it at all","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"}],"releasenotes/notes/garbage-collection-50e78c4c9d47eba6.yaml":[{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"80741e9b9c92df009a481964684e49f1410489c0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Foo will be destroyed after Bar. If you don\u0027t want to notify"},{"line_number":10,"context_line":"    subscriber about target destruction you may not specify handler."},{"line_number":11,"context_line":"    Handler can be static or usual action."},{"line_number":12,"context_line":"issues:"},{"line_number":13,"context_line":"  - Murano is using ``Objects`` and ``ObjectsCopy`` objects"},{"line_number":14,"context_line":"    to transfer data between deployments. Now handler will make"},{"line_number":15,"context_line":"    changes (if any) to objects in ``ObjectsCopy``. So, this"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"fa7ab95a_df49cdb8","line":12,"updated":"2016-08-29 22:46:25.000000000","message":"is this issue fixed by Stans commit? if yes — we could probably just remove the line, since it won\u0027t be in release","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"e1ae3bcf353c37eeee063e420f96bdaadff582ce","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Foo will be destroyed after Bar. If you don\u0027t want to notify"},{"line_number":10,"context_line":"    subscriber about target destruction you may not specify handler."},{"line_number":11,"context_line":"    Handler can be static or usual action."},{"line_number":12,"context_line":"issues:"},{"line_number":13,"context_line":"  - Murano is using ``Objects`` and ``ObjectsCopy`` objects"},{"line_number":14,"context_line":"    to transfer data between deployments. Now handler will make"},{"line_number":15,"context_line":"    changes (if any) to objects in ``ObjectsCopy``. So, this"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"fa7ab95a_10e5d4a6","line":12,"in_reply_to":"fa7ab95a_42e6c0b0","updated":"2016-08-30 07:30:04.000000000","message":"yeap, I add reno before I rebase my patch on Stan\u0027s commit","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"},{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"a0a37e7251b02370f18336b05bc5b31689946947","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Foo will be destroyed after Bar. If you don\u0027t want to notify"},{"line_number":10,"context_line":"    subscriber about target destruction you may not specify handler."},{"line_number":11,"context_line":"    Handler can be static or usual action."},{"line_number":12,"context_line":"issues:"},{"line_number":13,"context_line":"  - Murano is using ``Objects`` and ``ObjectsCopy`` objects"},{"line_number":14,"context_line":"    to transfer data between deployments. Now handler will make"},{"line_number":15,"context_line":"    changes (if any) to objects in ``ObjectsCopy``. So, this"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"fa7ab95a_42e6c0b0","line":12,"in_reply_to":"fa7ab95a_df49cdb8","updated":"2016-08-29 23:21:28.000000000","message":"looks like it is, so please remove this line alltogether","commit_id":"6703baff0bd2e69cd58813ed5854047bc315e042"}]}
