)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1f803dcd70a75e5ca264cdfca184280fef9429b2","unresolved":false,"context_lines":[{"line_number":16,"context_line":"volume path that is reachable from primary as well as secondary site at all"},{"line_number":17,"context_line":"times (as opposed to vol at primary and vol_r at secondary site)."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Needs an update in gpfs driver documentation, as this patch introduces a"},{"line_number":22,"context_line":"new configuration option (gpfs_replication_mode)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_e20bb528","line":19,"updated":"2015-02-18 21:44:18.000000000","message":"Need to remove this and rework without the new config option for now.  Maybe replace with a note here that future updates will enable modes other than synchronous.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"}],"cinder/tests/test_gpfs.py":[{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"c0fb05af045e1ffbd3728e119ee204e443393bb6","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        self.flags(volume_driver\u003dself.driver_name,"},{"line_number":767,"context_line":"                   gpfs_replication_mode\u003d\u0027asynchronous\u0027)"},{"line_number":768,"context_line":"        self.assertRaises(NotImplementedError,"},{"line_number":769,"context_line":"                          self.driver.check_for_setup_error)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    @patch(\u0027cinder.utils.execute\u0027)"},{"line_number":772,"context_line":"    def test_create_sparse_file(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6b071e1e","line":769,"updated":"2015-02-16 08:17:58.000000000","message":"Try using ddt (http://ddt.readthedocs.org/en/latest/example.html) in above tests, which can help reduce the repeated lines of code .","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"}],"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":23,"context_line":"   continue to operate independently in case of other site failure. Hence, for"},{"line_number":24,"context_line":"   a replicated volume there is only one volume path that is reachable from"},{"line_number":25,"context_line":"   primary as well as secondary site at all times (as opposed to vol at primary"},{"line_number":26,"context_line":"   and vol_r at secondary site)."},{"line_number":27,"context_line":"\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import math"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_fdaf4a29","line":26,"updated":"2015-02-09 21:33:07.000000000","message":"Can these notes be added in the gpfs volume driver documentation?  For example in a \"Volume Replication\" section?  The use of separate filesystems or filesets for replicated and non-replicated volumes should be described there also.","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"   continue to operate independently in case of other site failure. Hence, for"},{"line_number":24,"context_line":"   a replicated volume there is only one volume path that is reachable from"},{"line_number":25,"context_line":"   primary as well as secondary site at all times (as opposed to vol at primary"},{"line_number":26,"context_line":"   and vol_r at secondary site)."},{"line_number":27,"context_line":"\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import math"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9b0392b7","line":26,"in_reply_to":"da86d52c_fdaf4a29","updated":"2015-02-10 14:17:05.000000000","message":"Yes, we plan to write a section covering replication in gpfs driver document after the code merge.","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_base\u0027,"},{"line_number":99,"context_line":"               default\u003dNone,"},{"line_number":100,"context_line":"               help\u003d(\u0027Specifies the path of the GPFS directory used where \u0027"},{"line_number":101,"context_line":"                     \u0027replication enabled volume files are stored.\u0027)),"},{"line_number":102,"context_line":"]"},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"},{"line_number":104,"context_line":"CONF.register_opts(gpfs_opts)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_d05b4df4","line":101,"updated":"2015-02-09 21:33:07.000000000","message":"Do you need a separate gpfs_replication_base parameter?  Doesn\u0027t the volume type contain gpfs_mount_point_base, and if volume type is replicated, then gpfs_mount_point_base is by definition in a replicated fileset/file system?  \n\nIf so, there is a lot of code below that could be trimmed.","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_base\u0027,"},{"line_number":99,"context_line":"               default\u003dNone,"},{"line_number":100,"context_line":"               help\u003d(\u0027Specifies the path of the GPFS directory used where \u0027"},{"line_number":101,"context_line":"                     \u0027replication enabled volume files are stored.\u0027)),"},{"line_number":102,"context_line":"]"},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"},{"line_number":104,"context_line":"CONF.register_opts(gpfs_opts)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_5b683aba","line":101,"in_reply_to":"da86d52c_d05b4df4","updated":"2015-02-10 14:17:05.000000000","message":"Thanks Bill, changes incorporated","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                        LOG.error(msg)"},{"line_number":460,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":461,"context_line":"                    else:"},{"line_number":462,"context_line":"                        # Verify whether cluster satisfies quorum rules"},{"line_number":463,"context_line":"                        quorum_count \u003d self._get_quorum_rules()"},{"line_number":464,"context_line":"                        if quorum_count % 2:"},{"line_number":465,"context_line":"                            msg \u003d _(\u0027Current GPFS configuration does not \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_30fca93e","line":462,"updated":"2015-02-09 21:33:07.000000000","message":"can you add description of the quorum rules?","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                        LOG.error(msg)"},{"line_number":460,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":461,"context_line":"                    else:"},{"line_number":462,"context_line":"                        # Verify whether cluster satisfies quorum rules"},{"line_number":463,"context_line":"                        quorum_count \u003d self._get_quorum_rules()"},{"line_number":464,"context_line":"                        if quorum_count % 2:"},{"line_number":465,"context_line":"                            msg \u003d _(\u0027Current GPFS configuration does not \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_bb15b6e6","line":462,"in_reply_to":"da86d52c_30fca93e","updated":"2015-02-10 14:17:05.000000000","message":"Done","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            model_update \u003d {\u0027replication_status\u0027: \u0027copying\u0027}"},{"line_number":590,"context_line":"        else:"},{"line_number":591,"context_line":"            storage_path \u003d self.configuration.gpfs_mount_point_base"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        # Check if GPFS is mounted"},{"line_number":594,"context_line":"        volume_path \u003d self.local_path(storage_path, volume)"},{"line_number":595,"context_line":"        self._verify_gpfs_path_state(storage_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9dbf2e60","line":592,"updated":"2015-02-09 21:33:07.000000000","message":"The previous 6 lines are repeated below a couple of times.  Consider making this a separate helper function.","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            model_update \u003d {\u0027replication_status\u0027: \u0027copying\u0027}"},{"line_number":590,"context_line":"        else:"},{"line_number":591,"context_line":"            storage_path \u003d self.configuration.gpfs_mount_point_base"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        # Check if GPFS is mounted"},{"line_number":594,"context_line":"        volume_path \u003d self.local_path(storage_path, volume)"},{"line_number":595,"context_line":"        self._verify_gpfs_path_state(storage_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9bf1d2cf","line":592,"in_reply_to":"da86d52c_9dbf2e60","updated":"2015-02-10 14:17:05.000000000","message":"got addressed by comment-1","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"        migrated \u003d False"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        # Check if retype affects volume replication"},{"line_number":1144,"context_line":"        (old_opt, new_opt) \u003d self._get_diff_extra_specs(diff[\u0027extra_specs\u0027])"},{"line_number":1145,"context_line":"        if not (old_opt \u003d\u003d new_opt):"},{"line_number":1146,"context_line":"            local_path \u003d self.local_path(self.configuration."},{"line_number":1147,"context_line":"                                         gpfs_mount_point_base, volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_b0b6d988","line":1144,"updated":"2015-02-09 21:33:07.000000000","message":"related to previous comment, rather than maintain gpfs_mount_point_base \u0026 replication_base as well as replication flag for each volume type, can you  extract old_voltype gpfs_mount_point_base and new_voltype gpfs_mount_point_base and use that?","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"        migrated \u003d False"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        # Check if retype affects volume replication"},{"line_number":1144,"context_line":"        (old_opt, new_opt) \u003d self._get_diff_extra_specs(diff[\u0027extra_specs\u0027])"},{"line_number":1145,"context_line":"        if not (old_opt \u003d\u003d new_opt):"},{"line_number":1146,"context_line":"            local_path \u003d self.local_path(self.configuration."},{"line_number":1147,"context_line":"                                         gpfs_mount_point_base, volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_1bb5e2ed","line":1144,"in_reply_to":"da86d52c_b0b6d988","updated":"2015-02-10 14:17:05.000000000","message":"Done","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"2b9c15f8d5eb100a686172ea4f2ec7eb62566a47","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"    def _get_quorum_rules(self):"},{"line_number":1308,"context_line":"        \"\"\"Examine if quorum rules allow node failture.\"\"\""},{"line_number":1309,"context_line":"        try:"},{"line_number":1310,"context_line":"            (out, err) \u003d self._execute(\u0027mmlscluster\u0027, run_as_root\u003dTrue)"},{"line_number":1311,"context_line":"            quorum_managers \u003d out.count(\u0027quorum-manager\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_5044bdb6","line":1308,"updated":"2015-02-09 21:33:07.000000000","message":"typo on failure\n\nalso, should title of function be _get_quorum_node_count ?","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"dd3ff85e9f1b50e0e1e9c5e32d35bda55d55226c","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"    def _get_quorum_rules(self):"},{"line_number":1308,"context_line":"        \"\"\"Examine if quorum rules allow node failture.\"\"\""},{"line_number":1309,"context_line":"        try:"},{"line_number":1310,"context_line":"            (out, err) \u003d self._execute(\u0027mmlscluster\u0027, run_as_root\u003dTrue)"},{"line_number":1311,"context_line":"            quorum_managers \u003d out.count(\u0027quorum-manager\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_9bc8f275","line":1308,"in_reply_to":"da86d52c_5044bdb6","updated":"2015-02-10 14:17:05.000000000","message":"thanks Bill, made the changes","commit_id":"9c8583371a6339d940b3d61d056db68268757e92"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c9c0841244d0185801925e19f63d11581c0863ee","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                        quorum_count \u003d self._get_quorum_node_count()"},{"line_number":459,"context_line":"                        if quorum_count % 2:"},{"line_number":460,"context_line":"                            msg \u003d _(\u0027Current GPFS configuration does not \u0027"},{"line_number":461,"context_line":"                                    \u0027satisfy Quorum rules.\u0027)"},{"line_number":462,"context_line":"                            LOG.error(msg)"},{"line_number":463,"context_line":"                            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":464,"context_line":"                        # Verify replication base attributes"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_d4236fa5","line":461,"updated":"2015-02-13 19:43:25.000000000","message":"Should update this message to note that this is related to having replication enabled.  I.E. \"Replication configured but current GPFS ...\"","commit_id":"7fc420af42bea2e2dc7748a1748852a3a79056f1"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"c9f8ce6be803430ebb53296ab831001ba22595a1","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                        quorum_count \u003d self._get_quorum_node_count()"},{"line_number":459,"context_line":"                        if quorum_count % 2:"},{"line_number":460,"context_line":"                            msg \u003d _(\u0027Current GPFS configuration does not \u0027"},{"line_number":461,"context_line":"                                    \u0027satisfy Quorum rules.\u0027)"},{"line_number":462,"context_line":"                            LOG.error(msg)"},{"line_number":463,"context_line":"                            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":464,"context_line":"                        # Verify replication base attributes"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_2ee2aa01","line":461,"in_reply_to":"da86d52c_d4236fa5","updated":"2015-02-14 05:28:49.000000000","message":"Done","commit_id":"7fc420af42bea2e2dc7748a1748852a3a79056f1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c9c0841244d0185801925e19f63d11581c0863ee","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                    msg \u003d _(\u0027Option gpfs_replication_mode is not set correctly\u0027"},{"line_number":479,"context_line":"                            \u0027 valid values - synchronous, asynchronous\u0027)"},{"line_number":480,"context_line":"                    LOG.error(msg)"},{"line_number":481,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def _create_sparse_file(self, path, size):"},{"line_number":484,"context_line":"        \"\"\"Creates file with 0 disk usage.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_7480034a","line":481,"updated":"2015-02-13 19:43:25.000000000","message":"This should be InvalidConfigurationValue","commit_id":"7fc420af42bea2e2dc7748a1748852a3a79056f1"},{"author":{"_account_id":9204,"name":"Sasikanth Eda","email":"sasikanth.eda@in.ibm.com","username":"Sasikanth"},"change_message_id":"c9f8ce6be803430ebb53296ab831001ba22595a1","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                    msg \u003d _(\u0027Option gpfs_replication_mode is not set correctly\u0027"},{"line_number":479,"context_line":"                            \u0027 valid values - synchronous, asynchronous\u0027)"},{"line_number":480,"context_line":"                    LOG.error(msg)"},{"line_number":481,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def _create_sparse_file(self, path, size):"},{"line_number":484,"context_line":"        \"\"\"Creates file with 0 disk usage.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_8eb8f6e9","line":481,"in_reply_to":"da86d52c_7480034a","updated":"2015-02-14 05:28:49.000000000","message":"Thanks Jay done","commit_id":"7fc420af42bea2e2dc7748a1748852a3a79056f1"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"922fb40f8c0ef9d425e89c5375ec3158397b7d29","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               default\u003d\u0027system\u0027,"},{"line_number":89,"context_line":"               help\u003d(\u0027Specifies the storage pool that volumes are assigned \u0027"},{"line_number":90,"context_line":"                     \u0027to. By default, the system storage pool is used.\u0027)),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_mode\u0027,"},{"line_number":92,"context_line":"               default\u003dNone,"},{"line_number":93,"context_line":"               help\u003d(\u0027Specifies the replication mode to be used \u0027"},{"line_number":94,"context_line":"                     \u0027valid values are - \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8d462f20","line":91,"updated":"2015-02-15 20:44:04.000000000","message":"I don\u0027t see GPFS being the only driver having some \"replication mode\", It would be great if this was something more thought about than just each driver having their own and polluting the configuration namespace with a dup option, and they all do entirely different things.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1f803dcd70a75e5ca264cdfca184280fef9429b2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               default\u003d\u0027system\u0027,"},{"line_number":89,"context_line":"               help\u003d(\u0027Specifies the storage pool that volumes are assigned \u0027"},{"line_number":90,"context_line":"                     \u0027to. By default, the system storage pool is used.\u0027)),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_mode\u0027,"},{"line_number":92,"context_line":"               default\u003dNone,"},{"line_number":93,"context_line":"               help\u003d(\u0027Specifies the replication mode to be used \u0027"},{"line_number":94,"context_line":"                     \u0027valid values are - \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_a56aa7b2","line":91,"in_reply_to":"da86d52c_8d462f20","updated":"2015-02-18 21:44:18.000000000","message":"Agree here, until we have hammered out how replication V2 is going to work, and since we just have synchronous mode right now anyway, lets remove this config option.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                     \u0027to. By default, the system storage pool is used.\u0027)),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_mode\u0027,"},{"line_number":92,"context_line":"               default\u003dNone,"},{"line_number":93,"context_line":"               help\u003d(\u0027Specifies the replication mode to be used \u0027"},{"line_number":94,"context_line":"                     \u0027valid values are - \u0027"},{"line_number":95,"context_line":"                     \u0027synchronous  : for using GPFS synchronous mirroring, \u0027"},{"line_number":96,"context_line":"                     \u0027asynchronous : for using GPFS Active File Management \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_5624d0ae","line":93,"updated":"2015-02-15 05:11:46.000000000","message":"Add a period after \"used\".","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    cfg.StrOpt(\u0027gpfs_replication_mode\u0027,"},{"line_number":92,"context_line":"               default\u003dNone,"},{"line_number":93,"context_line":"               help\u003d(\u0027Specifies the replication mode to be used \u0027"},{"line_number":94,"context_line":"                     \u0027valid values are - \u0027"},{"line_number":95,"context_line":"                     \u0027synchronous  : for using GPFS synchronous mirroring, \u0027"},{"line_number":96,"context_line":"                     \u0027asynchronous : for using GPFS Active File Management \u0027"},{"line_number":97,"context_line":"                     \u0027disaster recovery.\u0027)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_7638f4d4","line":94,"updated":"2015-02-15 05:11:46.000000000","message":"Please make the first letter capital.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":93,"context_line":"               help\u003d(\u0027Specifies the replication mode to be used \u0027"},{"line_number":94,"context_line":"                     \u0027valid values are - \u0027"},{"line_number":95,"context_line":"                     \u0027synchronous  : for using GPFS synchronous mirroring, \u0027"},{"line_number":96,"context_line":"                     \u0027asynchronous : for using GPFS Active File Management \u0027"},{"line_number":97,"context_line":"                     \u0027disaster recovery.\u0027)),"},{"line_number":98,"context_line":"]"},{"line_number":99,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_565bf02d","line":96,"updated":"2015-02-15 05:11:46.000000000","message":"Since only \"synchronous\" is supported, \u0027asynchronous\u0027 is not a valid option. Suggest removing \u0027asynchronous\u0027 for now and add back when you add the support.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1f803dcd70a75e5ca264cdfca184280fef9429b2","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                LOG.error(msg)"},{"line_number":445,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"            # Check if replication is configured"},{"line_number":448,"context_line":"            if self.configuration.gpfs_replication_mode is not None:"},{"line_number":449,"context_line":"                replication_mode \u003d self.configuration.gpfs_replication_mode"},{"line_number":450,"context_line":"                if replication_mode \u003d\u003d \u0027synchronous\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_85876360","line":447,"updated":"2015-02-18 21:44:18.000000000","message":"Since we won\u0027t have the configuration option avaialble.  Lets make this a function and have it called from the create_* functions to verify that replication can be done.  Not the the ideal way to do it, but will work for now.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                                   {\u0027path\u0027: replica_path})"},{"line_number":472,"context_line":"                            LOG.error(msg)"},{"line_number":473,"context_line":"                            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":474,"context_line":"                elif replication_mode \u003d\u003d \u0027asynchronous\u0027:"},{"line_number":475,"context_line":"                    msg \u003d _(\u0027Asynchronous replication mode is currently not \u0027"},{"line_number":476,"context_line":"                            \u0027implemented.\u0027)"},{"line_number":477,"context_line":"                    raise NotImplementedError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_d65d2017","line":474,"updated":"2015-02-15 05:11:46.000000000","message":"See my earlier comments about this mode.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"            return (data_replicas, metadata_replicas)"},{"line_number":1221,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":1222,"context_line":"            msg \u003d (_(\u0027mmlsfs failed. Verify that GPFS is active and \u0027"},{"line_number":1223,"context_line":"                     \u0027file system path %s is mounted.\u0027), path)"},{"line_number":1224,"context_line":"            LOG.error(msg)"},{"line_number":1225,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1226,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_36a4bc07","line":1223,"updated":"2015-02-15 05:11:46.000000000","message":"String substitution won\u0027t happen in this format.\n\nChange \",\" to \"%\".","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"    def factory(driver):"},{"line_number":1234,"context_line":"        \"\"\"Use replication methods for the requested mode.\"\"\""},{"line_number":1235,"context_line":"        mode \u003d driver.configuration.gpfs_replication_mode"},{"line_number":1236,"context_line":"        if mode \u003d\u003d \u0027synchronous\u0027:"},{"line_number":1237,"context_line":"            return GPFSSynchronousReplication(driver)"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"    def create_replica(self, ctxt, volume):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_56a930de","line":1236,"updated":"2015-02-15 05:11:46.000000000","message":"Please use a constant for this.","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"734dedd5c7a09cdbbba07f9fd4e598ac5dd23946","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"        volume_path \u003d self.driver.local_path(volume)"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":"        if not (self._verify_data_metadata_replica(volume_path)):"},{"line_number":1329,"context_line":"            msg \u003d (_(\u0027Unable to promote replica for volume %s.\u0027), volume[\u0027id\u0027])"},{"line_number":1330,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"    def get_replication_status(self, ctxt, volume):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_f680644b","line":1329,"updated":"2015-02-15 05:11:46.000000000","message":"Should be \"%\" instead of \",\".","commit_id":"5104b7d29a269caa9d68d54d8388504c4330de41"}]}
