)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"0df824102e9c2eac397e5f365421b593721b6162","unresolved":true,"context_lines":[{"line_number":25,"context_line":"Add new triggers: Host-add, host-delete, host-reinstall, lock, swact,"},{"line_number":26,"context_line":"force-lock, force-swact, system-modify."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Introduced a lifeycle semnatic check hook for reapply evaluation where"},{"line_number":29,"context_line":"apps can run complex logic to reject the evaluation."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Modified unit tests. These are basic unit tests querying the number of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fac0158a_71bd3bdd","line":28,"range":{"start_line":28,"start_character":22,"end_line":28,"end_character":31},"updated":"2021-02-05 15:07:14.000000000","message":"typo","commit_id":"787d6a7cde7451fe4d6afa38041400f6dfe47a0a"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Existing triggers are: host-delete, runtime-apply-puppet,"},{"line_number":24,"context_line":"platform-update, unlock, force-unlock."},{"line_number":25,"context_line":"Add new triggers: Host-add, host-delete, host-reinstall, lock, swact,"},{"line_number":26,"context_line":"force-lock, force-swact, system-modify."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Introduced a lifeycle semantic check hook for reapply evaluation where"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"57c1eeea_65a4307a","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":26},"updated":"2021-02-22 00:11:31.000000000","message":"nit: host-add","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Existing triggers are: host-delete, runtime-apply-puppet,"},{"line_number":24,"context_line":"platform-update, unlock, force-unlock."},{"line_number":25,"context_line":"Add new triggers: Host-add, host-delete, host-reinstall, lock, swact,"},{"line_number":26,"context_line":"force-lock, force-swact, system-modify."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Introduced a lifeycle semantic check hook for reapply evaluation where"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1ef6db2d_c123696b","line":25,"range":{"start_line":25,"start_character":18,"end_line":25,"end_character":26},"in_reply_to":"57c1eeea_65a4307a","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"}],"sysinv/sysinv/sysinv/sysinv/common/constants.py":[{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1590,"context_line":"APP_EVALUATE_REAPPLY_TYPE_HOST_SWACT \u003d SWACT_ACTION"},{"line_number":1591,"context_line":"APP_EVALUATE_REAPPLY_TYPE_HOST_FORCE_SWACT \u003d FORCE_SWACT_ACTION"},{"line_number":1592,"context_line":"APP_EVALUATE_REAPPLY_TYPE_RUNTIME_APPLY_PUPPET \u003d \u0027runtime-apply-puppet\u0027"},{"line_number":1593,"context_line":"APP_EVALUATE_REAPPLY_TYPE_PLATFORM_UPDATE \u003d \u0027platform-update\u0027"},{"line_number":1594,"context_line":"APP_EVALUATE_REAPPLY_TYPE_SYSTEM_MODIFY \u003d \u0027system-modify\u0027"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"40bf59aa_a267a6d9","line":1593,"range":{"start_line":1593,"start_character":0,"end_line":1593,"end_character":61},"updated":"2021-02-22 00:11:31.000000000","message":"Can we change this to:\n\nAPP_EVALUATE_REAPPLY_HOST_AVAILABILITY \u003d \u0027host-availability-updated\u0027","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"APP_EVALUATE_REAPPLY_TYPE_HOST_SWACT \u003d SWACT_ACTION"},{"line_number":1591,"context_line":"APP_EVALUATE_REAPPLY_TYPE_HOST_FORCE_SWACT \u003d FORCE_SWACT_ACTION"},{"line_number":1592,"context_line":"APP_EVALUATE_REAPPLY_TYPE_RUNTIME_APPLY_PUPPET \u003d \u0027runtime-apply-puppet\u0027"},{"line_number":1593,"context_line":"APP_EVALUATE_REAPPLY_TYPE_PLATFORM_UPDATE \u003d \u0027platform-update\u0027"},{"line_number":1594,"context_line":"APP_EVALUATE_REAPPLY_TYPE_SYSTEM_MODIFY \u003d \u0027system-modify\u0027"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"80f57ab2_5180f4a0","line":1593,"range":{"start_line":1593,"start_character":0,"end_line":1593,"end_character":61},"in_reply_to":"40bf59aa_a267a6d9","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1593,"context_line":"APP_EVALUATE_REAPPLY_TYPE_PLATFORM_UPDATE \u003d \u0027platform-update\u0027"},{"line_number":1594,"context_line":"APP_EVALUATE_REAPPLY_TYPE_SYSTEM_MODIFY \u003d \u0027system-modify\u0027"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP \u003d {"},{"line_number":1597,"context_line":"    UNLOCK_ACTION:"},{"line_number":1598,"context_line":"        APP_EVALUATE_REAPPLY_TYPE_HOST_UNLOCK,"},{"line_number":1599,"context_line":"    FORCE_UNLOCK_ACTION:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7e496055_635156aa","line":1596,"range":{"start_line":1596,"start_character":0,"end_line":1596,"end_character":44},"updated":"2021-02-22 00:11:31.000000000","message":"Missing APP_EVALUATE_REAPPLY_TYPE_HOST_ADD and APP_EVALUATE_REAPPLY_TYPE_HOST_REINSTALL from the map. Should they be there as well?","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1593,"context_line":"APP_EVALUATE_REAPPLY_TYPE_PLATFORM_UPDATE \u003d \u0027platform-update\u0027"},{"line_number":1594,"context_line":"APP_EVALUATE_REAPPLY_TYPE_SYSTEM_MODIFY \u003d \u0027system-modify\u0027"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP \u003d {"},{"line_number":1597,"context_line":"    UNLOCK_ACTION:"},{"line_number":1598,"context_line":"        APP_EVALUATE_REAPPLY_TYPE_HOST_UNLOCK,"},{"line_number":1599,"context_line":"    FORCE_UNLOCK_ACTION:"}],"source_content_type":"text/x-python","patch_set":14,"id":"caa8fb59_b8b1ed16","line":1596,"range":{"start_line":1596,"start_character":0,"end_line":1596,"end_character":44},"in_reply_to":"7e496055_635156aa","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"}],"sysinv/sysinv/sysinv/sysinv/common/utils.py":[{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"1a7a42d6fb5c32c6432b2300d0b12e7e90080b3f","unresolved":true,"context_lines":[{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"            if behavior:"},{"line_number":1963,"context_line":"                try:"},{"line_number":1964,"context_line":"                    values \u003d [\u0027yes\u0027, \u0027no\u0027, \u0027true\u0027, \u0027false\u0027]"},{"line_number":1965,"context_line":"                    platform_managed_app \u003d behavior[constants.APP_METADATA_PLATFORM_MANAGED_APP]"},{"line_number":1966,"context_line":"                    if str(platform_managed_app).lower() not in values:"},{"line_number":1967,"context_line":"                        raise exception.SysinvException(_("}],"source_content_type":"text/x-python","patch_set":11,"id":"e0cecb59_1a1ae31c","line":1964,"updated":"2021-02-15 14:52:03.000000000","message":"There is a utility declared in this method (is_valid_boolstr) that does similar validation as this.  Does this validation need to be a subset of that utility, or can that utility be used instead?","commit_id":"23e4f51b7a72f3f8a20fbe08ffa336edf51acf9b"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1907,"context_line":"              - \u003capp_name.2\u003e"},{"line_number":1908,"context_line":"            triggers: - optional: list of what triggers the reapply evaluation"},{"line_number":1909,"context_line":"              - type: \u003ckey in APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP\u003e"},{"line_number":1910,"context_line":"                filters: - optional: list of field:value, that aid filtering"},{"line_number":1911,"context_line":"                           of the trigger events. All pairs must be"},{"line_number":1912,"context_line":"                           present in trigger dictionary that is passed in"},{"line_number":1913,"context_line":"                           the calls (eg. trigger[field_name1]\u003d\u003dvalue_name1 and"}],"source_content_type":"text/x-python","patch_set":14,"id":"284bdbb5_7770947a","line":1910,"range":{"start_line":1910,"start_character":16,"end_line":1910,"end_character":23},"updated":"2021-02-22 00:11:31.000000000","message":"nit: Describe this a little more. When to filter any why?","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"              - \u003capp_name.2\u003e"},{"line_number":1908,"context_line":"            triggers: - optional: list of what triggers the reapply evaluation"},{"line_number":1909,"context_line":"              - type: \u003ckey in APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP\u003e"},{"line_number":1910,"context_line":"                filters: - optional: list of field:value, that aid filtering"},{"line_number":1911,"context_line":"                           of the trigger events. All pairs must be"},{"line_number":1912,"context_line":"                           present in trigger dictionary that is passed in"},{"line_number":1913,"context_line":"                           the calls (eg. trigger[field_name1]\u003d\u003dvalue_name1 and"}],"source_content_type":"text/x-python","patch_set":14,"id":"65c24119_8f2e73c0","line":1910,"range":{"start_line":1910,"start_character":16,"end_line":1910,"end_character":23},"in_reply_to":"284bdbb5_7770947a","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"            if behavior:"},{"line_number":1963,"context_line":"                try:"},{"line_number":1964,"context_line":"                    platform_managed_app \u003d behavior[constants.APP_METADATA_PLATFORM_MANAGED_APP]"},{"line_number":1965,"context_line":"                    if not is_valid_boolstr(platform_managed_app):"},{"line_number":1966,"context_line":"                        raise exception.SysinvException(_("},{"line_number":1967,"context_line":"                            \"Invalid {}: {} expected value is a boolean string.\""}],"source_content_type":"text/x-python","patch_set":14,"id":"3d2413b3_6d5d32c7","line":1964,"range":{"start_line":1964,"start_character":52,"end_line":1964,"end_character":95},"updated":"2021-02-22 00:11:31.000000000","message":"Looks like this is defined in https://review.opendev.org/c/starlingx/config/+/774292. I think they will land together, but typically the review changes should be self contained to support easy reverts if needed. If they land separate for some reason this will break things.","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"            if behavior:"},{"line_number":1963,"context_line":"                try:"},{"line_number":1964,"context_line":"                    platform_managed_app \u003d behavior[constants.APP_METADATA_PLATFORM_MANAGED_APP]"},{"line_number":1965,"context_line":"                    if not is_valid_boolstr(platform_managed_app):"},{"line_number":1966,"context_line":"                        raise exception.SysinvException(_("},{"line_number":1967,"context_line":"                            \"Invalid {}: {} expected value is a boolean string.\""}],"source_content_type":"text/x-python","patch_set":14,"id":"bc9dc2f5_d90920e2","line":1964,"range":{"start_line":1964,"start_character":52,"end_line":1964,"end_character":95},"in_reply_to":"3d2413b3_6d5d32c7","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1971,"context_line":"                    pass"},{"line_number":1972,"context_line":""},{"line_number":1973,"context_line":"                try:"},{"line_number":1974,"context_line":"                    desired_state \u003d behavior[constants.APP_METADATA_DESIRED_STATE]"},{"line_number":1975,"context_line":"                    if not isinstance(desired_state, six.string_types):"},{"line_number":1976,"context_line":"                        raise exception.SysinvException(_("},{"line_number":1977,"context_line":"                            \"Invalid {}: {} should be {}.\""}],"source_content_type":"text/x-python","patch_set":14,"id":"a96a7348_26f5c029","line":1974,"range":{"start_line":1974,"start_character":45,"end_line":1974,"end_character":81},"updated":"2021-02-22 00:11:31.000000000","message":"Also defined in https://review.opendev.org/c/starlingx/config/+/774292. I think they will land together, but typically the review changes should be self contained.","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1971,"context_line":"                    pass"},{"line_number":1972,"context_line":""},{"line_number":1973,"context_line":"                try:"},{"line_number":1974,"context_line":"                    desired_state \u003d behavior[constants.APP_METADATA_DESIRED_STATE]"},{"line_number":1975,"context_line":"                    if not isinstance(desired_state, six.string_types):"},{"line_number":1976,"context_line":"                        raise exception.SysinvException(_("},{"line_number":1977,"context_line":"                            \"Invalid {}: {} should be {}.\""}],"source_content_type":"text/x-python","patch_set":14,"id":"fab0a06b_223d3990","line":1974,"range":{"start_line":1974,"start_character":45,"end_line":1974,"end_character":81},"in_reply_to":"a96a7348_26f5c029","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"}],"sysinv/sysinv/sysinv/sysinv/conductor/kube_app.py":[{"author":{"_account_id":32016,"name":"Suvro Ghosh","display_name":"Suvro","email":"ghosh.suvrojeet@gmail.com","username":"sghosh"},"change_message_id":"1ee3ce4a7535a00eb5f30377edfdb3da64fa73e3","unresolved":true,"context_lines":[{"line_number":1902,"context_line":"                # resulting the dumped out charts not readable in Armada."},{"line_number":1903,"context_line":"                # Set preserve_quotes\u003dTrue to preserve all the quotes."},{"line_number":1904,"context_line":"                # The assumption here: there is just one yaml section"},{"line_number":1905,"context_line":"                metadata \u003d list(yaml.load_all("},{"line_number":1906,"context_line":"                    f, Loader\u003dyaml.RoundTripLoader, preserve_quotes\u003dTrue))[0]"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        if metadata:"}],"source_content_type":"text/x-python","patch_set":8,"id":"179bad02_e35ccc12","line":1905,"updated":"2021-02-10 03:20:58.000000000","message":"Why using load_all instead of load? using load_all has the overhead(function call to convert to list) of returning a generator which again needs to be converted to a list. I think there is only one metadata file so using just load should work\n\nWhich function to use load_all vs load can be decided below: \nhow many metadata files to load? if answer is 1 then load if answer is more than 1 then load_all","commit_id":"33abbcf04f2b34ed01e0f7a51581547aed4bcc3b"},{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"ec4814303e1b065fd17aa83fc512448033235f76","unresolved":true,"context_lines":[{"line_number":1905,"context_line":"                metadata \u003d list(yaml.load_all("},{"line_number":1906,"context_line":"                    f, Loader\u003dyaml.RoundTripLoader, preserve_quotes\u003dTrue))[0]"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        if metadata:"},{"line_number":1909,"context_line":"            conductor_obj.apps_metadata[constants.APP_METADATA_APPS][app.name] \u003d metadata"},{"line_number":1910,"context_line":"            LOG.info(\"Loaded metadata for app {}: {}\".format(app.name, metadata))"},{"line_number":1911,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"844a066a_67c93413","line":1908,"updated":"2021-02-08 13:15:44.000000000","message":"If the metadata loaded 3 lines above is empty, this block will be skipped.  \nIs that what is expected? or do you still want to invoke this block if the file exists, but is empty?  ie: if you want to be able to set the metadata to an empty list, this wont happen.","commit_id":"33abbcf04f2b34ed01e0f7a51581547aed4bcc3b"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"dd45db10533e16f65f353a4eeada29a0ce3b81f7","unresolved":false,"context_lines":[{"line_number":1905,"context_line":"                metadata \u003d list(yaml.load_all("},{"line_number":1906,"context_line":"                    f, Loader\u003dyaml.RoundTripLoader, preserve_quotes\u003dTrue))[0]"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        if metadata:"},{"line_number":1909,"context_line":"            conductor_obj.apps_metadata[constants.APP_METADATA_APPS][app.name] \u003d metadata"},{"line_number":1910,"context_line":"            LOG.info(\"Loaded metadata for app {}: {}\".format(app.name, metadata))"},{"line_number":1911,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"8d7cf28c_4a859e6e","line":1908,"in_reply_to":"844a066a_67c93413","updated":"2021-02-08 16:13:48.000000000","message":"This is expected.\nThe consumers of apps_metadata will anyway do the checks for empty keys.","commit_id":"33abbcf04f2b34ed01e0f7a51581547aed4bcc3b"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1896,"context_line":"        metadata \u003d None"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"        if os.path.exists(app.sync_metadata_file):"},{"line_number":1899,"context_line":"            # Save the path for writing overrides files"},{"line_number":1900,"context_line":"            with open(app.sync_metadata_file, \u0027r\u0027) as f:"},{"line_number":1901,"context_line":"                # The RoundTripLoader removes the superfluous quotes by default,"},{"line_number":1902,"context_line":"                # resulting the dumped out charts not readable in Armada."}],"source_content_type":"text/x-python","patch_set":14,"id":"92a4ac1d_1d10b437","line":1899,"updated":"2021-02-22 00:11:31.000000000","message":"nit: update comment. Not related to overrides files","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"        metadata \u003d None"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"        if os.path.exists(app.sync_metadata_file):"},{"line_number":1899,"context_line":"            # Save the path for writing overrides files"},{"line_number":1900,"context_line":"            with open(app.sync_metadata_file, \u0027r\u0027) as f:"},{"line_number":1901,"context_line":"                # The RoundTripLoader removes the superfluous quotes by default,"},{"line_number":1902,"context_line":"                # resulting the dumped out charts not readable in Armada."}],"source_content_type":"text/x-python","patch_set":14,"id":"429a78f9_6bf9cc12","line":1899,"in_reply_to":"92a4ac1d_1d10b437","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":1899,"context_line":"            # Save the path for writing overrides files"},{"line_number":1900,"context_line":"            with open(app.sync_metadata_file, \u0027r\u0027) as f:"},{"line_number":1901,"context_line":"                # The RoundTripLoader removes the superfluous quotes by default,"},{"line_number":1902,"context_line":"                # resulting the dumped out charts not readable in Armada."},{"line_number":1903,"context_line":"                # Set preserve_quotes\u003dTrue to preserve all the quotes."},{"line_number":1904,"context_line":"                # The assumption here: there is just one yaml section"},{"line_number":1905,"context_line":"                metadata \u003d yaml.load("}],"source_content_type":"text/x-python","patch_set":14,"id":"5c731f04_cb5f3607","line":1902,"updated":"2021-02-22 00:11:31.000000000","message":"nit: update comment. Not related to charts/Armada","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":1899,"context_line":"            # Save the path for writing overrides files"},{"line_number":1900,"context_line":"            with open(app.sync_metadata_file, \u0027r\u0027) as f:"},{"line_number":1901,"context_line":"                # The RoundTripLoader removes the superfluous quotes by default,"},{"line_number":1902,"context_line":"                # resulting the dumped out charts not readable in Armada."},{"line_number":1903,"context_line":"                # Set preserve_quotes\u003dTrue to preserve all the quotes."},{"line_number":1904,"context_line":"                # The assumption here: there is just one yaml section"},{"line_number":1905,"context_line":"                metadata \u003d yaml.load("}],"source_content_type":"text/x-python","patch_set":14,"id":"9a75451d_5e489eda","line":1902,"in_reply_to":"5c731f04_cb5f3607","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":2083,"context_line":""},{"line_number":2084,"context_line":"        return False"},{"line_number":2085,"context_line":""},{"line_number":2086,"context_line":"    def perform_app_update(self, conductor_obj, from_rpc_app, to_rpc_app, tarfile,"},{"line_number":2087,"context_line":"                           operation, lifecycle_hook_info_app_update, reuse_user_overrides\u003dNone):"},{"line_number":2088,"context_line":"        \"\"\"Process application update request"},{"line_number":2089,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7c28b469_d716404e","line":2086,"range":{"start_line":2086,"start_character":33,"end_line":2086,"end_character":46},"updated":"2021-02-22 00:11:31.000000000","message":"This is the temporary change reverted by https://review.opendev.org/c/starlingx/config/+/774292","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":2083,"context_line":""},{"line_number":2084,"context_line":"        return False"},{"line_number":2085,"context_line":""},{"line_number":2086,"context_line":"    def perform_app_update(self, conductor_obj, from_rpc_app, to_rpc_app, tarfile,"},{"line_number":2087,"context_line":"                           operation, lifecycle_hook_info_app_update, reuse_user_overrides\u003dNone):"},{"line_number":2088,"context_line":"        \"\"\"Process application update request"},{"line_number":2089,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7eb7055c_80e8f668","line":2086,"range":{"start_line":2086,"start_character":33,"end_line":2086,"end_character":46},"in_reply_to":"7c28b469_d716404e","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"}],"sysinv/sysinv/sysinv/sysinv/conductor/manager.py":[{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":11735,"context_line":"        return self._fernet.get_fernet_keys(key_id)"},{"line_number":11736,"context_line":""},{"line_number":11737,"context_line":"    def determine_apps_reapply_order(self, name_only):"},{"line_number":11738,"context_line":"        # TODO(dvoicule) reorded apps based on dependencies between them"},{"line_number":11739,"context_line":"        # now make HELM_APP_PLATFORM first to keep backward compatibility"},{"line_number":11740,"context_line":"        ordered_apps \u003d []"},{"line_number":11741,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"79fb7dc1_16aefceb","line":11738,"range":{"start_line":11738,"start_character":25,"end_line":11738,"end_character":32},"updated":"2021-02-22 00:11:31.000000000","message":"nit: reorder","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":11735,"context_line":"        return self._fernet.get_fernet_keys(key_id)"},{"line_number":11736,"context_line":""},{"line_number":11737,"context_line":"    def determine_apps_reapply_order(self, name_only):"},{"line_number":11738,"context_line":"        # TODO(dvoicule) reorded apps based on dependencies between them"},{"line_number":11739,"context_line":"        # now make HELM_APP_PLATFORM first to keep backward compatibility"},{"line_number":11740,"context_line":"        ordered_apps \u003d []"},{"line_number":11741,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9adf63c3_7bf275f6","line":11738,"range":{"start_line":11738,"start_character":25,"end_line":11738,"end_character":32},"in_reply_to":"79fb7dc1_16aefceb","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":11754,"context_line":""},{"line_number":11755,"context_line":"    def evaluate_apps_reapply(self, context, trigger):"},{"line_number":11756,"context_line":"        \"\"\"Synchronously, determine whether an application"},{"line_number":11757,"context_line":"        re-apply is needed, and if so, raise the re-apply flag."},{"line_number":11758,"context_line":""},{"line_number":11759,"context_line":"        :param context: request context."},{"line_number":11760,"context_line":"        :param trigger: dictionary containing at least the \u0027type\u0027 field"}],"source_content_type":"text/x-python","patch_set":14,"id":"1d416a44_86d5df53","line":11757,"updated":"2021-02-22 00:11:31.000000000","message":"Can you add more descriptive detail here on how the filtering impacts when and/if an app is evaluated for re-apply?","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":11754,"context_line":""},{"line_number":11755,"context_line":"    def evaluate_apps_reapply(self, context, trigger):"},{"line_number":11756,"context_line":"        \"\"\"Synchronously, determine whether an application"},{"line_number":11757,"context_line":"        re-apply is needed, and if so, raise the re-apply flag."},{"line_number":11758,"context_line":""},{"line_number":11759,"context_line":"        :param context: request context."},{"line_number":11760,"context_line":"        :param trigger: dictionary containing at least the \u0027type\u0027 field"}],"source_content_type":"text/x-python","patch_set":14,"id":"bd621501_c9d8e513","line":11757,"in_reply_to":"1d416a44_86d5df53","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"f872f6e174144a938c135f2b6b725a4830b9ae39","unresolved":true,"context_lines":[{"line_number":11766,"context_line":"        metadata_map \u003d constants.APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP"},{"line_number":11767,"context_line":""},{"line_number":11768,"context_line":"        for app in apps:"},{"line_number":11769,"context_line":"            app_triggers \u003d self.apps_metadata[constants.APP_METADATA_APPS].get(app.name, None)"},{"line_number":11770,"context_line":"            if app_triggers is not None:"},{"line_number":11771,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_BEHAVIOR, None)"},{"line_number":11772,"context_line":"            if app_triggers is not None:"},{"line_number":11773,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_EVALUATE_REAPPLY, None)"},{"line_number":11774,"context_line":"            if app_triggers is not None:"},{"line_number":11775,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_TRIGGERS, None)"},{"line_number":11776,"context_line":""},{"line_number":11777,"context_line":"            if app_triggers is None:"},{"line_number":11778,"context_line":"                continue"},{"line_number":11779,"context_line":""},{"line_number":11780,"context_line":"            try:"},{"line_number":11781,"context_line":"                hook_info \u003d LifecycleHookInfo()"}],"source_content_type":"text/x-python","patch_set":14,"id":"c7c68ddf_eb471b6b","line":11778,"range":{"start_line":11769,"start_character":0,"end_line":11778,"end_character":24},"updated":"2021-02-22 00:11:31.000000000","message":"Since this is just a heirarchy of nested keys, can you just attempt to directly access the triggers cat a KeyError if none exist? Something like\n\n  app_md \u003d self.apps_metadata[constants.APP_METADATA_APPS].get(app.name, {})\n  try:\n      app_triggers \u003d app_md[constants.APP_METADATA_BEHAVIOR][constants.APP_METADATA_EVALUATE_REAPPLY][constants.APP_METADATA_TRIGGERS]\n  except KeyError:\n      continue","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"bc0212e2ca271928047fe0b60e596ada33b798d1","unresolved":false,"context_lines":[{"line_number":11766,"context_line":"        metadata_map \u003d constants.APP_EVALUATE_REAPPLY_TRIGGER_TO_METADATA_MAP"},{"line_number":11767,"context_line":""},{"line_number":11768,"context_line":"        for app in apps:"},{"line_number":11769,"context_line":"            app_triggers \u003d self.apps_metadata[constants.APP_METADATA_APPS].get(app.name, None)"},{"line_number":11770,"context_line":"            if app_triggers is not None:"},{"line_number":11771,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_BEHAVIOR, None)"},{"line_number":11772,"context_line":"            if app_triggers is not None:"},{"line_number":11773,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_EVALUATE_REAPPLY, None)"},{"line_number":11774,"context_line":"            if app_triggers is not None:"},{"line_number":11775,"context_line":"                app_triggers \u003d app_triggers.get(constants.APP_METADATA_TRIGGERS, None)"},{"line_number":11776,"context_line":""},{"line_number":11777,"context_line":"            if app_triggers is None:"},{"line_number":11778,"context_line":"                continue"},{"line_number":11779,"context_line":""},{"line_number":11780,"context_line":"            try:"},{"line_number":11781,"context_line":"                hook_info \u003d LifecycleHookInfo()"}],"source_content_type":"text/x-python","patch_set":14,"id":"18024604_959523a7","line":11778,"range":{"start_line":11769,"start_character":0,"end_line":11778,"end_character":24},"in_reply_to":"c7c68ddf_eb471b6b","updated":"2021-02-22 15:24:33.000000000","message":"Done","commit_id":"1c94c9f46fc76c15a0065a46dcf22058d7cbcc8e"},{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"26ba8332da2164deff28efd980359933e7b3fdcd","unresolved":true,"context_lines":[{"line_number":256,"context_line":"        # until host unlock and we need ceph-mon up in order to configure"},{"line_number":257,"context_line":"        # ceph for the initial unlock."},{"line_number":258,"context_line":"        self._helm \u003d helm.HelmOperator(self.dbapi)"},{"line_number":259,"context_line":"        self._app \u003d kube_app.AppOperator(self.dbapi, self._helm, self.apps_metadata)"},{"line_number":260,"context_line":"        self._docker \u003d kube_app.DockerHelper(self.dbapi)"},{"line_number":261,"context_line":"        self._kube \u003d kubernetes.KubeOperator()"},{"line_number":262,"context_line":"        self._armada \u003d kube_app.ArmadaHelper(self._kube)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ab34138d_845d2342","line":259,"updated":"2021-02-23 18:06:47.000000000","message":"Do you have any concerns here about passing apps_metadata to AppOperator, which keeps a reference to it (rather than copying it).\nie: it should be safe so long as neither side changes it.","commit_id":"481d4c7738dbf4dfb471a79e478aa2b9f22a496a"},{"author":{"_account_id":30852,"name":"Dan Voiculeasa","email":"Dan.Voiculeasa@windriver.com","username":"dvoicule"},"change_message_id":"6abb78b1c8a9ed8f28bb6e4565d8efbdb4f773d0","unresolved":true,"context_lines":[{"line_number":256,"context_line":"        # until host unlock and we need ceph-mon up in order to configure"},{"line_number":257,"context_line":"        # ceph for the initial unlock."},{"line_number":258,"context_line":"        self._helm \u003d helm.HelmOperator(self.dbapi)"},{"line_number":259,"context_line":"        self._app \u003d kube_app.AppOperator(self.dbapi, self._helm, self.apps_metadata)"},{"line_number":260,"context_line":"        self._docker \u003d kube_app.DockerHelper(self.dbapi)"},{"line_number":261,"context_line":"        self._kube \u003d kubernetes.KubeOperator()"},{"line_number":262,"context_line":"        self._armada \u003d kube_app.ArmadaHelper(self._kube)"}],"source_content_type":"text/x-python","patch_set":15,"id":"b6ba95bb_d49b08f9","line":259,"in_reply_to":"ab34138d_845d2342","updated":"2021-02-24 10:27:20.000000000","message":"A reference must be used.\nThere is a single writer to that object, the load_application_metadata function. At the moment the writer only adds keys. No destructor is called, the operation is atomic.\nThe consumer side need not be aware of latest change. There is no need to sync reads with writes.\n\nA batch app upload may cause concurrent executions of load_application_metadata.\nIn I881716049471183cfd1179ab0558a557c8d104d8 load_application_metadata logic is modified to use locks.","commit_id":"481d4c7738dbf4dfb471a79e478aa2b9f22a496a"}]}
