)]}'
{"doc/source/specs/dep-validations-on-create.rst":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"004f2824bd89a095fa26d2d5a1f6aa3835bc4a42","unresolved":false,"context_lines":[{"line_number":32,"context_line":"and if the dependency check fails (i.e. finds a previous unhandled entry that"},{"line_number":33,"context_line":"needs to execute before this one) then the entry gets sent back to the queue."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Generally this is not optimal for several reasons:"},{"line_number":36,"context_line":" * No clear indication of relations between the entries."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_e7051e11","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":50},"updated":"2017-03-10 02:04:36.000000000","message":"Do you have any benchmark result or plan?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":32,"context_line":"and if the dependency check fails (i.e. finds a previous unhandled entry that"},{"line_number":33,"context_line":"needs to execute before this one) then the entry gets sent back to the queue."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Generally this is not optimal for several reasons:"},{"line_number":36,"context_line":" * No clear indication of relations between the entries."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_3353c13a","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":50},"in_reply_to":"9a30ddce_e7051e11","updated":"2017-03-12 13:46:50.000000000","message":"No this is based on code analyzation by myself.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"Generally this is not optimal for several reasons:"},{"line_number":36,"context_line":" * No clear indication of relations between the entries."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"},{"line_number":39,"context_line":"     entry fails a dependency check."},{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_52d94121","line":40,"range":{"start_line":38,"start_character":1,"end_line":40,"end_character":44},"updated":"2017-03-10 07:34:52.000000000","message":"is not logs are stored for failed entries? are not they enough for debugging.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":35,"context_line":"Generally this is not optimal for several reasons:"},{"line_number":36,"context_line":" * No clear indication of relations between the entries."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"},{"line_number":39,"context_line":"     entry fails a dependency check."},{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_ce6b9cb5","line":40,"range":{"start_line":38,"start_character":1,"end_line":40,"end_character":44},"in_reply_to":"9a30ddce_52d94121","updated":"2017-03-12 13:46:50.000000000","message":"What you\u0027d see in the log is basically messages like:\ncreate subnet e9eeb1ac-27c4-4ccc-b948-b2b9af898019 is not a valid operation yet, skipping for now\n\nThey aren\u0027t informative and basically are like saying \"error\"..\n\nWith this proposal the dependencies would be stored in the DB so that they would be accessible at any time so that a debug tool could for example take a snapshot of the DB for analysis.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"},{"line_number":39,"context_line":"     entry fails a dependency check."},{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_b2319d5c","line":41,"range":{"start_line":41,"start_character":3,"end_line":41,"end_character":62},"updated":"2017-03-10 07:34:52.000000000","message":"Can you please share some scenario?\n\nThis spec does not include any information about how suggested approach solves the cyclic problem. It will be good, if discussed in spec.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":38,"context_line":"   * The logic is hidden in the code and there\u0027s no good way to know why an"},{"line_number":39,"context_line":"     entry fails a dependency check."},{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_6ea1d0f7","line":41,"range":{"start_line":41,"start_character":3,"end_line":41,"end_character":62},"in_reply_to":"9a30ddce_b2319d5c","updated":"2017-03-12 13:46:50.000000000","message":"Solving possible cyclic dependency is out of scope for this spec, however with the data in the DB it will be much easier to spot than currently trying to decipher the SQL queries.\n\nPersonally I have witnessed possible cyclic dependency added in a change and was able to alert about it in code review, but it\u0027s hard to catch.\n\nIf we store the data in the DB we can later devise a method for discovering cyclic dependency.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_b5d6e74c","line":43,"range":{"start_line":43,"start_character":1,"end_line":43,"end_character":21},"updated":"2017-03-10 07:34:52.000000000","message":"Don\u0027t you think, provided approach might not perform better because we are doing extra database operations.?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_8ea44408","line":43,"range":{"start_line":43,"start_character":1,"end_line":43,"end_character":21},"in_reply_to":"9a30ddce_b5d6e74c","updated":"2017-03-12 13:46:50.000000000","message":"We will be doing substantially less DB queries since the dependency check will only happen once upon entry creation rather than every time an entry is picked by the thread.\nIt is true that we also need to create/delete the dependency rows but there will be a finite number of such operations.\n\nIn the worst case this method will not improve anything but in the best case it will improve much over the existing situation where a single journal thread can retry the same entry tens or even hundreds of times until a dependent operation finishes processing (you can see it in logs).","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"004f2824bd89a095fa26d2d5a1f6aa3835bc4a42","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_c74e5a6e","line":45,"range":{"start_line":45,"start_character":3,"end_line":45,"end_character":60},"updated":"2017-03-10 02:04:36.000000000","message":"One possible optimization is to calculate the dependency at the first check. and then store this way.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_ceb2bc4b","line":45,"range":{"start_line":45,"start_character":3,"end_line":45,"end_character":60},"in_reply_to":"9a30ddce_c74e5a6e","updated":"2017-03-12 13:46:50.000000000","message":"Logically it will be simpler to calculate dependencies on entry creation rather than doing it in a \"lazy\" manner.\n\nI see no benefit not to do it on entry creation time.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_f5f5bfec","line":46,"range":{"start_line":46,"start_character":5,"end_line":46,"end_character":70},"updated":"2017-03-10 07:34:52.000000000","message":"If I am right then this solution adds one database table, does the proposed approach solves this problem or make it severe?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_eeadc0e9","line":46,"range":{"start_line":46,"start_character":5,"end_line":46,"end_character":70},"in_reply_to":"9a30ddce_f5f5bfec","updated":"2017-03-12 13:46:50.000000000","message":"This was answered in comment on L43","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"When a journal entry is created the dependency management system will calculate"},{"line_number":56,"context_line":"the depndencies on other entries (Similrly to how it does now) and if there are"},{"line_number":57,"context_line":"journal entries the new entry should depend on, their IDs will be inserted into"},{"line_number":58,"context_line":"a link table."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_124189a9","line":56,"range":{"start_line":56,"start_character":34,"end_line":56,"end_character":42},"updated":"2017-03-10 07:34:52.000000000","message":"spelling mistake","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":53,"context_line":"time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"When a journal entry is created the dependency management system will calculate"},{"line_number":56,"context_line":"the depndencies on other entries (Similrly to how it does now) and if there are"},{"line_number":57,"context_line":"journal entries the new entry should depend on, their IDs will be inserted into"},{"line_number":58,"context_line":"a link table."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_6e88f071","line":56,"range":{"start_line":56,"start_character":34,"end_line":56,"end_character":42},"in_reply_to":"9a30ddce_124189a9","updated":"2017-03-12 13:46:50.000000000","message":"Done","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"journal entries the new entry should depend on, their IDs will be inserted into"},{"line_number":58,"context_line":"a link table."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_556a0b82","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":39},"updated":"2017-03-10 07:34:52.000000000","message":"Can you please elaborate it, how we will choose such entries. What are the other things we will be doing. For example, if take an entry from journal and check that it does not have dependant entry in other table.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":57,"context_line":"journal entries the new entry should depend on, their IDs will be inserted into"},{"line_number":58,"context_line":"a link table."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_8e7b647a","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":39},"in_reply_to":"9a30ddce_556a0b82","updated":"2017-03-12 13:46:50.000000000","message":"Done","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_f285d5ce","line":63,"range":{"start_line":63,"start_character":64,"end_line":63,"end_character":72},"updated":"2017-03-10 07:34:52.000000000","message":"spelling","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_0e905494","line":63,"range":{"start_line":63,"start_character":64,"end_line":63,"end_character":72},"in_reply_to":"9a30ddce_f285d5ce","updated":"2017-03-12 13:46:50.000000000","message":"Done","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The proposed table::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_d2e531a4","line":64,"range":{"start_line":63,"start_character":72,"end_line":64,"end_character":5},"updated":"2017-03-10 07:34:52.000000000","message":"What happens after failed state, can you please elaborate it?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The proposed table::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_2e8b5869","line":64,"range":{"start_line":63,"start_character":72,"end_line":64,"end_character":5},"in_reply_to":"9a30ddce_d2e531a4","updated":"2017-03-12 13:46:50.000000000","message":"Not sure what do you mean?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"00995b228886b387de40ff278668b2e6b32c65a2","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The proposed table::"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_952d6348","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":32},"updated":"2017-03-10 07:34:52.000000000","message":"How do we handle the case, when two entries depends on the same resources? I mean, do we use one entry or two separate entries for them.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":64,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":65,"context_line":"dependent rows can be processed."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The proposed table::"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_6eef101e","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":32},"in_reply_to":"9a30ddce_952d6348","updated":"2017-03-12 13:46:50.000000000","message":"The relation is M:N so there will be entry per dependency.","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"004f2824bd89a095fa26d2d5a1f6aa3835bc4a42","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   +------------------------+"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The table columns will be foreign keys to the seqnum column in the journal"},{"line_number":77,"context_line":"table. The constraints will be defined as \"ON DELETE CASCADE\" so that when a"},{"line_number":78,"context_line":"journal entry is removed any possible rows will be removed as well."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The dependency management mechanism will locate parent entries for the given"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_67404e35","line":77,"range":{"start_line":77,"start_character":43,"end_line":77,"end_character":60},"updated":"2017-03-10 02:04:36.000000000","message":"Are you going to change the meaning of COMPLETED?","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"79276c8fc1834335841a5df5f08a0cf6e817ce68","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   +------------------------+"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The table columns will be foreign keys to the seqnum column in the journal"},{"line_number":77,"context_line":"table. The constraints will be defined as \"ON DELETE CASCADE\" so that when a"},{"line_number":78,"context_line":"journal entry is removed any possible rows will be removed as well."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The dependency management mechanism will locate parent entries for the given"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a30ddce_8ef28404","line":77,"range":{"start_line":77,"start_character":43,"end_line":77,"end_character":60},"in_reply_to":"9a30ddce_67404e35","updated":"2017-03-12 13:46:50.000000000","message":"No this state will remain, the cascade is just a precaution unless we want to get rid of the complete state altogether (which is fine by me, but might be unrelated a bit to this spec).","commit_id":"979df3d694c896674060ca48e6b7d09d30664c87"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"f3bdd476055d4c814827c36cd32ea81754f6e2d2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_bddbbe1a","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":21},"updated":"2017-03-15 01:26:00.000000000","message":"Can we plan benchmark?\nit doesn\u0027t have to be extensive one.\nAt least we should do somethig (easy?).\n\nFor example run rally and gather dstat or something.\nAnd also can we get info from mysql log/stats or something?","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"2da1785fc3b1b259df833da77e84bebf6f43d972","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"ffe62b97_d59e13b7","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":21},"in_reply_to":"1a1ced50_ea32365d","updated":"2017-03-26 11:54:13.000000000","message":"I think we discussed that a while ago and saw it\u0027s a disruptive change.\n\nGenerally we do need a dependency management solution, this is just my proposal of a better one than what exists.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"127ebbbb766bc27611cdfa110ea02700e1051a66","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_fe527adc","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":21},"in_reply_to":"3a1ff146_bddbbe1a","updated":"2017-03-15 12:14:36.000000000","message":"From what I understood Rally generally tests the API and not much after it and since this is a-sync I don\u0027t think it will show up in results.\nCorrect me if I\u0027m wrong here.\n\nThis point was made mainly from observation, especially if you look at recent attempts of people to test the full sync mechanism and the log is indicative of this bad behavior of \"pick up entry - entry fails validation - put back - repeat until the dependency cleared\".\n\nMy best idea is perhaps if we had the postmortem tool to analyse logs then we can check how much time it takes from entry creation in the journal table until it completes successfully.\nThen we can compare how much time it takes before and how much after this change.\n\nI don\u0027t mind working on that tool as well in parallel.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"50dcd3af152a2d72d9bf5eb1eff8f55df940de23","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   * Difficult to debug in case of problems."},{"line_number":41,"context_line":"   * Difficult to spot phenomenon such as a cyclic dependency."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":" * Wasted CPU effort."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a1ced50_ea32365d","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":21},"in_reply_to":"3a1ff146_fe527adc","updated":"2017-03-22 01:58:51.000000000","message":"So, shouldn\u0027t the logic to pick up entry be changed?\nso that to pick up oldest entry instead of round robbin manner based on last_retried.\nthen the possibility to hit dependency will be much lower.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"e1cbc991c77b878d01347f9ca3a3f861b0ce9959","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_43657943","line":47,"updated":"2017-03-15 11:41:33.000000000","message":"Can you please point out, from these problems, which problems are being addressed by this spec and How? For the remaining items, we can think of other solutions.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"127ebbbb766bc27611cdfa110ea02700e1051a66","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   * An entry can be checked multiple times for dependencies."},{"line_number":46,"context_line":"   * Lots of redundant DB queries to determine dependencies each time."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_fe7efaac","line":47,"in_reply_to":"3a1ff146_43657943","updated":"2017-03-15 12:14:36.000000000","message":"It\u0027s specified in the open questions section, I elaborated a bit more","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"e1cbc991c77b878d01347f9ca3a3f861b0ce9959","unresolved":false,"context_lines":[{"line_number":53,"context_line":"time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"When a journal entry is created the dependency management system will calculate"},{"line_number":56,"context_line":"the depndencies on other entries (Similarly to how it does now) and if there"},{"line_number":57,"context_line":"are journal entries the new entry should depend on, their IDs will be inserted"},{"line_number":58,"context_line":"into a link table."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_d2777500","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":15},"updated":"2017-03-15 11:41:33.000000000","message":"spelling","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"127ebbbb766bc27611cdfa110ea02700e1051a66","unresolved":false,"context_lines":[{"line_number":53,"context_line":"time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"When a journal entry is created the dependency management system will calculate"},{"line_number":56,"context_line":"the depndencies on other entries (Similarly to how it does now) and if there"},{"line_number":57,"context_line":"are journal entries the new entry should depend on, their IDs will be inserted"},{"line_number":58,"context_line":"into a link table."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_3e4fb293","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":15},"in_reply_to":"3a1ff146_d2777500","updated":"2017-03-15 12:14:36.000000000","message":"Done","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"e1cbc991c77b878d01347f9ca3a3f861b0ce9959","unresolved":false,"context_lines":[{"line_number":57,"context_line":"are journal entries the new entry should depend on, their IDs will be inserted"},{"line_number":58,"context_line":"into a link table."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on by making sure there aren\u0027t any entries"},{"line_number":62,"context_line":"in the dependency table."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":65,"context_line":"state), the dependency links will be removed from the dependency table so that"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_e8c5645b","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":24},"updated":"2017-03-15 11:41:33.000000000","message":"Does it mean for verification of entries it has to access second table? If dependencies are found then it puts into queue and later on(next time) when the same entry is found then it again look into odl_journal_dependency table for dependencies?","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"127ebbbb766bc27611cdfa110ea02700e1051a66","unresolved":false,"context_lines":[{"line_number":57,"context_line":"are journal entries the new entry should depend on, their IDs will be inserted"},{"line_number":58,"context_line":"into a link table."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Thus, when the journal looks for an entry to pick up it will only look for"},{"line_number":61,"context_line":"entries that no other entry depends on by making sure there aren\u0027t any entries"},{"line_number":62,"context_line":"in the dependency table."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":65,"context_line":"state), the dependency links will be removed from the dependency table so that"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_994b602b","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":24},"in_reply_to":"3a1ff146_e8c5645b","updated":"2017-03-15 12:14:36.000000000","message":"No it\u0027s all part of the operation to select the next entry for processing.\n\nRight now we don\u0027t know if there are dependencies or not so we pick by some order. Now that we have this info in DB we can condition on it.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"e1cbc991c77b878d01347f9ca3a3f861b0ce9959","unresolved":false,"context_lines":[{"line_number":61,"context_line":"entries that no other entry depends on by making sure there aren\u0027t any entries"},{"line_number":62,"context_line":"in the dependency table."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":65,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":66,"context_line":"dependent rows can be processed."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_68b094f5","line":64,"range":{"start_line":64,"start_character":64,"end_line":64,"end_character":71},"updated":"2017-03-15 11:41:33.000000000","message":"spelling","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"2da1785fc3b1b259df833da77e84bebf6f43d972","unresolved":false,"context_lines":[{"line_number":61,"context_line":"entries that no other entry depends on by making sure there aren\u0027t any entries"},{"line_number":62,"context_line":"in the dependency table."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"When a journal entry is done processing (either successfully or reahces failed"},{"line_number":65,"context_line":"state), the dependency links will be removed from the dependency table so that"},{"line_number":66,"context_line":"dependent rows can be processed."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ffe62b97_75af47e3","line":64,"range":{"start_line":64,"start_character":64,"end_line":64,"end_character":71},"in_reply_to":"3a1ff146_68b094f5","updated":"2017-03-26 11:54:13.000000000","message":"Done","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"e1cbc991c77b878d01347f9ca3a3f861b0ce9959","unresolved":false,"context_lines":[{"line_number":81,"context_line":"The dependency management mechanism will locate parent entries for the given"},{"line_number":82,"context_line":"entry and will populate the table so that the parent entry\u0027s seqnum will be"},{"line_number":83,"context_line":"set as the parent_id, and the dependent entry id will be set as dependent_id."},{"line_number":84,"context_line":"When the journal picks up an entry for processing it will condition it on not"},{"line_number":85,"context_line":"having any rows with the parent_id in the dependency table. This will ensure"},{"line_number":86,"context_line":"that dependent rows get handled after the parent rows have finished processing."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_3e041214","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":59},"updated":"2017-03-15 11:41:33.000000000","message":"Does check into the table each time an entry is selected?","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"127ebbbb766bc27611cdfa110ea02700e1051a66","unresolved":false,"context_lines":[{"line_number":81,"context_line":"The dependency management mechanism will locate parent entries for the given"},{"line_number":82,"context_line":"entry and will populate the table so that the parent entry\u0027s seqnum will be"},{"line_number":83,"context_line":"set as the parent_id, and the dependent entry id will be set as dependent_id."},{"line_number":84,"context_line":"When the journal picks up an entry for processing it will condition it on not"},{"line_number":85,"context_line":"having any rows with the parent_id in the dependency table. This will ensure"},{"line_number":86,"context_line":"that dependent rows get handled after the parent rows have finished processing."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a1ff146_192cd049","line":85,"range":{"start_line":84,"start_character":0,"end_line":85,"end_character":59},"in_reply_to":"3a1ff146_3e041214","updated":"2017-03-15 12:14:36.000000000","message":"Yes, this is much more efficient than what happens now where multiple queries could be executed on a single entry selection.","commit_id":"62221113b35069feaa3dd2b101efaabbe5a2c37d"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"a6fa6bf85959b8ab40b7fe506fb9b4c8c076b264","unresolved":false,"context_lines":[{"line_number":66,"context_line":"dependent rows can be processed."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The proposed table::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"   +------------------------+"},{"line_number":71,"context_line":"   | odl_journal_dependency |"},{"line_number":72,"context_line":"   +------------------------+"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a1ced50_63a06744","line":69,"updated":"2017-03-21 03:28:32.000000000","message":"Hi Mike,\nCan we think of keeping this information in Memory, I am thinking following way\n\n1) When a new requests is received then we find its dependency and store the ID\u0027s into in-memory(dict), which contains the same mapping, you are planning to store in database.\n2) When we have to find out any dependencies, it should be similar to just accessing dictionary.\n3) If request completes then dependency should be deleted.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Here Comes the Trouble \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n1) How to handle it in, HA environment.\n \u003d\u003d\u003e We can think of some way of synchronizing this information. among networking-odl instances. For example\n     *) We can sync it with database periodically, but it can have stale data at some point of time.\n     *) May be on each event on this in memory database, we generate some events for the other instances of networking-odl and using rpc broadcast or some other mechanism we sync the data.\n\n2) How to handle, service restart?\n \u003d\u003d\u003e We can think of, generate the dependency of database in in-memory on startup or sync with other networking-odl components in HA.\n\n\nI know your purpose of this patch is to improve design, it should handle performance issue as well.","commit_id":"1a6e126f58b4ff57e6bc91e39d6d7b0ee07449f6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"374215b00bb3acc0da361d3bf49d12a27a9b5dad","unresolved":false,"context_lines":[{"line_number":66,"context_line":"dependent rows can be processed."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The proposed table::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"   +------------------------+"},{"line_number":71,"context_line":"   | odl_journal_dependency |"},{"line_number":72,"context_line":"   +------------------------+"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a1ced50_8aec62f4","line":69,"in_reply_to":"1a1ced50_63a06744","updated":"2017-03-22 01:59:36.000000000","message":"It sounds like such event notification between neutron servers too heavy. In stable situation, the entry is created and then right after that, the entry is picked up.","commit_id":"1a6e126f58b4ff57e6bc91e39d6d7b0ee07449f6"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"f501e0786a176feb296fdc3f72d2f452ab8a4fc5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"dependent rows can be processed."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"The proposed table::"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"   +------------------------+"},{"line_number":71,"context_line":"   | odl_journal_dependency |"},{"line_number":72,"context_line":"   +------------------------+"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffe62b97_354bff59","line":69,"in_reply_to":"1a1ced50_8aec62f4","updated":"2017-03-26 11:10:49.000000000","message":"Not sure why you would want to cache this right away, usually cache handling is very difficult to do correctly.\n\nAlso we\u0027re using DB for sync \u0026 resiliency but I\u0027m not sure how much of a bottleneck it is (with any design really, since we don\u0027t have performance evaluations).\n\nLet\u0027s K.I.S.S for start and if need we can always improve.","commit_id":"1a6e126f58b4ff57e6bc91e39d6d7b0ee07449f6"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"374215b00bb3acc0da361d3bf49d12a27a9b5dad","unresolved":false,"context_lines":[{"line_number":70,"context_line":"   +------------------------+"},{"line_number":71,"context_line":"   | odl_journal_dependency |"},{"line_number":72,"context_line":"   +------------------------+"},{"line_number":73,"context_line":"   | parent_id              |"},{"line_number":74,"context_line":"   | dependent_id           |"},{"line_number":75,"context_line":"   +------------------------+"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The table columns will be foreign keys to the seqnum column in the journal"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a1ced50_4af8aac3","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":29},"updated":"2017-03-22 01:59:36.000000000","message":"What\u0027s the primary key?\nparent_id + dependent_id or key column will be introduced?","commit_id":"1a6e126f58b4ff57e6bc91e39d6d7b0ee07449f6"},{"author":{"_account_id":7921,"name":"Mike Kolesnik","email":"mkolesni@redhat.com","username":"mkolesni"},"change_message_id":"f501e0786a176feb296fdc3f72d2f452ab8a4fc5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"   +------------------------+"},{"line_number":71,"context_line":"   | odl_journal_dependency |"},{"line_number":72,"context_line":"   +------------------------+"},{"line_number":73,"context_line":"   | parent_id              |"},{"line_number":74,"context_line":"   | dependent_id           |"},{"line_number":75,"context_line":"   +------------------------+"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The table columns will be foreign keys to the seqnum column in the journal"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ffe62b97_b5702fa7","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":29},"in_reply_to":"1a1ced50_4af8aac3","updated":"2017-03-26 11:10:49.000000000","message":"Logically it would be a combination yes, as it\u0027s a link table it\u0027s enough and usually how it\u0027s done in RDBMS unless we want to keep some data on the link itself in which case we could introduce a separate PK.","commit_id":"1a6e126f58b4ff57e6bc91e39d6d7b0ee07449f6"}]}
