)]}'
{"neutron/db/provisioning_blocks.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"2629f12db6eb37f4ca3e89c24d5f5857d3bfc35e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    _RESOURCE_TO_MODEL_MAP[resource] \u003d model"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@db_api.retry_if_session_inactive()"},{"line_number":44,"context_line":"def add_provisioning_component(context, object_id, object_type, entity):"},{"line_number":45,"context_line":"    \"\"\"Adds a provisioning block by an entity to a given object."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_a2bfe2ce","line":43,"updated":"2017-06-30 19:57:42.000000000","message":"This decorator should already catch the duplicate entry exception and retry which will return early at L69 the second time.","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"9657960da27aca93d6c14c2cab96bde7074bde16","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    _RESOURCE_TO_MODEL_MAP[resource] \u003d model"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@db_api.retry_if_session_inactive()"},{"line_number":44,"context_line":"def add_provisioning_component(context, object_id, object_type, entity):"},{"line_number":45,"context_line":"    \"\"\"Adds a provisioning block by an entity to a given object."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_c2352cdc","line":43,"in_reply_to":"3f1d235d_a2bfe2ce","updated":"2017-07-03 01:53:57.000000000","message":"L133 neutron/db/api.py\nretry_if_session_inactive will be retry when session is inactive,however it won\u0027t process the duplicate entry exception.\nNormally, add_provisioning_component method need to use line level lock at L65.","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"},{"author":{"_account_id":13732,"name":"Yifei Xue","email":"xueyifei@huawei.com","username":"yifei.xue"},"change_message_id":"84fa720c9df5953ea1c3db278920423099ff818b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        pb_obj.ProvisioningBlock("},{"line_number":73,"context_line":"            context, standard_attr_id\u003dstandard_attr_id, entity\u003dentity).create()"},{"line_number":74,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":75,"context_line":"        # catch DBDuplicateEntry exception for provisioning_blocks module"},{"line_number":76,"context_line":"        LOG.debug(\"Ignored duplicate provisioning block setup for %(otype)s \""},{"line_number":77,"context_line":"                  \"%(oid)s by entity %(entity)s.\", log_dict)"},{"line_number":78,"context_line":"        return"},{"line_number":79,"context_line":"    LOG.debug(\"Transition to ACTIVE for %(otype)s object %(oid)s \""},{"line_number":80,"context_line":"              \"will not be triggered until provisioned by entity %(entity)s.\","},{"line_number":81,"context_line":"              log_dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_db3aa732","line":78,"range":{"start_line":74,"start_character":0,"end_line":78,"end_character":14},"updated":"2017-06-23 08:38:33.000000000","message":"Why not handle this in create() ? I have met same issue while integrating ODL with OpenStack.","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"1f43265618b20a47a211a1d78d0602abfc7db28f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        pb_obj.ProvisioningBlock("},{"line_number":73,"context_line":"            context, standard_attr_id\u003dstandard_attr_id, entity\u003dentity).create()"},{"line_number":74,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":75,"context_line":"        # catch DBDuplicateEntry exception for provisioning_blocks module"},{"line_number":76,"context_line":"        LOG.debug(\"Ignored duplicate provisioning block setup for %(otype)s \""},{"line_number":77,"context_line":"                  \"%(oid)s by entity %(entity)s.\", log_dict)"},{"line_number":78,"context_line":"        return"},{"line_number":79,"context_line":"    LOG.debug(\"Transition to ACTIVE for %(otype)s object %(oid)s \""},{"line_number":80,"context_line":"              \"will not be triggered until provisioned by entity %(entity)s.\","},{"line_number":81,"context_line":"              log_dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_4e6b5284","line":78,"range":{"start_line":74,"start_character":0,"end_line":78,"end_character":14},"in_reply_to":"5f201791_3bd2bbd3","updated":"2017-06-25 13:51:09.000000000","message":"Please, look for previous answer.","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"},{"author":{"_account_id":13732,"name":"Yifei Xue","email":"xueyifei@huawei.com","username":"yifei.xue"},"change_message_id":"778c77cc1f94035adf6dbcb4244e36179983ec9d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        pb_obj.ProvisioningBlock("},{"line_number":73,"context_line":"            context, standard_attr_id\u003dstandard_attr_id, entity\u003dentity).create()"},{"line_number":74,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":75,"context_line":"        # catch DBDuplicateEntry exception for provisioning_blocks module"},{"line_number":76,"context_line":"        LOG.debug(\"Ignored duplicate provisioning block setup for %(otype)s \""},{"line_number":77,"context_line":"                  \"%(oid)s by entity %(entity)s.\", log_dict)"},{"line_number":78,"context_line":"        return"},{"line_number":79,"context_line":"    LOG.debug(\"Transition to ACTIVE for %(otype)s object %(oid)s \""},{"line_number":80,"context_line":"              \"will not be triggered until provisioned by entity %(entity)s.\","},{"line_number":81,"context_line":"              log_dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_3bd2bbd3","line":78,"range":{"start_line":74,"start_character":0,"end_line":78,"end_character":14},"in_reply_to":"5f201791_db3aa732","updated":"2017-06-23 08:42:49.000000000","message":"I myself think the root cause is located in create().","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"},{"author":{"_account_id":19178,"name":"Zhengwei Gao","email":"gaozhengwei1@letv.com","username":"gaozhengwei"},"change_message_id":"1f43265618b20a47a211a1d78d0602abfc7db28f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        pb_obj.ProvisioningBlock("},{"line_number":73,"context_line":"            context, standard_attr_id\u003dstandard_attr_id, entity\u003dentity).create()"},{"line_number":74,"context_line":"    except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":75,"context_line":"        # catch DBDuplicateEntry exception for provisioning_blocks module"},{"line_number":76,"context_line":"        LOG.debug(\"Ignored duplicate provisioning block setup for %(otype)s \""},{"line_number":77,"context_line":"                  \"%(oid)s by entity %(entity)s.\", log_dict)"},{"line_number":78,"context_line":"        return"},{"line_number":79,"context_line":"    LOG.debug(\"Transition to ACTIVE for %(otype)s object %(oid)s \""},{"line_number":80,"context_line":"              \"will not be triggered until provisioned by entity %(entity)s.\","},{"line_number":81,"context_line":"              log_dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_ae5c26ed","line":78,"range":{"start_line":74,"start_character":0,"end_line":78,"end_character":14},"in_reply_to":"5f201791_db3aa732","updated":"2017-06-25 13:51:09.000000000","message":"In case of pb_object existing, add_provisioning_component method directly return as same as normal result. other method maybe have \nthemself process logical. \n\nThanks.","commit_id":"b0f527e419bcbb5a6485b42553e59005711e46c0"}]}
