)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28602,"name":"chen haochuan","email":"haochuan.z.chen@intel.com","username":"haochuan"},"change_message_id":"695c090452a9494808793b23e8773943aba7182e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Tests run:"},{"line_number":18,"context_line":"- all tests were run on AIO-SX, AIO-DX, Standard"},{"line_number":19,"context_line":"  and Storage configs"},{"line_number":20,"context_line":"- deploy system withtout ceph"},{"line_number":21,"context_line":"- configure ceph after running ansible bootstrap,"},{"line_number":22,"context_line":"  but before unlocking controller-0"},{"line_number":23,"context_line":"- configure ceph at runtime on an already deployed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_25a20599","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":29},"updated":"2020-02-03 05:37:09.000000000","message":"how to deploy system without ceph, any provision step change.","commit_id":"c68a8789b9c5f14ef2fe3595dd5bb3004c4123ce"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Stefan Dinescu \u003cstefan.dinescu@windriver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-02-07 14:53:50 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make Ceph an optional service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Changes included in this commit:"},{"line_number":10,"context_line":"- change consistency checks to allow a system to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_82300f08","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":29},"updated":"2020-02-11 04:59:18.000000000","message":"nit: Probably more accurate as:\"Make Ceph storage backend optional\"","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  be deployed without ceph configured"},{"line_number":12,"context_line":"- allow ceph to be provisioned before unlocking"},{"line_number":13,"context_line":"  controller-0"},{"line_number":14,"context_line":"- add support for runtime provisionsing of ceph"},{"line_number":15,"context_line":"  on an already fully deployed system"},{"line_number":16,"context_line":"- move default cluster and storage tier config"},{"line_number":17,"context_line":"  from conductor initialization to storage-backend"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_4241b761","line":14,"range":{"start_line":14,"start_character":26,"end_line":14,"end_character":39},"updated":"2020-02-11 04:59:18.000000000","message":"sp: provisioning","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"- move CephOperator initialization from conductor"},{"line_number":20,"context_line":"  initialization to a greenthread that waits for"},{"line_number":21,"context_line":"  the ceph cluster to become responsive"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Tests run:"},{"line_number":24,"context_line":"- all tests were run on AIO-SX, AIO-DX, Standard"},{"line_number":25,"context_line":"  and Storage configs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_c22127b4","line":22,"updated":"2020-02-11 04:59:18.000000000","message":"Also state that this prevents adding a Ceph backend in a duplex controller setup when only one controller is unlocked and provisioned.","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28431,"name":"Don Penney","email":"dpenney@redhat.com","username":"dpenney"},"change_message_id":"57df54a12f9609f907ee4b4052b76b13f71db066","unresolved":false,"context_lines":[{"line_number":35,"context_line":"- swacting"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Change-Id: I05fbd494d9a22a535eae200a26c21b1702500194"},{"line_number":38,"context_line":"Depends-On: I95eb1bfa6c1feccb3d7b958900f20787a3f71cd4"},{"line_number":39,"context_line":"Story: 2007064"},{"line_number":40,"context_line":"Task: 37931"},{"line_number":41,"context_line":"Signed-off-by: Stefan Dinescu \u003cstefan.dinescu@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_243efcb5","line":38,"updated":"2020-02-11 17:33:58.000000000","message":"nit: Using a change-id for Depends-On is a deprecated format, presumably because of the potential for matching multiple reviews (eg. cherry-pick). The supported usage is to specify the Gerrit review URL instead:\nhttps://zuul-ci.org/docs/zuul/discussion/gating.html#cross-project-dependencies\n\nie.\nDepends-On: https://review.opendev.org/705234","commit_id":"0905190ebf535b382cf15f75a731033c0b05c990"}],"sysinv/sysinv/sysinv/sysinv/api/controllers/v1/storage_ceph.py":[{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                              h[\u0027administrative\u0027] \u003d\u003d constants.ADMIN_UNLOCKED and"},{"line_number":871,"context_line":"                              h[\u0027availability\u0027] in [constants.AVAILABILITY_AVAILABLE,"},{"line_number":872,"context_line":"                                                     constants.AVAILABILITY_DEGRADED]]"},{"line_number":873,"context_line":"    if valid_controller_hosts:"},{"line_number":874,"context_line":"        _apply_backend_changes(constants.SB_API_OP_CREATE, storage_backend_obj)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    return storage_ceph_obj"},{"line_number":877,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_e221c3fe","line":874,"range":{"start_line":873,"start_character":0,"end_line":874,"end_character":79},"updated":"2020-02-11 04:59:18.000000000","message":"Previously, the manifests were always applied at this point. \n\nShould we be providing an error message here with a next step, If we don\u0027t apply the manifest now. \n\nDo we have to run the modify operation to trigger an apply later OR should we delete the backend and tell then user to try again?","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28707,"name":"Stefan Dinescu","email":"stefan.dinescu@windriver.com","username":"stefan.dinescu"},"change_message_id":"3ad896e4d55aed22e4cfb88f728b35ae50239df0","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                              h[\u0027administrative\u0027] \u003d\u003d constants.ADMIN_UNLOCKED and"},{"line_number":871,"context_line":"                              h[\u0027availability\u0027] in [constants.AVAILABILITY_AVAILABLE,"},{"line_number":872,"context_line":"                                                     constants.AVAILABILITY_DEGRADED]]"},{"line_number":873,"context_line":"    if valid_controller_hosts:"},{"line_number":874,"context_line":"        _apply_backend_changes(constants.SB_API_OP_CREATE, storage_backend_obj)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    return storage_ceph_obj"},{"line_number":877,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_b3631bac","line":874,"range":{"start_line":873,"start_character":0,"end_line":874,"end_character":79},"in_reply_to":"3fa7e38b_e221c3fe","updated":"2020-02-11 08:43:29.000000000","message":"Previously no manifest were never applied when creating the backend, because the backend was created at bootstrap.\n\nYou can see at line 737 that I had to change the check to also apply manifests at creation. The valid_controller check was introduces so that we don\u0027t trigger an apply when adding the backend before controller-0 was unlocked.","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28602,"name":"chen haochuan","email":"haochuan.z.chen@intel.com","username":"haochuan"},"change_message_id":"0772d63275497211f94cf8c9bce99735641f3428","unresolved":false,"context_lines":[{"line_number":734,"context_line":"    services \u003d api_helper.getListFromServices(sb_obj.as_dict())"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    if (op \u003d\u003d constants.SB_API_OP_MODIFY or"},{"line_number":737,"context_line":"            op \u003d\u003d constants.SB_API_OP_CREATE):"},{"line_number":738,"context_line":"        if sb_obj.name \u003d\u003d constants.SB_DEFAULT_NAMES["},{"line_number":739,"context_line":"                constants.SB_TYPE_CEPH]:"},{"line_number":740,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_601e1910","line":737,"range":{"start_line":737,"start_character":18,"end_line":737,"end_character":44},"updated":"2020-02-12 02:42:04.000000000","message":"why before this change, for create operation, it is unnecessary to update ceph config?","commit_id":"0905190ebf535b382cf15f75a731033c0b05c990"},{"author":{"_account_id":28707,"name":"Stefan Dinescu","email":"stefan.dinescu@windriver.com","username":"stefan.dinescu"},"change_message_id":"5cf704e9d28c29cdd93100875f422272bbe75b97","unresolved":false,"context_lines":[{"line_number":734,"context_line":"    services \u003d api_helper.getListFromServices(sb_obj.as_dict())"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    if (op \u003d\u003d constants.SB_API_OP_MODIFY or"},{"line_number":737,"context_line":"            op \u003d\u003d constants.SB_API_OP_CREATE):"},{"line_number":738,"context_line":"        if sb_obj.name \u003d\u003d constants.SB_DEFAULT_NAMES["},{"line_number":739,"context_line":"                constants.SB_TYPE_CEPH]:"},{"line_number":740,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_25758c00","line":737,"range":{"start_line":737,"start_character":18,"end_line":737,"end_character":44},"in_reply_to":"3fa7e38b_601e1910","updated":"2020-02-12 12:15:21.000000000","message":"before this change, the storage backend was initialized by the ansible bootstrap, but that was a DB-only change. The actual changes to the system config were made by puppet at unlock time. \n\nNow, since we want to support in-service ceph storage backend provisioning, we must also apply manifests at runtime.","commit_id":"0905190ebf535b382cf15f75a731033c0b05c990"}],"sysinv/sysinv/sysinv/sysinv/api/controllers/v1/utils.py":[{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"17bff6d41dc7e1b348c3bbf16b2345efbb57789f","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                           constants.SB_DEFAULT_NAMES[backend_type]))"},{"line_number":626,"context_line":"                raise wsme.exc.ClientSideError(msg)"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"        # Deny operations with a single, unlocked, controller."},{"line_number":629,"context_line":"        # TODO(oponcea): Remove this once sm supports in-service config reload"},{"line_number":630,"context_line":"        ctrls \u003d pecan.request.dbapi.ihost_get_by_personality(constants.CONTROLLER)"},{"line_number":631,"context_line":"        if len(ctrls) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_d69ce970","line":628,"range":{"start_line":628,"start_character":10,"end_line":628,"end_character":62},"updated":"2020-02-20 17:30:41.000000000","message":"nit: This comment is no longer applicable","commit_id":"cab522030f79c0060b80050c6a560696d7db80d9"}],"sysinv/sysinv/sysinv/sysinv/conductor/manager.py":[{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        # ceph for the initial unlock."},{"line_number":235,"context_line":"        self._app \u003d kube_app.AppOperator(self.dbapi)"},{"line_number":236,"context_line":"        self._docker \u003d kube_app.DockerHelper(self.dbapi)"},{"line_number":237,"context_line":"        self._ceph \u003d iceph.CephOperator(self.dbapi)"},{"line_number":238,"context_line":"        self._helm \u003d helm.HelmOperator(self.dbapi)"},{"line_number":239,"context_line":"        self._kube \u003d kubernetes.KubeOperator()"},{"line_number":240,"context_line":"        self._kube_app_helper \u003d kube_api.KubeAppHelper(self.dbapi)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_95128755","side":"PARENT","line":237,"range":{"start_line":237,"start_character":8,"end_line":237,"end_character":18},"updated":"2020-02-11 04:59:18.000000000","message":"This is referenced in a few places in the file. Now that it\u0027s conditionally created after some undetermined delay, we really need to check to make sure that we handle the cases where this is still None, however unlikely. Prior to this change the CephOperator was guaranteed to exist.","commit_id":"2a6ecd8a4a52da1bd9f711634d1a5e42d27f95d6"},{"author":{"_account_id":28707,"name":"Stefan Dinescu","email":"stefan.dinescu@windriver.com","username":"stefan.dinescu"},"change_message_id":"3ad896e4d55aed22e4cfb88f728b35ae50239df0","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        # ceph for the initial unlock."},{"line_number":235,"context_line":"        self._app \u003d kube_app.AppOperator(self.dbapi)"},{"line_number":236,"context_line":"        self._docker \u003d kube_app.DockerHelper(self.dbapi)"},{"line_number":237,"context_line":"        self._ceph \u003d iceph.CephOperator(self.dbapi)"},{"line_number":238,"context_line":"        self._helm \u003d helm.HelmOperator(self.dbapi)"},{"line_number":239,"context_line":"        self._kube \u003d kubernetes.KubeOperator()"},{"line_number":240,"context_line":"        self._kube_app_helper \u003d kube_api.KubeAppHelper(self.dbapi)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_73b603ff","side":"PARENT","line":237,"range":{"start_line":237,"start_character":8,"end_line":237,"end_character":18},"in_reply_to":"3fa7e38b_95128755","updated":"2020-02-11 08:43:29.000000000","message":"Ceph operator design was faulty from the beginning. While it did exist, it was never safe to use it in cases where the ceph cluster was not yet responsive. In such cases, the call to any function from CephOperator would result in an exception.\n\nI will add some extra checks for \"None\" just to be sure.","commit_id":"2a6ecd8a4a52da1bd9f711634d1a5e42d27f95d6"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"            LOG.info(\"Deleting ceph monitor for host %s\""},{"line_number":1398,"context_line":"                     % str(host.hostname))"},{"line_number":1399,"context_line":"            self.dbapi.ceph_mon_destroy(mon[0].uuid)"},{"line_number":1400,"context_line":"            self._ceph.remove_ceph_monitor(host.hostname)"},{"line_number":1401,"context_line":"        else:"},{"line_number":1402,"context_line":"            LOG.info(\"No ceph monitor present for host %s. \""},{"line_number":1403,"context_line":"                     \"Skipping deleting ceph monitor.\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d53a3fc3","line":1400,"range":{"start_line":1400,"start_character":12,"end_line":1400,"end_character":22},"updated":"2020-02-11 04:59:18.000000000","message":"What if this is None?","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28707,"name":"Stefan Dinescu","email":"stefan.dinescu@windriver.com","username":"stefan.dinescu"},"change_message_id":"3ad896e4d55aed22e4cfb88f728b35ae50239df0","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"            LOG.info(\"Deleting ceph monitor for host %s\""},{"line_number":1398,"context_line":"                     % str(host.hostname))"},{"line_number":1399,"context_line":"            self.dbapi.ceph_mon_destroy(mon[0].uuid)"},{"line_number":1400,"context_line":"            self._ceph.remove_ceph_monitor(host.hostname)"},{"line_number":1401,"context_line":"        else:"},{"line_number":1402,"context_line":"            LOG.info(\"No ceph monitor present for host %s. \""},{"line_number":1403,"context_line":"                     \"Skipping deleting ceph monitor.\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_93a05fa6","line":1400,"range":{"start_line":1400,"start_character":12,"end_line":1400,"end_character":22},"in_reply_to":"3fa7e38b_d53a3fc3","updated":"2020-02-11 08:43:29.000000000","message":"this function is only called when you delete a compute host with a monitor on it. in 100% of cases, ceph should be operational at this point and self._ceph should be set.\n\nI will add a check just to be sure.","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":1551,"context_line":"        \"\"\""},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        # Update cluster and peers model"},{"line_number":1554,"context_line":"        self._ceph.update_ceph_cluster(host)"},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"        # Only update the manifest if the host is running the same version as"},{"line_number":1557,"context_line":"        # the active controller."}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_f5373bda","line":1554,"range":{"start_line":1554,"start_character":8,"end_line":1554,"end_character":18},"updated":"2020-02-11 04:59:18.000000000","message":"What if this is None?","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28707,"name":"Stefan Dinescu","email":"stefan.dinescu@windriver.com","username":"stefan.dinescu"},"change_message_id":"3ad896e4d55aed22e4cfb88f728b35ae50239df0","unresolved":false,"context_lines":[{"line_number":1551,"context_line":"        \"\"\""},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        # Update cluster and peers model"},{"line_number":1554,"context_line":"        self._ceph.update_ceph_cluster(host)"},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"        # Only update the manifest if the host is running the same version as"},{"line_number":1557,"context_line":"        # the active controller."}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_7384c30e","line":1554,"range":{"start_line":1554,"start_character":8,"end_line":1554,"end_character":18},"in_reply_to":"3fa7e38b_f5373bda","updated":"2020-02-11 08:43:29.000000000","message":"When configuring a storage-host, ceph should be up in 100% of cases so this should be set.\n\nStill, I will add a consistency check, just to be sure.","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"},{"author":{"_account_id":28459,"name":"Bob Church","email":"robert.church@windriver.com","username":"rchurch"},"change_message_id":"e5c1bd5ec95b1e5aa4bff8430cc199194bb1667c","unresolved":false,"context_lines":[{"line_number":5435,"context_line":"                constants.CINDER_BACKEND_CEPH):"},{"line_number":5436,"context_line":"            return 0"},{"line_number":5437,"context_line":""},{"line_number":5438,"context_line":"        if not self._ceph.get_ceph_cluster_info_availability():"},{"line_number":5439,"context_line":"            return 0"},{"line_number":5440,"context_line":""},{"line_number":5441,"context_line":"        return int(self._ceph.get_ceph_primary_tier_size())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_9559272b","line":5438,"range":{"start_line":5438,"start_character":15,"end_line":5438,"end_character":25},"updated":"2020-02-11 04:59:18.000000000","message":"What if this is None? (plus some more below)","commit_id":"3b7950588f4806bb867ce70c39446890f5765a3e"}]}
