)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"0863eff7f3f8659db6dcfd06c4b123addaa39c1e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add GPFS support as image store"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I96023fc9b23beb8fb1dbd7c27a2f06c164bc037c"},{"line_number":10,"context_line":"Implements: blueprint gpfs_image_store"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F%2F4gc%3D","line":10,"updated":"2014-03-13 06:31:11.000000000","message":"(nit): I think it should be gpfs-image-store","commit_id":"7819fdcbbf9f3454bd99c9e76cf23a339a430f75"}],"glance/store/gpfs.py":[{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"79b5db4610dfe4f3d3948e49d5141b4511bf7cbf","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"The GPFS is glance image store\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import errno"},{"line_number":19,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FlzQ%3D","line":16,"updated":"2014-03-15 19:01:52.000000000","message":"should this be \"The GPFS glance image store\"  ?  (remove \"is\")","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"949f0c15c3026d61d886624a42a80819800a3bc5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"The GPFS is glance image store\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import errno"},{"line_number":19,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FjwQ%3D","line":16,"in_reply_to":"AAAAWH%2F%2FlzQ%3D","updated":"2014-03-17 02:39:58.000000000","message":"Done","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"79b5db4610dfe4f3d3948e49d5141b4511bf7cbf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"gpfs_store_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_store_datadir\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\u0027Directory to which the GPFS backend \u0027"},{"line_number":40,"context_line":"                      \u0027store writes images.\u0027)),"},{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FlzM%3D","line":38,"updated":"2014-03-15 19:01:52.000000000","message":"why a gpfs specific flag?  can we just use filesystem_store_datadir?","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"949f0c15c3026d61d886624a42a80819800a3bc5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"gpfs_store_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_store_datadir\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\u0027Directory to which the GPFS backend \u0027"},{"line_number":40,"context_line":"                      \u0027store writes images.\u0027)),"},{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Fjv4%3D","line":38,"in_reply_to":"AAAAWH%2F%2FlzM%3D","updated":"2014-03-17 02:39:58.000000000","message":"GPFS will be a independent store and should not share configure options with other stores. Because user can use filesystem store and gpfs store. If the same configure options are used, GPFS store maybe raise exceptions.","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"79b5db4610dfe4f3d3948e49d5141b4511bf7cbf","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_store_datadir\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\u0027Directory to which the GPFS backend \u0027"},{"line_number":40,"context_line":"                      \u0027store writes images.\u0027)),"},{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"},{"line_number":42,"context_line":"                    help\u003d_(\u0027List of directories and its priorities to which \u0027"},{"line_number":43,"context_line":"                    \u0027the GPFS backend store writes images.\u0027)),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027gpfs_store_metadata_file\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FlzE%3D","line":41,"updated":"2014-03-15 19:01:52.000000000","message":"same comment as line 38","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"949f0c15c3026d61d886624a42a80819800a3bc5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_store_datadir\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\u0027Directory to which the GPFS backend \u0027"},{"line_number":40,"context_line":"                      \u0027store writes images.\u0027)),"},{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"},{"line_number":42,"context_line":"                    help\u003d_(\u0027List of directories and its priorities to which \u0027"},{"line_number":43,"context_line":"                    \u0027the GPFS backend store writes images.\u0027)),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027gpfs_store_metadata_file\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Fjvo%3D","line":41,"in_reply_to":"AAAAWH%2F%2FlzE%3D","updated":"2014-03-17 02:39:58.000000000","message":"same as line 38","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"79b5db4610dfe4f3d3948e49d5141b4511bf7cbf","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"},{"line_number":42,"context_line":"                    help\u003d_(\u0027List of directories and its priorities to which \u0027"},{"line_number":43,"context_line":"                    \u0027the GPFS backend store writes images.\u0027)),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027gpfs_store_metadata_file\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027The path to a file which contains the metadata to be \u0027"},{"line_number":46,"context_line":"                      \u0027returned with any location associated with this store.\u0027"},{"line_number":47,"context_line":"                      \u0027The file must contain a valid JSON dict.\u0027)),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Fly0%3D","line":44,"updated":"2014-03-15 19:01:52.000000000","message":"same comment as line 38","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"949f0c15c3026d61d886624a42a80819800a3bc5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.MultiStrOpt(\u0027gpfs_store_datadirs\u0027,"},{"line_number":42,"context_line":"                    help\u003d_(\u0027List of directories and its priorities to which \u0027"},{"line_number":43,"context_line":"                    \u0027the GPFS backend store writes images.\u0027)),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027gpfs_store_metadata_file\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027The path to a file which contains the metadata to be \u0027"},{"line_number":46,"context_line":"                      \u0027returned with any location associated with this store.\u0027"},{"line_number":47,"context_line":"                      \u0027The file must contain a valid JSON dict.\u0027)),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Fjvk%3D","line":44,"in_reply_to":"AAAAWH%2F%2Fly0%3D","updated":"2014-03-17 02:39:58.000000000","message":"same as line 38","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from glance.openstack.common import processutils"},{"line_number":30,"context_line":"import glance.store"},{"line_number":31,"context_line":"import glance.store.base"},{"line_number":32,"context_line":"from glance.store.filesystem import ChunkedFile"},{"line_number":33,"context_line":"import glance.store.location"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_19b9722e","line":32,"updated":"2014-07-10 11:02:02.000000000","message":"import modules only, not objects. [2]\n\n[2] http://docs.openstack.org/developer/hacking/","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from glance.openstack.common import processutils"},{"line_number":30,"context_line":"import glance.store"},{"line_number":31,"context_line":"import glance.store.base"},{"line_number":32,"context_line":"from glance.store.filesystem import ChunkedFile"},{"line_number":33,"context_line":"import glance.store.location"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_63938d5c","line":32,"in_reply_to":"baada198_19b9722e","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return \"gpfs://%s\" % self.path"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def parse_uri(self, uri):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        Parse URLs"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        pieces \u003d urlparse.urlparse(uri)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_398b9669","line":65,"updated":"2014-07-10 11:02:02.000000000","message":"No empty line at the start of the docstring[2]: \"\"\"Parse URIs\"\"\"","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return \"gpfs://%s\" % self.path"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def parse_uri(self, uri):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        Parse URLs"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        pieces \u003d urlparse.urlparse(uri)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c328d999","line":65,"in_reply_to":"baada198_398b9669","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.scheme \u003d pieces.scheme"},{"line_number":71,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":72,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":73,"context_line":"            reason \u003d _(\"No path specified in URI: %s\") % uri"},{"line_number":74,"context_line":"            LOG.debug(reason)"},{"line_number":75,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":76,"context_line":"        self.path \u003d path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_078bce68","line":73,"updated":"2014-07-10 11:02:02.000000000","message":"a) No translations to debug messages [1]\nb) please do not include the uri to log message\n\n[1] https://wiki.openstack.org/wiki/LoggingStandards","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.scheme \u003d pieces.scheme"},{"line_number":71,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":72,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":73,"context_line":"            reason \u003d _(\"No path specified in URI: %s\") % uri"},{"line_number":74,"context_line":"            LOG.debug(reason)"},{"line_number":75,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":76,"context_line":"        self.path \u003d path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e316bd57","line":73,"in_reply_to":"baada198_078bce68","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":73,"context_line":"            reason \u003d _(\"No path specified in URI: %s\") % uri"},{"line_number":74,"context_line":"            LOG.debug(reason)"},{"line_number":75,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":76,"context_line":"        self.path \u003d path"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_6741ea0a","line":75,"updated":"2014-07-10 11:02:02.000000000","message":"Could you please raise the BadStoreUri in a same manner it\u0027s raised on the rest of the store modules:\nreason \u003d _(\"No path specified\")\nraise exception.BadStoreUri(message\u003dreason)","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":73,"context_line":"            reason \u003d _(\"No path specified in URI: %s\") % uri"},{"line_number":74,"context_line":"            LOG.debug(reason)"},{"line_number":75,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":76,"context_line":"        self.path \u003d path"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2311955d","line":75,"in_reply_to":"baada198_6741ea0a","updated":"2014-07-28 02:08:42.000000000","message":"I removed it.","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        return (\u0027gpfs\u0027, )"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _check_write_permission(self, datadir):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Checks if directory created to write image files has"},{"line_number":87,"context_line":"        write permission."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a77b0228","line":85,"updated":"2014-07-10 11:02:02.000000000","message":"No empty line at the start of the docstring[2]:\n\"\"\"Create directories ....\n\n[2] http://docs.openstack.org/developer/hacking/","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        return (\u0027gpfs\u0027, )"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _check_write_permission(self, datadir):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Checks if directory created to write image files has"},{"line_number":87,"context_line":"        write permission."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_630aad28","line":85,"in_reply_to":"baada198_a77b0228","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        :raise BadStoreConfiguration exception if datadir is read-only."},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        if not os.access(datadir, os.W_OK):"},{"line_number":93,"context_line":"            msg \u003d (_(\"Permission to write in %s denied\") % datadir)"},{"line_number":94,"context_line":"            LOG.exception(msg)"},{"line_number":95,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":96,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_07674eb8","line":93,"updated":"2014-07-10 11:02:02.000000000","message":"could you use reason here instead of msg ... would be in line with the rest.","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        :raise BadStoreConfiguration exception if datadir is read-only."},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        if not os.access(datadir, os.W_OK):"},{"line_number":93,"context_line":"            msg \u003d (_(\"Permission to write in %s denied\") % datadir)"},{"line_number":94,"context_line":"            LOG.exception(msg)"},{"line_number":95,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":96,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_83050117","line":93,"in_reply_to":"baada198_07674eb8","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _create_image_directories(self, directory_paths):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Create directories to write image files if"},{"line_number":101,"context_line":"        it does not exist."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_079aee6d","line":99,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _create_image_directories(self, directory_paths):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Create directories to write image files if"},{"line_number":101,"context_line":"        it does not exist."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a304c518","line":99,"in_reply_to":"baada198_079aee6d","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if os.path.exists(datadir):"},{"line_number":108,"context_line":"                self._check_write_permission(datadir)"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                msg \u003d _(\"Directory to write image files does not exist \""},{"line_number":111,"context_line":"                        \"(%s). Creating.\") % datadir"},{"line_number":112,"context_line":"                LOG.info(msg)"},{"line_number":113,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_67580afb","line":110,"updated":"2014-07-10 11:02:02.000000000","message":"_LI( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if os.path.exists(datadir):"},{"line_number":108,"context_line":"                self._check_write_permission(datadir)"},{"line_number":109,"context_line":"            else:"},{"line_number":110,"context_line":"                msg \u003d _(\"Directory to write image files does not exist \""},{"line_number":111,"context_line":"                        \"(%s). Creating.\") % datadir"},{"line_number":112,"context_line":"                LOG.info(msg)"},{"line_number":113,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c3fff900","line":110,"in_reply_to":"baada198_67580afb","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":137,"context_line":"        gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":138,"context_line":"        if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":139,"context_line":"            LOG.error(_(\u0027GPFS is not active.  Detailed output: %s\u0027) % out)"},{"line_number":140,"context_line":"            msg \u003d (_(\"GPFS is not running - state: %s\") % gpfs_state)"},{"line_number":141,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":142,"context_line":"                                                  reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87127e07","line":139,"updated":"2014-07-10 11:02:02.000000000","message":"_LE( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":137,"context_line":"        gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":138,"context_line":"        if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":139,"context_line":"            LOG.error(_(\u0027GPFS is not active.  Detailed output: %s\u0027) % out)"},{"line_number":140,"context_line":"            msg \u003d (_(\"GPFS is not running - state: %s\") % gpfs_state)"},{"line_number":141,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":142,"context_line":"                                                  reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_0601ff03","line":139,"in_reply_to":"baada198_87127e07","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _check_directory_paths(self, datadir_path, directory_paths):"},{"line_number":148,"context_line":"        if datadir_path in directory_paths:"},{"line_number":149,"context_line":"            msg \u003d (_(\"Directory %(datadir_path)s specified \""},{"line_number":150,"context_line":"                     \"multiple times in gpfs_store_datadirs \""},{"line_number":151,"context_line":"                     \"option of gpfs configuration\") %"},{"line_number":152,"context_line":"                   {\u0027datadir_path\u0027: datadir_path})"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_27ba92e1","line":149,"updated":"2014-07-10 11:02:02.000000000","message":"ditto, reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _check_directory_paths(self, datadir_path, directory_paths):"},{"line_number":148,"context_line":"        if datadir_path in directory_paths:"},{"line_number":149,"context_line":"            msg \u003d (_(\"Directory %(datadir_path)s specified \""},{"line_number":150,"context_line":"                     \"multiple times in gpfs_store_datadirs \""},{"line_number":151,"context_line":"                     \"option of gpfs configuration\") %"},{"line_number":152,"context_line":"                   {\u0027datadir_path\u0027: datadir_path})"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e6fdeb09","line":149,"in_reply_to":"baada198_27ba92e1","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            self._is_gpfs_path(datadir_path)"},{"line_number":158,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":159,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":160,"context_line":"                   % CONF.gpfs_store_datadir)"},{"line_number":161,"context_line":"            LOG.error(msg)"},{"line_number":162,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_07c3ce57","line":159,"updated":"2014-07-10 11:02:02.000000000","message":"ditto reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            self._is_gpfs_path(datadir_path)"},{"line_number":158,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":159,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":160,"context_line":"                   % CONF.gpfs_store_datadir)"},{"line_number":161,"context_line":"            LOG.error(msg)"},{"line_number":162,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2608c327","line":159,"in_reply_to":"baada198_07c3ce57","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                                  reason\u003dmsg)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _get_datadir_path_and_priority(self, datadir):"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        Gets directory paths and its priority from"},{"line_number":168,"context_line":"        gpfs_store_datadirs option in glance-api.conf."},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c776363f","line":166,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                                  reason\u003dmsg)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _get_datadir_path_and_priority(self, datadir):"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        Gets directory paths and its priority from"},{"line_number":168,"context_line":"        gpfs_store_datadirs option in glance-api.conf."},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_6611db52","line":166,"in_reply_to":"baada198_c776363f","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        if len(parts) \u003d\u003d 2 and parts[1]:"},{"line_number":180,"context_line":"            priority \u003d parts[1]"},{"line_number":181,"context_line":"            if not priority.isdigit():"},{"line_number":182,"context_line":"                msg \u003d (_(\"Invalid priority value %(priority)s in \""},{"line_number":183,"context_line":"                         \"gpfs configuration\") % {\u0027priority\u0027: priority})"},{"line_number":184,"context_line":"                LOG.exception(msg)"},{"line_number":185,"context_line":"                raise exception.BadStoreConfiguration("}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e775fa32","line":182,"updated":"2014-07-10 11:02:02.000000000","message":"ditto reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        if len(parts) \u003d\u003d 2 and parts[1]:"},{"line_number":180,"context_line":"            priority \u003d parts[1]"},{"line_number":181,"context_line":"            if not priority.isdigit():"},{"line_number":182,"context_line":"                msg \u003d (_(\"Invalid priority value %(priority)s in \""},{"line_number":183,"context_line":"                         \"gpfs configuration\") % {\u0027priority\u0027: priority})"},{"line_number":184,"context_line":"                LOG.exception(msg)"},{"line_number":185,"context_line":"                raise exception.BadStoreConfiguration("}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_860c2f3b","line":182,"in_reply_to":"baada198_e775fa32","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return datadir_path, priority"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def configure_add(self):"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        Configure the Store to use the stored configuration options"},{"line_number":199,"context_line":"        Any store that needs special configuration should implement"},{"line_number":200,"context_line":"        this method. If the store was not able to successfully configure"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_879c3e5f","line":197,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return datadir_path, priority"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def configure_add(self):"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        Configure the Store to use the stored configuration options"},{"line_number":199,"context_line":"        Any store that needs special configuration should implement"},{"line_number":200,"context_line":"        this method. If the store was not able to successfully configure"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c66f075f","line":197,"in_reply_to":"baada198_879c3e5f","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":205,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":206,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":207,"context_line":"                    \"should be set.\")"},{"line_number":208,"context_line":"            LOG.error(msg)"},{"line_number":209,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_07a82e76","line":206,"updated":"2014-07-10 11:02:02.000000000","message":"ditto reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":205,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":206,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":207,"context_line":"                    \"should be set.\")"},{"line_number":208,"context_line":"            LOG.error(msg)"},{"line_number":209,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e68deb2b","line":206,"in_reply_to":"baada198_07a82e76","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                                                  reason\u003dmsg)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if CONF.gpfs_store_datadir and CONF.gpfs_store_datadirs:"},{"line_number":213,"context_line":"            msg \u003d _(\u0027Specify either gpfs_store_datadir or \u0027"},{"line_number":214,"context_line":"                    \u0027gpfs_store_datadirs\u0027)"},{"line_number":215,"context_line":"            LOG.error(msg)"},{"line_number":216,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_27b612dd","line":213,"updated":"2014-07-10 11:02:02.000000000","message":"ditto reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                                                  reason\u003dmsg)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if CONF.gpfs_store_datadir and CONF.gpfs_store_datadirs:"},{"line_number":213,"context_line":"            msg \u003d _(\u0027Specify either gpfs_store_datadir or \u0027"},{"line_number":214,"context_line":"                    \u0027gpfs_store_datadirs\u0027)"},{"line_number":215,"context_line":"            LOG.error(msg)"},{"line_number":216,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_469bf765","line":213,"in_reply_to":"baada198_27b612dd","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            try:"},{"line_number":225,"context_line":"                self._is_gpfs_path(CONF.gpfs_store_datadir)"},{"line_number":226,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":227,"context_line":"                msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":228,"context_line":"                       % CONF.gpfs_store_datadir)"},{"line_number":229,"context_line":"                LOG.error(msg)"},{"line_number":230,"context_line":"                raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_47b946ca","line":227,"updated":"2014-07-10 11:02:02.000000000","message":"ditto reason","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            try:"},{"line_number":225,"context_line":"                self._is_gpfs_path(CONF.gpfs_store_datadir)"},{"line_number":226,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":227,"context_line":"                msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":228,"context_line":"                       % CONF.gpfs_store_datadir)"},{"line_number":229,"context_line":"                LOG.error(msg)"},{"line_number":230,"context_line":"                raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a6abf373","line":227,"in_reply_to":"baada198_47b946ca","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            glance.store.check_location_metadata(metadata)"},{"line_number":266,"context_line":"            return metadata"},{"line_number":267,"context_line":"        except glance.store.BackendException as bee:"},{"line_number":268,"context_line":"            LOG.error(_(\u0027The JSON in the metadata file %(file)s could not be \u0027"},{"line_number":269,"context_line":"                        \u0027used: %(error)s  An empty dictionary will be \u0027"},{"line_number":270,"context_line":"                        \u0027returned to the client.\u0027) %"},{"line_number":271,"context_line":"                      {\u0027file\u0027: CONF.gpfs_store_metadata_file,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c7c47643","line":268,"updated":"2014-07-10 11:02:02.000000000","message":"ditto _LE( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            glance.store.check_location_metadata(metadata)"},{"line_number":266,"context_line":"            return metadata"},{"line_number":267,"context_line":"        except glance.store.BackendException as bee:"},{"line_number":268,"context_line":"            LOG.error(_(\u0027The JSON in the metadata file %(file)s could not be \u0027"},{"line_number":269,"context_line":"                        \u0027used: %(error)s  An empty dictionary will be \u0027"},{"line_number":270,"context_line":"                        \u0027returned to the client.\u0027) %"},{"line_number":271,"context_line":"                      {\u0027file\u0027: CONF.gpfs_store_metadata_file,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c6a627ab","line":268,"in_reply_to":"baada198_c7c47643","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                       \u0027error\u0027: str(bee)})"},{"line_number":273,"context_line":"            return {}"},{"line_number":274,"context_line":"        except IOError as ioe:"},{"line_number":275,"context_line":"            LOG.error(_(\u0027The path for the metadata file %(file)s could not be \u0027"},{"line_number":276,"context_line":"                        \u0027opened: %(error)s  An empty dictionary will be \u0027"},{"line_number":277,"context_line":"                        \u0027returned to the client.\u0027) %"},{"line_number":278,"context_line":"                      {\u0027file\u0027: CONF.gpfs_store_metadata_file,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_07bf4eab","line":275,"updated":"2014-07-10 11:02:02.000000000","message":"ditto _LE( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                       \u0027error\u0027: str(bee)})"},{"line_number":273,"context_line":"            return {}"},{"line_number":274,"context_line":"        except IOError as ioe:"},{"line_number":275,"context_line":"            LOG.error(_(\u0027The path for the metadata file %(file)s could not be \u0027"},{"line_number":276,"context_line":"                        \u0027opened: %(error)s  An empty dictionary will be \u0027"},{"line_number":277,"context_line":"                        \u0027returned to the client.\u0027) %"},{"line_number":278,"context_line":"                      {\u0027file\u0027: CONF.gpfs_store_metadata_file,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e6b40bd6","line":275,"in_reply_to":"baada198_07bf4eab","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       \u0027error\u0027: ioe})"},{"line_number":280,"context_line":"            return {}"},{"line_number":281,"context_line":"        except Exception as ex:"},{"line_number":282,"context_line":"            LOG.exception(_(\u0027An error occurred processing the storage systems \u0027"},{"line_number":283,"context_line":"                            \u0027meta data file: %s.  An empty dictionary will be \u0027"},{"line_number":284,"context_line":"                            \u0027returned to the client.\u0027) % str(ex))"},{"line_number":285,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_47e066cc","line":282,"updated":"2014-07-10 11:02:02.000000000","message":"ditto _LE( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                       \u0027error\u0027: ioe})"},{"line_number":280,"context_line":"            return {}"},{"line_number":281,"context_line":"        except Exception as ex:"},{"line_number":282,"context_line":"            LOG.exception(_(\u0027An error occurred processing the storage systems \u0027"},{"line_number":283,"context_line":"                            \u0027meta data file: %s.  An empty dictionary will be \u0027"},{"line_number":284,"context_line":"                            \u0027returned to the client.\u0027) % str(ex))"},{"line_number":285,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_26afe37e","line":282,"in_reply_to":"baada198_47e066cc","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            return {}"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def get(self, location):"},{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":290,"context_line":"        where to find the image file, and returns a tuple of generator"},{"line_number":291,"context_line":"        (for reading the image file) and image_size"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87ea7eaa","line":288,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            return {}"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def get(self, location):"},{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":290,"context_line":"        where to find the image file, and returns a tuple of generator"},{"line_number":291,"context_line":"        (for reading the image file) and image_size"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_46b217e6","line":288,"in_reply_to":"baada198_87ea7eaa","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        :raises `glance.exception.NotFound` if image does not exist"},{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        filepath, filesize \u003d self._resolve_location(location)"},{"line_number":298,"context_line":"        msg \u003d _(\"Found image at %s. Returning in ChunkedFile.\") % filepath"},{"line_number":299,"context_line":"        LOG.debug(msg)"},{"line_number":300,"context_line":"        return (ChunkedFile(filepath), filesize)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e7da5a16","line":298,"updated":"2014-07-10 11:02:02.000000000","message":"No translation on debug [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        :raises `glance.exception.NotFound` if image does not exist"},{"line_number":296,"context_line":"        \"\"\""},{"line_number":297,"context_line":"        filepath, filesize \u003d self._resolve_location(location)"},{"line_number":298,"context_line":"        msg \u003d _(\"Found image at %s. Returning in ChunkedFile.\") % filepath"},{"line_number":299,"context_line":"        LOG.debug(msg)"},{"line_number":300,"context_line":"        return (ChunkedFile(filepath), filesize)"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_66c8fb56","line":298,"in_reply_to":"baada198_e7da5a16","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        return (ChunkedFile(filepath), filesize)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def get_size(self, location):"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":305,"context_line":"        where to find the image file and returns the image size"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2704527d","line":303,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        return (ChunkedFile(filepath), filesize)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def get_size(self, location):"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":305,"context_line":"        where to find the image file and returns the image size"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_86c34f38","line":303,"in_reply_to":"baada198_2704527d","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :rtype int"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        filepath, filesize \u003d self._resolve_location(location)"},{"line_number":313,"context_line":"        msg \u003d _(\"Found image at %s.\") % filepath"},{"line_number":314,"context_line":"        LOG.debug(msg)"},{"line_number":315,"context_line":"        return filesize"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_67fe4a6d","line":313,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :rtype int"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        filepath, filesize \u003d self._resolve_location(location)"},{"line_number":313,"context_line":"        msg \u003d _(\"Found image at %s.\") % filepath"},{"line_number":314,"context_line":"        LOG.debug(msg)"},{"line_number":315,"context_line":"        return filesize"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a6c21332","line":313,"in_reply_to":"baada198_67fe4a6d","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                    os.unlink(os.path.join(image_dir, img))"},{"line_number":333,"context_line":"                except OSError as err:"},{"line_number":334,"context_line":"                    if err.strerror.find(\u0027Read-only\u0027) \u003d\u003d -1:"},{"line_number":335,"context_line":"                        LOG.warn(_(\"You cannot delete tombstone file %s\")"},{"line_number":336,"context_line":"                                 % err.filename)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87019e6c","line":335,"updated":"2014-07-10 11:02:02.000000000","message":"ditto _LW( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                    os.unlink(os.path.join(image_dir, img))"},{"line_number":333,"context_line":"                except OSError as err:"},{"line_number":334,"context_line":"                    if err.strerror.find(\u0027Read-only\u0027) \u003d\u003d -1:"},{"line_number":335,"context_line":"                        LOG.warn(_(\"You cannot delete tombstone file %s\")"},{"line_number":336,"context_line":"                                 % err.filename)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def delete(self, location):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c6bd47b3","line":335,"in_reply_to":"baada198_87019e6c","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                 % err.filename)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def delete(self, location):"},{"line_number":339,"context_line":"        \"\"\""},{"line_number":340,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":341,"context_line":"        where to find the image file to delete"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a7f7828b","line":339,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                                 % err.filename)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def delete(self, location):"},{"line_number":339,"context_line":"        \"\"\""},{"line_number":340,"context_line":"        Takes a `glance.store.location.Location` object that indicates"},{"line_number":341,"context_line":"        where to find the image file to delete"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_06df3f0d","line":339,"in_reply_to":"baada198_a7f7828b","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        return best_datadir"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":404,"context_line":"        \"\"\""},{"line_number":405,"context_line":"        Stores an image file with supplied identifier to the backend"},{"line_number":406,"context_line":"        storage system and returns a tuple containing information"},{"line_number":407,"context_line":"        about the stored image."}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c7f2b69a","line":404,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        return best_datadir"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":404,"context_line":"        \"\"\""},{"line_number":405,"context_line":"        Stores an image file with supplied identifier to the backend"},{"line_number":406,"context_line":"        storage system and returns a tuple containing information"},{"line_number":407,"context_line":"        about the stored image."}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_26e603e9","line":404,"in_reply_to":"baada198_c7f2b69a","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        try:"},{"line_number":468,"context_line":"            os.unlink(filepath)"},{"line_number":469,"context_line":"        except Exception as e:"},{"line_number":470,"context_line":"            msg \u003d _(\u0027Unable to remove partial image data for image %(id)s: \u0027"},{"line_number":471,"context_line":"                    \u0027%(error)s\u0027)"},{"line_number":472,"context_line":"            LOG.error(msg % {\u0027id\u0027: id,"},{"line_number":473,"context_line":"                             \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_472ea6fb","line":470,"updated":"2014-07-10 11:02:02.000000000","message":"ditto _LE( [1]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        try:"},{"line_number":468,"context_line":"            os.unlink(filepath)"},{"line_number":469,"context_line":"        except Exception as e:"},{"line_number":470,"context_line":"            msg \u003d _(\u0027Unable to remove partial image data for image %(id)s: \u0027"},{"line_number":471,"context_line":"                    \u0027%(error)s\u0027)"},{"line_number":472,"context_line":"            LOG.error(msg % {\u0027id\u0027: id,"},{"line_number":473,"context_line":"                             \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_46e937b6","line":470,"in_reply_to":"baada198_472ea6fb","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"ffbea403025f6f4dc6ba7cf6b4fabf9e514b7eda","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.scheme \u003d pieces.scheme"},{"line_number":73,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":74,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":75,"context_line":"            reason \u003d (\"No path specified in URI: %s\") % uri"},{"line_number":76,"context_line":"            LOG.debug(reason)"},{"line_number":77,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":78,"context_line":"        self.path \u003d path"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_f9a88123","line":75,"updated":"2014-07-29 14:55:58.000000000","message":"Please remove the uri from the log message as flagged already on PS9.","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a4f7be92c3a7498c747b2f13dfbad6d370decf01","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":74,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":75,"context_line":"            reason \u003d (\"No path specified in URI: %s\") % uri"},{"line_number":76,"context_line":"            LOG.debug(reason)"},{"line_number":77,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":78,"context_line":"        self.path \u003d path"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_ed728d11","line":76,"updated":"2014-07-29 09:07:48.000000000","message":"Maybe it\u0027s better to use here warning or info level.","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"ffbea403025f6f4dc6ba7cf6b4fabf9e514b7eda","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":74,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":75,"context_line":"            reason \u003d (\"No path specified in URI: %s\") % uri"},{"line_number":76,"context_line":"            LOG.debug(reason)"},{"line_number":77,"context_line":"            raise exception.BadStoreUri(\u0027No path specified\u0027)"},{"line_number":78,"context_line":"        self.path \u003d path"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_64fbe815","line":76,"in_reply_to":"baada198_ed728d11","updated":"2014-07-29 14:55:58.000000000","message":"Info is not the correct level to log any error situations. I\u0027m open for debate between debug and warn.","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"ffbea403025f6f4dc6ba7cf6b4fabf9e514b7eda","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class ChunkedFile(object):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":"    We send this back to the Glance API server as"},{"line_number":85,"context_line":"    something that can iterate over a large file"},{"line_number":86,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_1fffd5ac","line":83,"updated":"2014-07-29 14:55:58.000000000","message":"NIT: the docstring formatting without empty line at the start.","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"47f5c9cb864f9f9fd4f9a5cc7b68017c823001fb","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class ChunkedFile(object):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":"    We send this back to the Glance API server as"},{"line_number":85,"context_line":"    something that can iterate over a large file"},{"line_number":86,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_f78e1726","line":83,"in_reply_to":"baada198_1fffd5ac","updated":"2014-08-04 01:48:45.000000000","message":"Done","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a4f7be92c3a7498c747b2f13dfbad6d370decf01","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        :raise BadStoreConfiguration exception if datadir is read-only."},{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        if not os.access(datadir, os.W_OK):"},{"line_number":128,"context_line":"            msg \u003d (_(\"Permission to write in %s denied\") % datadir)"},{"line_number":129,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":130,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_5838929f","line":128,"updated":"2014-07-29 09:07:48.000000000","message":"It\u0027s better to write info into LOG.error","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"47f5c9cb864f9f9fd4f9a5cc7b68017c823001fb","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        :raise BadStoreConfiguration exception if datadir is read-only."},{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        if not os.access(datadir, os.W_OK):"},{"line_number":128,"context_line":"            msg \u003d (_(\"Permission to write in %s denied\") % datadir)"},{"line_number":129,"context_line":"            raise exception.BadStoreConfiguration("},{"line_number":130,"context_line":"                store_name\u003d\"gpfs\", reason\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_978f9b2d","line":128,"in_reply_to":"baada198_5838929f","updated":"2014-08-04 01:48:45.000000000","message":"Done","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"ffbea403025f6f4dc6ba7cf6b4fabf9e514b7eda","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            msg \u003d _LE(\u0027The JSON in the metadata file %(file)s could not be\u0027"},{"line_number":291,"context_line":"                      \u0027 used: %(error)s  An empty dictionary will be \u0027"},{"line_number":292,"context_line":"                      \u0027returned to the client.\u0027)"},{"line_number":293,"context_line":"            LOG.error(msg % {\u0027file\u0027: CONF.gpfs_store_metadata_file,"},{"line_number":294,"context_line":"                      \u0027error\u0027: str(bee)})"},{"line_number":295,"context_line":"            return {}"},{"line_number":296,"context_line":"        except IOError as ioe:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_7fea910f","line":293,"updated":"2014-07-29 14:55:58.000000000","message":"If string variable is used we prefer formatting the strings at once and then just logging them, like:\nmsg \u003d _LE(\"some string here %s\") % variable\nLOG.error(msg)\nrather than injecting in the logging call like:\nmsg \u003d _LE(\"some string here %s\")\nLOG.error(msg % variable)\n\nYou can easily do this on multi line messages by just wrapping it all with parentheses.","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"47f5c9cb864f9f9fd4f9a5cc7b68017c823001fb","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            msg \u003d _LE(\u0027The JSON in the metadata file %(file)s could not be\u0027"},{"line_number":291,"context_line":"                      \u0027 used: %(error)s  An empty dictionary will be \u0027"},{"line_number":292,"context_line":"                      \u0027returned to the client.\u0027)"},{"line_number":293,"context_line":"            LOG.error(msg % {\u0027file\u0027: CONF.gpfs_store_metadata_file,"},{"line_number":294,"context_line":"                      \u0027error\u0027: str(bee)})"},{"line_number":295,"context_line":"            return {}"},{"line_number":296,"context_line":"        except IOError as ioe:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_17070b82","line":293,"in_reply_to":"baada198_7fea910f","updated":"2014-08-04 01:48:45.000000000","message":"I am following the openstack hacking, [H703] \n[H703] If you have multiple variables to place in the string, use keyword parameters. This helps our translators reorder parameters when needed.\n\nExample:\n\nmsg \u003d _LE(\"The server with id %(s_id)s has no key %(m_key)s\")\nLOG.error(msg % {\"s_id\": \"1234\", \"m_key\": \"imageId\"})","commit_id":"d2ce3b0813ce067a42632f022d638a229a48431c"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"699a7ac1b0ca194417c428e1cac7f3c6e372de72","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"},{"line_number":465,"context_line":"                                      % filepath)"},{"line_number":466,"context_line":"        free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":467,"context_line":"        if free_space \u003c\u003d image_size:"},{"line_number":468,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":469,"context_line":"                          \"image store.\"))"},{"line_number":470,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the GPFS image \""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_ee1b8e6c","line":467,"updated":"2014-08-04 14:25:32.000000000","message":"I believe we already checked for enough free_space in the datadir in the call to _find_best_datadir() above. So, probably this check can be removed. Also, \u0027free_space \u003d\u003d image_size\u0027 should be good enough, isn\u0027t it?","commit_id":"cef144f996403756516f62b928dad6c73632bbb0"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"1d4b153bad4072f6a5a19c73d09c39f9ee03a4d5","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"},{"line_number":465,"context_line":"                                      % filepath)"},{"line_number":466,"context_line":"        free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":467,"context_line":"        if free_space \u003c\u003d image_size:"},{"line_number":468,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":469,"context_line":"                          \"image store.\"))"},{"line_number":470,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the GPFS image \""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_8de5a3dc","line":467,"in_reply_to":"baada198_ee1b8e6c","updated":"2014-08-05 02:08:45.000000000","message":"If only one datadir, the find_best_datadir only return it, so these code cannot be removed.\n\nI moved it into the _find_best_datadir.","commit_id":"cef144f996403756516f62b928dad6c73632bbb0"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5fa4ea341c7903b8d89b3fdab34d8dd16fb52428","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        path \u003d (pieces.netloc + pieces.path).strip()"},{"line_number":74,"context_line":"        if path \u003d\u003d \u0027\u0027:"},{"line_number":75,"context_line":"            LOG.debug(\"No path specified in URI.\")"},{"line_number":76,"context_line":"            reason \u003d (\"No path specified in URI.\")"},{"line_number":77,"context_line":"            raise exception.BadStoreUri(message\u003dreason)"},{"line_number":78,"context_line":"        self.path \u003d path"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_c71da8c1","line":76,"updated":"2014-08-05 11:39:52.000000000","message":"Exception messages needs to be translated with _()","commit_id":"2f46e4fa048ab66485ffccdc0b4868801653be21"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5fa4ea341c7903b8d89b3fdab34d8dd16fb52428","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        :datadir is a directory path in which glance wites image files."},{"line_number":124,"context_line":"        :raise BadStoreConfiguration exception if datadir is read-only."},{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":"        if not os.access(datadir, os.W_OK):"},{"line_number":127,"context_line":"            LOG.error(_LE(\"Permission to write in %s denied\") % datadir)"},{"line_number":128,"context_line":"            msg \u003d _(\"Permission to write in %s denied\") % datadir"},{"line_number":129,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_47c7d811","line":126,"updated":"2014-08-05 11:39:52.000000000","message":"this is ok, you could do as well something like:\nmsg \u003d _(....) % datadir\nLOG.error(msg)\nraise ... reason\u003dmsg)\n\nIt\u0027s ok to translate LOG messages with just _() as long as the same message is used in Exception. IMO would be cleaner and be more in line with the rest of the modules.","commit_id":"2f46e4fa048ab66485ffccdc0b4868801653be21"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5fa4ea341c7903b8d89b3fdab34d8dd16fb52428","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        self._check_write_permission(datadir)"},{"line_number":155,"context_line":"                        continue"},{"line_number":156,"context_line":"                    LOG.error(_LE(\"Unable to create datadir: %s\") % datadir)"},{"line_number":157,"context_line":"                    reason \u003d _(\"Unable to create datadir: %s\") % datadir"},{"line_number":158,"context_line":"                    raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":159,"context_line":"                                                          reason\u003dreason)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_c7d208cf","line":157,"updated":"2014-08-05 11:39:52.000000000","message":"same here, you could just log the reason.","commit_id":"2f46e4fa048ab66485ffccdc0b4868801653be21"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5fa4ea341c7903b8d89b3fdab34d8dd16fb52428","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    def _resolve_location(location):"},{"line_number":287,"context_line":"        filepath \u003d location.store_location.path"},{"line_number":288,"context_line":"        if not os.path.exists(filepath):"},{"line_number":289,"context_line":"            LOG.error(_(\"Image file is not found.\"))"},{"line_number":290,"context_line":"            raise exception.NotFound(_(\"Image file %s not found\") % filepath)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        filesize \u003d os.path.getsize(filepath)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_47eef88b","line":289,"updated":"2014-08-05 11:39:52.000000000","message":"this on the other hand is not exactly the same so it would need _LE()","commit_id":"2f46e4fa048ab66485ffccdc0b4868801653be21"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"5fa4ea341c7903b8d89b3fdab34d8dd16fb52428","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_(\"There is no enough disk space left on the image \""},{"line_number":441,"context_line":"                        \"storage media.\"))"},{"line_number":442,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the image \""},{"line_number":443,"context_line":"                     \"storage media. requested\u003d%s\") % image_size)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e7f62c5e","line":440,"updated":"2014-08-05 11:39:52.000000000","message":"ditto _LE","commit_id":"2f46e4fa048ab66485ffccdc0b4868801653be21"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import errno"},{"line_number":19,"context_line":"import hashlib"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import urlparse"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_66a2e59b","line":21,"updated":"2014-08-26 14:33:20.000000000","message":"what about: import six.moves.urllib.parse as urlparse","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import errno"},{"line_number":19,"context_line":"import hashlib"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import urlparse"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_03ff8e35","line":21,"in_reply_to":"1abeadc6_66a2e59b","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from glance.common import exception"},{"line_number":26,"context_line":"from glance.common import utils"},{"line_number":27,"context_line":"from glance.openstack.common import gettextutils"},{"line_number":28,"context_line":"from glance.openstack.common import jsonutils"},{"line_number":29,"context_line":"import glance.openstack.common.log as logging"},{"line_number":30,"context_line":"from glance.openstack.common import processutils"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_46b5e9cb","line":27,"updated":"2014-08-26 14:33:20.000000000","message":"glance.i18n","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from glance.common import exception"},{"line_number":26,"context_line":"from glance.common import utils"},{"line_number":27,"context_line":"from glance.openstack.common import gettextutils"},{"line_number":28,"context_line":"from glance.openstack.common import jsonutils"},{"line_number":29,"context_line":"import glance.openstack.common.log as logging"},{"line_number":30,"context_line":"from glance.openstack.common import processutils"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_af178350","line":27,"in_reply_to":"1abeadc6_46b5e9cb","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def _is_gpfs_path(self, directory):"},{"line_number":177,"context_line":"        processutils.execute(\u0027mmlsattr\u0027, directory, run_as_root\u003dTrue)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _check_directory_paths(self, datadir_path, directory_paths):"},{"line_number":180,"context_line":"        if datadir_path in directory_paths:"},{"line_number":181,"context_line":"            LOG.error(_LE(\"Directory %(datadir_path)s specified multiple times\""},{"line_number":182,"context_line":"                          \" in gpfs_store_datadirs \")"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_8415349d","line":179,"updated":"2014-08-26 14:33:20.000000000","message":"I think original doc is nice [0], why you remove it?\n\n[0] https://github.com/openstack/glance/blob/master/glance/store/filesystem.py#L213","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def _is_gpfs_path(self, directory):"},{"line_number":177,"context_line":"        processutils.execute(\u0027mmlsattr\u0027, directory, run_as_root\u003dTrue)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _check_directory_paths(self, datadir_path, directory_paths):"},{"line_number":180,"context_line":"        if datadir_path in directory_paths:"},{"line_number":181,"context_line":"            LOG.error(_LE(\"Directory %(datadir_path)s specified multiple times\""},{"line_number":182,"context_line":"                          \" in gpfs_store_datadirs \")"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_0f2fafa2","line":179,"in_reply_to":"1abeadc6_8415349d","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            self._is_gpfs_path(datadir_path)"},{"line_number":192,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":193,"context_line":"            LOG.error(_LE(\"The directory %s maybe not on GPFS\")"},{"line_number":194,"context_line":"                      % CONF.gpfs_store_datadir)"},{"line_number":195,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":196,"context_line":"                   % CONF.gpfs_store_datadir)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_1d9809bf","line":193,"updated":"2014-08-29 08:36:39.000000000","message":"if you swap these around we need to translate it only once. Like:\nmsg \u003d _(\"The ....GPFS\") % ...\nLOG.error(msg)\nraise ..... reason\u003dmsg)\n\nit\u0027s fine to use _() only as long as the same message is used on both exception and logging","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            self._is_gpfs_path(datadir_path)"},{"line_number":192,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":193,"context_line":"            LOG.error(_LE(\"The directory %s maybe not on GPFS\")"},{"line_number":194,"context_line":"                      % CONF.gpfs_store_datadir)"},{"line_number":195,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":196,"context_line":"                   % CONF.gpfs_store_datadir)"},{"line_number":197,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_c40f2c87","line":194,"updated":"2014-08-26 14:33:20.000000000","message":"datadir_path","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            LOG.error(_LE(\"The directory %s maybe not on GPFS\")"},{"line_number":194,"context_line":"                      % CONF.gpfs_store_datadir)"},{"line_number":195,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":196,"context_line":"                   % CONF.gpfs_store_datadir)"},{"line_number":197,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":198,"context_line":"                                                  reason\u003dmsg)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_2420e0f6","line":196,"updated":"2014-08-26 14:33:20.000000000","message":"datadir_path","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            LOG.error(_LE(\"The directory %s maybe not on GPFS\")"},{"line_number":194,"context_line":"                      % CONF.gpfs_store_datadir)"},{"line_number":195,"context_line":"            msg \u003d (_(\"The directory %s maybe not on GPFS\")"},{"line_number":196,"context_line":"                   % CONF.gpfs_store_datadir)"},{"line_number":197,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":198,"context_line":"                                                  reason\u003dmsg)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_0386aeb9","line":196,"in_reply_to":"1abeadc6_2420e0f6","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        Any store that needs special configuration should implement"},{"line_number":233,"context_line":"        this method. If the store was not able to successfully configure"},{"line_number":234,"context_line":"        itself, it should raise `exception.BadStoreConfiguration`"},{"line_number":235,"context_line":"        Check gpfs enviroment"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_41722e12","line":235,"updated":"2014-08-26 14:33:20.000000000","message":"pls re-organize this doc","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        Any store that needs special configuration should implement"},{"line_number":233,"context_line":"        this method. If the store was not able to successfully configure"},{"line_number":234,"context_line":"        itself, it should raise `exception.BadStoreConfiguration`"},{"line_number":235,"context_line":"        Check gpfs enviroment"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_81660628","line":235,"updated":"2014-08-26 14:33:20.000000000","message":"pls re-organize this doc","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        Any store that needs special configuration should implement"},{"line_number":233,"context_line":"        this method. If the store was not able to successfully configure"},{"line_number":234,"context_line":"        itself, it should raise `exception.BadStoreConfiguration`"},{"line_number":235,"context_line":"        Check gpfs enviroment"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_69ee7b8d","line":235,"in_reply_to":"1abeadc6_41722e12","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        Any store that needs special configuration should implement"},{"line_number":233,"context_line":"        this method. If the store was not able to successfully configure"},{"line_number":234,"context_line":"        itself, it should raise `exception.BadStoreConfiguration`"},{"line_number":235,"context_line":"        Check gpfs enviroment"},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_89f39f72","line":235,"in_reply_to":"1abeadc6_81660628","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":239,"context_line":"            LOG.error(_LE(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":240,"context_line":"                          \"should be set.\"))"},{"line_number":241,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":242,"context_line":"                    \"should be set.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_040e8432","line":239,"updated":"2014-08-26 14:33:20.000000000","message":"nit, So I prefer to save this string to a var, then reuse it to remove duplication. pls fix below same cases.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":239,"context_line":"            LOG.error(_LE(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":240,"context_line":"                          \"should be set.\"))"},{"line_number":241,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":242,"context_line":"                    \"should be set.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_1d748966","line":239,"in_reply_to":"1abeadc6_040e8432","updated":"2014-08-29 08:36:39.000000000","message":"+1\nexample on row 193 comment. _() only is ok to avoid duplication as long as the message needs to be translated for both.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":239,"context_line":"            LOG.error(_LE(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":240,"context_line":"                          \"should be set.\"))"},{"line_number":241,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":242,"context_line":"                    \"should be set.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_4969b78a","line":239,"in_reply_to":"1abeadc6_040e8432","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        if not (CONF.gpfs_store_datadir"},{"line_number":238,"context_line":"                or CONF.gpfs_store_datadirs):"},{"line_number":239,"context_line":"            LOG.error(_LE(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":240,"context_line":"                          \"should be set.\"))"},{"line_number":241,"context_line":"            msg \u003d _(\"Option gpfs_store_datadir or gpfs_store_datadir \""},{"line_number":242,"context_line":"                    \"should be set.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_69059bc1","line":239,"in_reply_to":"1abeadc6_1d748966","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":252,"context_line":"                                                  reason\u003dmsg)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        self._check_gpfs_state()"},{"line_number":255,"context_line":"        self.multiple_datadirs \u003d False"},{"line_number":256,"context_line":"        directory_paths \u003d set()"},{"line_number":257,"context_line":"        if CONF.gpfs_store_datadir:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_e4c34888","line":254,"updated":"2014-08-26 14:33:20.000000000","message":"is there a chance to make \"mmgetstate -Y\" raise processutils.ProcessExecutionError too? Not sure if we need to handle that case like \"mmlsattr \u003cimage_patch\u003e\"","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            raise exception.BadStoreConfiguration(store_name\u003d\"gpfs\","},{"line_number":252,"context_line":"                                                  reason\u003dmsg)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        self._check_gpfs_state()"},{"line_number":255,"context_line":"        self.multiple_datadirs \u003d False"},{"line_number":256,"context_line":"        directory_paths \u003d set()"},{"line_number":257,"context_line":"        if CONF.gpfs_store_datadir:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_e95d0b4a","line":254,"in_reply_to":"1abeadc6_e4c34888","updated":"2014-09-01 05:23:39.000000000","message":"\"mmgetstate -Y\" will not raise processutils.ProcessExecutionError , eventhough the directory is not provided by GPFS.\nThis method function is to verify whether GPFS system work or not.\n\"mmlsattr \u003cimage_patch\u003e\" function is to verify whether directory provider is GPFS?or not.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            self.priority_data_map \u003d {}"},{"line_number":272,"context_line":"            for datadir in CONF.gpfs_store_datadirs:"},{"line_number":273,"context_line":"                (datadir_path,"},{"line_number":274,"context_line":"                    priority) \u003d self._get_datadir_path_and_priority(datadir)"},{"line_number":275,"context_line":"                self._check_directory_paths(datadir_path, directory_paths)"},{"line_number":276,"context_line":"                directory_paths.add(datadir_path)"},{"line_number":277,"context_line":"                self.priority_data_map.setdefault(int(priority),"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_240380b9","line":274,"updated":"2014-08-26 14:33:20.000000000","message":"nit, are there redundant 3 spaces?","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            self.priority_data_map \u003d {}"},{"line_number":272,"context_line":"            for datadir in CONF.gpfs_store_datadirs:"},{"line_number":273,"context_line":"                (datadir_path,"},{"line_number":274,"context_line":"                    priority) \u003d self._get_datadir_path_and_priority(datadir)"},{"line_number":275,"context_line":"                self._check_directory_paths(datadir_path, directory_paths)"},{"line_number":276,"context_line":"                directory_paths.add(datadir_path)"},{"line_number":277,"context_line":"                self.priority_data_map.setdefault(int(priority),"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_341a0a6f","line":274,"in_reply_to":"1abeadc6_240380b9","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            LOG.error(_LE(\"Image file is not found.\"))"},{"line_number":290,"context_line":"            raise exception.NotFound(_(\"Image file %s not found\") % filepath)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        filesize \u003d os.path.getsize(filepath)"},{"line_number":293,"context_line":"        return filepath, filesize"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _get_metadata(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_c4472c76","line":292,"updated":"2014-08-26 14:33:20.000000000","message":"confirmation: for gpfs mount point, we could use os.path.getsize() standard function to get size correctly as well right?","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            LOG.error(_LE(\"Image file is not found.\"))"},{"line_number":290,"context_line":"            raise exception.NotFound(_(\"Image file %s not found\") % filepath)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        filesize \u003d os.path.getsize(filepath)"},{"line_number":293,"context_line":"        return filepath, filesize"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _get_metadata(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_94573602","line":292,"in_reply_to":"1abeadc6_c4472c76","updated":"2014-09-01 05:23:39.000000000","message":"sure. GPFS support the standard posix interface.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                      \u0027error\u0027: ioe})"},{"line_number":317,"context_line":"            return {}"},{"line_number":318,"context_line":"        except Exception as ex:"},{"line_number":319,"context_line":"            LOG.error(_LE(\u0027An error occurred processing the storage systems \u0027"},{"line_number":320,"context_line":"                          \u0027meta data file: %s.  An empty dictionary will be \u0027"},{"line_number":321,"context_line":"                          \u0027returned to the client.\u0027) % str(ex))"},{"line_number":322,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_1de9e9e5","line":319,"updated":"2014-08-29 08:36:39.000000000","message":"Could you please be consistent and use the variable here as well.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                      \u0027error\u0027: ioe})"},{"line_number":317,"context_line":"            return {}"},{"line_number":318,"context_line":"        except Exception as ex:"},{"line_number":319,"context_line":"            LOG.error(_LE(\u0027An error occurred processing the storage systems \u0027"},{"line_number":320,"context_line":"                          \u0027meta data file: %s.  An empty dictionary will be \u0027"},{"line_number":321,"context_line":"                          \u0027returned to the client.\u0027) % str(ex))"},{"line_number":322,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_f43de2bc","line":319,"in_reply_to":"1abeadc6_1de9e9e5","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                raise exception.Forbidden(_(\"You cannot delete file %s\")"},{"line_number":360,"context_line":"                                          % image_path)"},{"line_number":361,"context_line":"            else:"},{"line_number":362,"context_line":"                os.rename(image_path, image_path + \".ts\")"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _delete_ts_images(self, image_dir):"},{"line_number":365,"context_line":"        for img in os.listdir(image_dir):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_0f913d9a","line":362,"updated":"2014-08-26 14:33:20.000000000","message":"When the image file gpfs stored can be marked to Read-Only, is it related volume/cinder? e.g. snapshot an image for volume fast creation for create-volume-from-image case?\n\nI think this is related to logic at below line #367-372, if i understand your idea correctly, at here you called _delete_ts_images() at line #353 for each image deletion request, and it will trigger a .ts file scan and try to delete them, so it seems we should ignore any OSError (unlink() failure) exception in _delete_ts_images() internal, since it just try-it-best.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                raise exception.Forbidden(_(\"You cannot delete file %s\")"},{"line_number":360,"context_line":"                                          % image_path)"},{"line_number":361,"context_line":"            else:"},{"line_number":362,"context_line":"                os.rename(image_path, image_path + \".ts\")"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def _delete_ts_images(self, image_dir):"},{"line_number":365,"context_line":"        for img in os.listdir(image_dir):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_af406357","line":362,"in_reply_to":"1abeadc6_0f913d9a","updated":"2014-09-01 05:23:39.000000000","message":"1. Read-Only image generation is related volume/cinder or nova image/cache (not include now).\n\n2. I only process OSError include exception message \u0027Read-only\u0027, because only \u0027Read-only\u0027 exception is caused by GPFS feature. The others exception may be caused by the others reason. I don\u0027t think all OSError here should be ignored.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                self.priority_data_map that can accommodate the image."},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        if not self.multiple_datadirs:"},{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_cfa2e54a","line":419,"updated":"2014-08-26 14:33:20.000000000","message":"So it seems original code in filesystore driver has a bug [0] due to it didn\u0027t check the data dir - the only one operator configured - whether has enough space, could you create a bug for filesystore? thanks.\n\n[0] https://github.com/openstack/glance/blob/master/glance/store/filesystem.py#L379","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                self.priority_data_map that can accommodate the image."},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        if not self.multiple_datadirs:"},{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_749ad215","line":419,"in_reply_to":"1abeadc6_cfa2e54a","updated":"2014-09-01 05:23:39.000000000","message":"I don\u0027t think this is a bug. Because the store initialized function \u0027configure_add\u0027 have checked the datadir exists.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b6faff8dbdc0ab5c434d514fb71f8f41ba1af08d","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                self.priority_data_map that can accommodate the image."},{"line_number":417,"context_line":"        \"\"\""},{"line_number":418,"context_line":"        if not self.multiple_datadirs:"},{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_cd1d6f68","line":419,"in_reply_to":"fa98f980_749ad215","updated":"2014-09-02 06:14:57.000000000","message":"I\u0027m not talking about exists of the directory, I\u0027m worried if the space of the store directory is enough for usage. (the requirement of calling _get_capacity_info() here)","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"},{"line_number":423,"context_line":"                msg \u003d (_(\"There is no enough disk space left on the GPFS image\""},{"line_number":424,"context_line":"                         \" store. requested\u003d%s\") % image_size)"},{"line_number":425,"context_line":"                raise exception.StorageFull(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_ef0b2129","line":422,"updated":"2014-08-26 14:33:20.000000000","message":"what about to provide requested image size in the log as well? it\u0027s worth for operator as well.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"},{"line_number":423,"context_line":"                msg \u003d (_(\"There is no enough disk space left on the GPFS image\""},{"line_number":424,"context_line":"                         \" store. requested\u003d%s\") % image_size)"},{"line_number":425,"context_line":"                raise exception.StorageFull(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_34904aec","line":422,"in_reply_to":"1abeadc6_bd947537","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"},{"line_number":423,"context_line":"                msg \u003d (_(\"There is no enough disk space left on the GPFS image\""},{"line_number":424,"context_line":"                         \" store. requested\u003d%s\") % image_size)"},{"line_number":425,"context_line":"                raise exception.StorageFull(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_bd947537","line":422,"in_reply_to":"1abeadc6_ef0b2129","updated":"2014-08-29 08:36:39.000000000","message":"+1 just LOG.error() that msg below.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            free_space \u003d self._get_capacity_info(self.datadir)"},{"line_number":420,"context_line":"            if free_space \u003c image_size:"},{"line_number":421,"context_line":"                LOG.error(_LE(\"There is no enough disk space left on the GPFS \""},{"line_number":422,"context_line":"                              \"image store.\"))"},{"line_number":423,"context_line":"                msg \u003d (_(\"There is no enough disk space left on the GPFS image\""},{"line_number":424,"context_line":"                         \" store. requested\u003d%s\") % image_size)"},{"line_number":425,"context_line":"                raise exception.StorageFull(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_149346fb","line":422,"in_reply_to":"1abeadc6_ef0b2129","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                if free_space \u003e\u003d image_size and free_space \u003e max_free_space:"},{"line_number":435,"context_line":"                    max_free_space \u003d free_space"},{"line_number":436,"context_line":"                    best_datadir \u003d datadir"},{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_0f593d5b","line":437,"updated":"2014-08-26 14:33:20.000000000","message":"nit, I prefer to keep original inline-comments at here, it\u0027s worth to help code reading: https://github.com/openstack/glance/blob/master/glance/store/filesystem.py#L390","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                if free_space \u003e\u003d image_size and free_space \u003e max_free_space:"},{"line_number":435,"context_line":"                    max_free_space \u003d free_space"},{"line_number":436,"context_line":"                    best_datadir \u003d datadir"},{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_d45d3e4a","line":437,"in_reply_to":"1abeadc6_0f593d5b","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""},{"line_number":441,"context_line":"                          \"storage media.\"))"},{"line_number":442,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the image \""},{"line_number":443,"context_line":"                     \"storage media. requested\u003d%s\") % image_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_2ff2799a","line":440,"updated":"2014-08-26 14:33:20.000000000","message":"Regarding to log at line #421, would you mind to make them be consistent?","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""},{"line_number":441,"context_line":"                          \"storage media.\"))"},{"line_number":442,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the image \""},{"line_number":443,"context_line":"                     \"storage media. requested\u003d%s\") % image_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_54314e0a","line":440,"in_reply_to":"1abeadc6_1dd3a904","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""},{"line_number":441,"context_line":"                          \"storage media.\"))"},{"line_number":442,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the image \""},{"line_number":443,"context_line":"                     \"storage media. requested\u003d%s\") % image_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_1dd3a904","line":440,"in_reply_to":"1abeadc6_2ff2799a","updated":"2014-08-29 08:36:39.000000000","message":"+1 ditto (please change the wording accordingly)","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            if best_datadir:"},{"line_number":438,"context_line":"                break"},{"line_number":439,"context_line":"        else:"},{"line_number":440,"context_line":"            LOG.error(_LE(\"There is no enough disk space left on the image \""},{"line_number":441,"context_line":"                          \"storage media.\"))"},{"line_number":442,"context_line":"            msg \u003d (_(\"There is no enough disk space left on the image \""},{"line_number":443,"context_line":"                     \"storage media. requested\u003d%s\") % image_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_1458a655","line":440,"in_reply_to":"1abeadc6_2ff2799a","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        return best_datadir"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":449,"context_line":"        \"\"\""},{"line_number":450,"context_line":"        Stores an image file with supplied identifier to the backend"},{"line_number":451,"context_line":"        storage system and returns a tuple containing information"},{"line_number":452,"context_line":"        about the stored image."}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_dd0a1178","line":449,"updated":"2014-08-29 08:36:39.000000000","message":"nit, no empty line at the start of docstring","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        return best_datadir"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def add(self, image_id, image_file, image_size):"},{"line_number":449,"context_line":"        \"\"\""},{"line_number":450,"context_line":"        Stores an image file with supplied identifier to the backend"},{"line_number":451,"context_line":"        storage system and returns a tuple containing information"},{"line_number":452,"context_line":"        about the stored image."}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_74365205","line":449,"in_reply_to":"1abeadc6_dd0a1178","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"da7d988c22e8663ecdb84b7dfb0193c7c9889827","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        datadir \u003d self._find_best_datadir(image_size)"},{"line_number":469,"context_line":"        filepath \u003d os.path.join(datadir, str(image_id))"},{"line_number":470,"context_line":"        if os.path.exists(filepath):"},{"line_number":471,"context_line":"            LOG.error(_LE(\"Image file already exists.\"))"},{"line_number":472,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"},{"line_number":473,"context_line":"                                      % filepath)"},{"line_number":474,"context_line":"        checksum \u003d hashlib.md5()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_3d3ce52e","line":471,"updated":"2014-08-29 08:36:39.000000000","message":"I would not log file name collision as ERROR","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        datadir \u003d self._find_best_datadir(image_size)"},{"line_number":469,"context_line":"        filepath \u003d os.path.join(datadir, str(image_id))"},{"line_number":470,"context_line":"        if os.path.exists(filepath):"},{"line_number":471,"context_line":"            LOG.error(_LE(\"Image file already exists.\"))"},{"line_number":472,"context_line":"            raise exception.Duplicate(_(\"Image file %s already exists!\")"},{"line_number":473,"context_line":"                                      % filepath)"},{"line_number":474,"context_line":"        checksum \u003d hashlib.md5()"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_741d7273","line":471,"in_reply_to":"1abeadc6_3d3ce52e","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.get(e.errno, e)"},{"line_number":490,"context_line":"        except Exception:"},{"line_number":491,"context_line":"            self._delete_partial(filepath, image_id)"},{"line_number":492,"context_line":"            raise"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":495,"context_line":"        metadata \u003d self._get_metadata()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_e62a75e6","line":492,"updated":"2014-08-26 14:33:20.000000000","message":"pls use save_and_reraise_exception() instead","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.get(e.errno, e)"},{"line_number":490,"context_line":"        except Exception:"},{"line_number":491,"context_line":"            self._delete_partial(filepath, image_id)"},{"line_number":492,"context_line":"            raise"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":495,"context_line":"        metadata \u003d self._get_metadata()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_0a63ebdd","line":492,"updated":"2014-08-26 14:33:20.000000000","message":"pls use save_and_reraise_exception() instead of raise.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.get(e.errno, e)"},{"line_number":490,"context_line":"        except Exception:"},{"line_number":491,"context_line":"            self._delete_partial(filepath, image_id)"},{"line_number":492,"context_line":"            raise"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":495,"context_line":"        metadata \u003d self._get_metadata()"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_8f20ff9c","line":492,"in_reply_to":"1abeadc6_0a63ebdd","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.get(e.errno, e)"},{"line_number":490,"context_line":"        except Exception:"},{"line_number":491,"context_line":"            self._delete_partial(filepath, image_id)"},{"line_number":492,"context_line":"            raise"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        checksum_hex \u003d checksum.hexdigest()"},{"line_number":495,"context_line":"        metadata \u003d self._get_metadata()"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_af25c3ac","line":492,"in_reply_to":"1abeadc6_e62a75e6","updated":"2014-09-01 05:23:39.000000000","message":"Done","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                   \u0027checksum_hex\u0027: checksum_hex})"},{"line_number":502,"context_line":"        return (\u0027gpfs://%s\u0027 % filepath, bytes_written, checksum_hex, metadata)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    @staticmethod"},{"line_number":505,"context_line":"    def _delete_partial(filepath, id):"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            os.unlink(filepath)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_0a592b5b","line":504,"updated":"2014-08-26 14:33:20.000000000","message":"1. may i know why we need to make this function be static?\n\n2. regarding to the \u0027read-only\u0027 case, do you think a similar case we handled in _delete_image() and _delete_ts_images() could be happened at here as well?","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                   \u0027checksum_hex\u0027: checksum_hex})"},{"line_number":502,"context_line":"        return (\u0027gpfs://%s\u0027 % filepath, bytes_written, checksum_hex, metadata)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    @staticmethod"},{"line_number":505,"context_line":"    def _delete_partial(filepath, id):"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            os.unlink(filepath)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_0ffc0f3e","line":504,"in_reply_to":"1abeadc6_0a592b5b","updated":"2014-09-01 05:23:39.000000000","message":"1. _delete_partial use static method is following filesystem store [0].\n[0] https://github.com/openstack/glance/blob/master/glance/store/filesystem.py#L460\n2. The _delete_partial function only is called when create image in store. So there is no chance to occure the \u0027read-only\u0027  case.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b6faff8dbdc0ab5c434d514fb71f8f41ba1af08d","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                   \u0027checksum_hex\u0027: checksum_hex})"},{"line_number":502,"context_line":"        return (\u0027gpfs://%s\u0027 % filepath, bytes_written, checksum_hex, metadata)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    @staticmethod"},{"line_number":505,"context_line":"    def _delete_partial(filepath, id):"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            os.unlink(filepath)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_2ded1b26","line":504,"in_reply_to":"fa98f980_0ffc0f3e","updated":"2014-09-02 06:14:57.000000000","message":"1. why we need to follow a useless/wrong thing?\n\n2. ok, sensible to me. is there any read-only case can be triggered in concurrence situation? it\u0027 ok, just throw out my thinking which like to know your thoughts.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"3ec2955d9ad87fbb1075c04c414db038b7fe7aba","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from glance.common import exception"},{"line_number":26,"context_line":"from glance.common import utils"},{"line_number":27,"context_line":"from glance.i18n import _"},{"line_number":28,"context_line":"from glance.i18n import _LE"},{"line_number":29,"context_line":"from glance.i18n import _LI"},{"line_number":30,"context_line":"from glance.i18n import _LW"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c98c7982","line":27,"updated":"2014-09-02 09:47:34.000000000","message":"we prefer to import only modules. For example see: https://github.com/openstack/glance/blob/master/glance/store/swift.py#L32 \u0026 #46","commit_id":"40d84d321de99e8bf9f408d59ceff7aefd616148"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3a45daca93824e517939f14f73d372daf21e694f","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        datadir \u003d self._find_best_datadir(image_size)"},{"line_number":478,"context_line":"        filepath \u003d os.path.join(datadir, str(image_id))"},{"line_number":479,"context_line":"        if os.path.exists(filepath):"},{"line_number":480,"context_line":"            msg \u003d _(\"Image file %s already exists!\") % filepath"},{"line_number":481,"context_line":"            LOG.error(msg)"},{"line_number":482,"context_line":"            raise exception.Duplicate(message\u003dmsg)"},{"line_number":483,"context_line":"        checksum \u003d hashlib.md5()"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_ff014b07","line":480,"updated":"2014-10-09 14:02:24.000000000","message":"It\u0027s needed _LE if it\u0027s error msg otherwise _LW as suggest Erno","commit_id":"40d84d321de99e8bf9f408d59ceff7aefd616148"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"3ec2955d9ad87fbb1075c04c414db038b7fe7aba","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        filepath \u003d os.path.join(datadir, str(image_id))"},{"line_number":479,"context_line":"        if os.path.exists(filepath):"},{"line_number":480,"context_line":"            msg \u003d _(\"Image file %s already exists!\") % filepath"},{"line_number":481,"context_line":"            LOG.error(msg)"},{"line_number":482,"context_line":"            raise exception.Duplicate(message\u003dmsg)"},{"line_number":483,"context_line":"        checksum \u003d hashlib.md5()"},{"line_number":484,"context_line":"        bytes_written \u003d 0"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_0994c135","line":481,"updated":"2014-09-02 09:47:34.000000000","message":"Still logging this as ERROR, was that intended? IMHO WARNING should be sufficient or have I missed something here?","commit_id":"40d84d321de99e8bf9f408d59ceff7aefd616148"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"3ec2955d9ad87fbb1075c04c414db038b7fe7aba","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        except Exception as ex:"},{"line_number":500,"context_line":"            self._delete_partial(filepath, image_id)"},{"line_number":501,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":502,"context_line":"                msg \u003d _(\"Error occured during save the image into GPFS store.\""},{"line_number":503,"context_line":"                        \"The detail exception: %s\") % ex"},{"line_number":504,"context_line":"                LOG.error(msg)"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_e905bd7a","line":502,"updated":"2014-09-02 09:47:34.000000000","message":"_LE(...)","commit_id":"40d84d321de99e8bf9f408d59ceff7aefd616148"}],"glance/tests/unit/test_gpfs_store.py":[{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"79b5db4610dfe4f3d3948e49d5141b4511bf7cbf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from glance.tests.unit import base"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import hashlib"},{"line_number":33,"context_line":"import mox"},{"line_number":34,"context_line":"import os"},{"line_number":35,"context_line":"from oslo.config import cfg"},{"line_number":36,"context_line":"import StringIO"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Flzc%3D","line":33,"updated":"2014-03-15 19:01:52.000000000","message":"New tests should use mock instead of mox framework.","commit_id":"7f39c9e96478e0e667d0bcb223148cf789a709f0"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"5ba7ba22b7564b7ce3c37758803b66c109b5cbce","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                                              image_id)"},{"line_number":183,"context_line":"        image_file \u003d StringIO.StringIO(expected_file_contents)"},{"line_number":184,"context_line":"        processutils.execute \u003d mock.Mock()"},{"line_number":185,"context_line":"        self.store._get_metadata \u003d mock.Mock(return_value\u003dNone)"},{"line_number":186,"context_line":"        cmd \u003d [\u0027df\u0027, \u0027--block-size\u003d1\u0027, self.test_dir]"},{"line_number":187,"context_line":"        processutils.execute.return_value \u003d [\"Filesystem 1K-blocks Used \""},{"line_number":188,"context_line":"                                             \"Available Use% Mounted on\\n\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FL54%3D","line":185,"updated":"2014-03-19 16:18:11.000000000","message":"It\u0027s a little cleaner to use @patch decorator for mock definitions on line 184 \u0026 185.","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"030c76cd8ddd0ef61742124629571ced542daa0a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                                              image_id)"},{"line_number":183,"context_line":"        image_file \u003d StringIO.StringIO(expected_file_contents)"},{"line_number":184,"context_line":"        processutils.execute \u003d mock.Mock()"},{"line_number":185,"context_line":"        self.store._get_metadata \u003d mock.Mock(return_value\u003dNone)"},{"line_number":186,"context_line":"        cmd \u003d [\u0027df\u0027, \u0027--block-size\u003d1\u0027, self.test_dir]"},{"line_number":187,"context_line":"        processutils.execute.return_value \u003d [\"Filesystem 1K-blocks Used \""},{"line_number":188,"context_line":"                                             \"Available Use% Mounted on\\n\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FHiM%3D","line":185,"in_reply_to":"AAAAWH%2F%2FL54%3D","updated":"2014-03-20 05:34:05.000000000","message":"Done","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"5ba7ba22b7564b7ce3c37758803b66c109b5cbce","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        e \u003d IOError()"},{"line_number":263,"context_line":"        e.errno \u003d errno"},{"line_number":264,"context_line":"        with mock.patch(\u0027__builtin__.open\u0027, mock.Mock(side_effect\u003de)):"},{"line_number":265,"context_line":"            self.assertRaises(exception,"},{"line_number":266,"context_line":"                              self.store.add,"},{"line_number":267,"context_line":"                              image_id, image_file, 0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FL5I%3D","line":264,"updated":"2014-03-19 16:18:11.000000000","message":"Use @patch decorator?","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"030c76cd8ddd0ef61742124629571ced542daa0a","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        e \u003d IOError()"},{"line_number":263,"context_line":"        e.errno \u003d errno"},{"line_number":264,"context_line":"        with mock.patch(\u0027__builtin__.open\u0027, mock.Mock(side_effect\u003de)):"},{"line_number":265,"context_line":"            self.assertRaises(exception,"},{"line_number":266,"context_line":"                              self.store.add,"},{"line_number":267,"context_line":"                              image_id, image_file, 0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FHiI%3D","line":264,"in_reply_to":"AAAAWH%2F%2FL5I%3D","updated":"2014-03-20 05:34:05.000000000","message":"Done","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"5ba7ba22b7564b7ce3c37758803b66c109b5cbce","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        e \u003d OSError()"},{"line_number":352,"context_line":"        e.strerror \u003d \u0027Read-only\u0027"},{"line_number":353,"context_line":"        e.filename \u003d image_path"},{"line_number":354,"context_line":"        patcher \u003d mock.patch(\u0027os.unlink\u0027, mock.Mock(side_effect\u003de))"},{"line_number":355,"context_line":"        patcher.start()"},{"line_number":356,"context_line":"        location, size, checksum, _ \u003d self.store.add(image_id,"},{"line_number":357,"context_line":"                                                     image_file,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FL4s%3D","line":354,"updated":"2014-03-19 16:18:11.000000000","message":"I think if you use patch decorator, you will not need start and stop calls","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"030c76cd8ddd0ef61742124629571ced542daa0a","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        e \u003d OSError()"},{"line_number":352,"context_line":"        e.strerror \u003d \u0027Read-only\u0027"},{"line_number":353,"context_line":"        e.filename \u003d image_path"},{"line_number":354,"context_line":"        patcher \u003d mock.patch(\u0027os.unlink\u0027, mock.Mock(side_effect\u003de))"},{"line_number":355,"context_line":"        patcher.start()"},{"line_number":356,"context_line":"        location, size, checksum, _ \u003d self.store.add(image_id,"},{"line_number":357,"context_line":"                                                     image_file,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FHh8%3D","line":354,"in_reply_to":"AAAAWH%2F%2FL4s%3D","updated":"2014-03-20 05:34:05.000000000","message":"I think this place should use mock.patch start and stop calls, because os.unlink mock is not effective in the total function scope.","commit_id":"b9d3356f805fcf4337e8bc0e969ae9be782b0b8b"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"import glance.openstack.common.log as logging"},{"line_number":24,"context_line":"from glance.openstack.common import processutils"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_474dc698","line":21,"updated":"2014-07-10 11:02:02.000000000","message":"Import order [2]:\n1) stdlib\n2) 3rd party\n3) project","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"import glance.openstack.common.log as logging"},{"line_number":24,"context_line":"from glance.openstack.common import processutils"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_06ebbf12","line":21,"in_reply_to":"baada198_474dc698","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from glance.openstack.common import processutils"},{"line_number":25,"context_line":"from glance.openstack.common import units"},{"line_number":26,"context_line":"from glance.store.gpfs import ChunkedFile"},{"line_number":27,"context_line":"from glance.store.gpfs import Store"},{"line_number":28,"context_line":"from glance.store.location import get_location_from_uri"},{"line_number":29,"context_line":"from glance.tests.unit import base"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_8747de76","line":27,"updated":"2014-07-10 11:02:02.000000000","message":"We tend to import only modules, not objects [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from glance.openstack.common import processutils"},{"line_number":25,"context_line":"from glance.openstack.common import units"},{"line_number":26,"context_line":"from glance.store.gpfs import ChunkedFile"},{"line_number":27,"context_line":"from glance.store.gpfs import Store"},{"line_number":28,"context_line":"from glance.store.location import get_location_from_uri"},{"line_number":29,"context_line":"from glance.tests.unit import base"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e6e7ab44","line":27,"in_reply_to":"baada198_8747de76","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":37,"context_line":"import uuid"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class TestStore(base.StoreClearingUnitTest):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d940da37","line":40,"updated":"2014-07-10 11:02:02.000000000","message":"Is there need for this?","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"import uuid"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class TestStore(base.StoreClearingUnitTest):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_66db9b7d","line":40,"in_reply_to":"baada198_d940da37","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            shutil.rmtree(self.test_dir)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_configure_add(self):"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        Tests gpfs configure specified by gpfs_store_datadir"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        images_dir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e7489ace","line":76,"updated":"2014-07-10 11:02:02.000000000","message":"ditto (no new line) [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            shutil.rmtree(self.test_dir)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_configure_add(self):"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        Tests gpfs configure specified by gpfs_store_datadir"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        images_dir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a6e5b339","line":76,"in_reply_to":"baada198_e7489ace","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                       self.fake_is_gpfs_path)"},{"line_number":85,"context_line":"        store \u003d Store()"},{"line_number":86,"context_line":"        store.configure_add()"},{"line_number":87,"context_line":"        self.assertEqual(store.datadir, images_dir)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_configure_add_not_active_gpfs(self):"},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b90c063d","line":87,"updated":"2014-07-10 11:02:02.000000000","message":"We tend to order assert parameters on (expected, real)","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertEqual(store.datadir, images_dir)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_configure_add_not_active_gpfs(self):"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        Test gpfs cluster inactive status"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        images_dir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_4715c699","line":90,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertEqual(store.datadir, images_dir)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_configure_add_not_active_gpfs(self):"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        Test gpfs cluster inactive status"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        images_dir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_06bc9fda","line":90,"in_reply_to":"baada198_4715c699","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          self.store.configure_add)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_configure_add_not_gpfs_path(self):"},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        Test gpfs_store_datadir is not gpfs path"},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        store \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e71fbab5","line":101,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          self.store.configure_add)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_configure_add_not_gpfs_path(self):"},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        Test gpfs_store_datadir is not gpfs path"},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        store \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_26b3630b","line":101,"in_reply_to":"baada198_e71fbab5","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                          self.store.configure_add)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_configure_add_with_none_gpfs_stor_images_dir(self):"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        Tests BadStoreConfiguration exception is raised if empty directory"},{"line_number":116,"context_line":"        path is specified in gpfs_store_datadir."},{"line_number":117,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2779b2fc","line":114,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                          self.store.configure_add)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def test_configure_add_with_none_gpfs_stor_images_dir(self):"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        Tests BadStoreConfiguration exception is raised if empty directory"},{"line_number":116,"context_line":"        path is specified in gpfs_store_datadir."},{"line_number":117,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_46b697fa","line":114,"in_reply_to":"baada198_2779b2fc","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                          self.store.configure_add)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_configure_add_with_readonly_datadir_path(self):"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        Tests BadStoreConfiguration exception is raised if directory"},{"line_number":125,"context_line":"        path specified in gpfs_store_datadirs is readonly."},{"line_number":126,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_477ce6eb","line":123,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                          self.store.configure_add)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_configure_add_with_readonly_datadir_path(self):"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        Tests BadStoreConfiguration exception is raised if directory"},{"line_number":125,"context_line":"        path specified in gpfs_store_datadirs is readonly."},{"line_number":126,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_66cc7b8b","line":123,"in_reply_to":"baada198_477ce6eb","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self.assertEqual(expected_num_chunks, num_chunks)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def test_get_non_existing(self):"},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        Test that trying to retrieve a file that doesn\u0027t exist"},{"line_number":167,"context_line":"        raises an error"},{"line_number":168,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e776da05","line":165,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self.assertEqual(expected_num_chunks, num_chunks)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def test_get_non_existing(self):"},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        Test that trying to retrieve a file that doesn\u0027t exist"},{"line_number":167,"context_line":"        raises an error"},{"line_number":168,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_86c7cf64","line":165,"in_reply_to":"baada198_e776da05","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        self.assertEqual(expected_file_size, new_image_file_size)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_add_with_storage_full(self):"},{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        Test StorageFull exception is raised if no filesystem directory"},{"line_number":222,"context_line":"        is found that can store an image."},{"line_number":223,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_0772ee10","line":220,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        self.assertEqual(expected_file_size, new_image_file_size)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def test_add_with_storage_full(self):"},{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        Test StorageFull exception is raised if no filesystem directory"},{"line_number":222,"context_line":"        is found that can store an image."},{"line_number":223,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a6c69366","line":220,"in_reply_to":"baada198_0772ee10","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                          expected_image_id, image_file, expected_file_size)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_add_already_existing(self):"},{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        Tests that adding an image with an existing identifier"},{"line_number":242,"context_line":"        raises an appropriate exception"},{"line_number":243,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_675aca84","line":240,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                          expected_image_id, image_file, expected_file_size)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_add_already_existing(self):"},{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        Tests that adding an image with an existing identifier"},{"line_number":242,"context_line":"        raises an appropriate exception"},{"line_number":243,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c6c1c74f","line":240,"in_reply_to":"baada198_675aca84","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.assertFalse(os.path.exists(path))"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def test_add_storage_full(self):"},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":"        Tests that adding an image without enough space on disk"},{"line_number":278,"context_line":"        raises an appropriate exception"},{"line_number":279,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a753026b","line":276,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self.assertFalse(os.path.exists(path))"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def test_add_storage_full(self):"},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":"        Tests that adding an image without enough space on disk"},{"line_number":278,"context_line":"        raises an appropriate exception"},{"line_number":279,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c698e777","line":276,"in_reply_to":"baada198_a753026b","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        self._do_test_add_write_failure(errno.ENOSPC, exception.StorageFull)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_add_file_too_big(self):"},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        Tests that adding an excessively large image file"},{"line_number":285,"context_line":"        raises an appropriate exception"},{"line_number":286,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_07490eb7","line":283,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        self._do_test_add_write_failure(errno.ENOSPC, exception.StorageFull)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_add_file_too_big(self):"},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        Tests that adding an excessively large image file"},{"line_number":285,"context_line":"        raises an appropriate exception"},{"line_number":286,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e686cb15","line":283,"in_reply_to":"baada198_07490eb7","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self._do_test_add_write_failure(errno.EFBIG, exception.StorageFull)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_add_storage_write_denied(self):"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        Tests that adding an image with insufficient filestore permissions"},{"line_number":292,"context_line":"        raises an appropriate exception"},{"line_number":293,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_27c7f213","line":290,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self._do_test_add_write_failure(errno.EFBIG, exception.StorageFull)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_add_storage_write_denied(self):"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        Tests that adding an image with insufficient filestore permissions"},{"line_number":292,"context_line":"        raises an appropriate exception"},{"line_number":293,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_068adf19","line":290,"in_reply_to":"baada198_27c7f213","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                        exception.StorageWriteDenied)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test_add_other_failure(self):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Tests that a non-space-related IOError does not raise a"},{"line_number":300,"context_line":"        StorageFull exception."},{"line_number":301,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_47ca261b","line":298,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        self._do_test_add_write_failure(errno.ENOTDIR, IOError)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def test_add_cleanup_on_read_failure(self):"},{"line_number":305,"context_line":"        \"\"\""},{"line_number":306,"context_line":"        Tests the partial image file is cleaned up after a read"},{"line_number":307,"context_line":"        failure."},{"line_number":308,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87d43ebe","line":305,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        self._do_test_add_write_failure(errno.ENOTDIR, IOError)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def test_add_cleanup_on_read_failure(self):"},{"line_number":305,"context_line":"        \"\"\""},{"line_number":306,"context_line":"        Tests the partial image file is cleaned up after a read"},{"line_number":307,"context_line":"        failure."},{"line_number":308,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2681a3fb","line":305,"in_reply_to":"baada198_87d43ebe","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.assertFalse(os.path.exists(path))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def test_delete(self):"},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        Test we can delete an existing image in the filesystem store"},{"line_number":329,"context_line":"        \"\"\""},{"line_number":330,"context_line":"        # First add an image"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e7e41aae","line":327,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.assertFalse(os.path.exists(path))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def test_delete(self):"},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        Test we can delete an existing image in the filesystem store"},{"line_number":329,"context_line":"        \"\"\""},{"line_number":330,"context_line":"        # First add an image"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_4684d70a","line":327,"in_reply_to":"baada198_e7e41aae","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_delete_readonly(self):"},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        Test we can delete a read-only file as a tombstone."},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        image_id \u003d str(uuid.uuid4())"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_27ee128c","line":348,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        self.assertRaises(exception.NotFound, self.store.get, loc)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_delete_readonly(self):"},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        Test we can delete a read-only file as a tombstone."},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        image_id \u003d str(uuid.uuid4())"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_667abb26","line":348,"in_reply_to":"baada198_27ee128c","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"0fb2b60b0af129420c0472c8fb451fcba0a15309","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.assertFalse(os.path.exists(image_path + \u0027.ts\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_delete_non_existing(self):"},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        Test that trying to delete a file that doesn\u0027t exist"},{"line_number":385,"context_line":"        raises an error"},{"line_number":386,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87eb5e77","line":383,"updated":"2014-07-10 11:02:02.000000000","message":"ditto [2]","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"82097df205b9c6b8f88abea186a8417d0c3f44dc","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.assertFalse(os.path.exists(image_path + \u0027.ts\u0027))"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_delete_non_existing(self):"},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        Test that trying to delete a file that doesn\u0027t exist"},{"line_number":385,"context_line":"        raises an error"},{"line_number":386,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_86750f35","line":383,"in_reply_to":"baada198_87eb5e77","updated":"2014-07-28 02:08:42.000000000","message":"Done","commit_id":"b0d8cb6ff20764a1958922e8309d283066de2d03"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"555a327569b7201e90c1084c76654e657f9b5c6e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        def fake_check_write_permission(self, path):"},{"line_number":58,"context_line":"            pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_get_gpfs_state\","},{"line_number":61,"context_line":"                       self.fake_gpfs_get_state_active)"},{"line_number":62,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_is_gpfs_path\","},{"line_number":63,"context_line":"                       self.fake_is_gpfs_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_55b90414","line":60,"updated":"2014-08-26 14:33:20.000000000","message":"Could you pls use mock instead of mox for gpfs store unit testing? in overall, glance are removing mox out, see https://review.openstack.org/#/c/114906/ , and other changes are working in progress.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":8037,"name":"renminmin","email":"rmm0811@gmail.com","username":"renminmin"},"change_message_id":"0f26fc5a8f3f15fd3c55133bf7ca82d229f45bc2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        def fake_check_write_permission(self, path):"},{"line_number":58,"context_line":"            pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_get_gpfs_state\","},{"line_number":61,"context_line":"                       self.fake_gpfs_get_state_active)"},{"line_number":62,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_is_gpfs_path\","},{"line_number":63,"context_line":"                       self.fake_is_gpfs_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_7a047b15","line":60,"in_reply_to":"1abeadc6_55b90414","updated":"2014-09-01 05:23:39.000000000","message":"I have used the mock.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b6faff8dbdc0ab5c434d514fb71f8f41ba1af08d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        def fake_check_write_permission(self, path):"},{"line_number":58,"context_line":"            pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_get_gpfs_state\","},{"line_number":61,"context_line":"                       self.fake_gpfs_get_state_active)"},{"line_number":62,"context_line":"        self.stubs.Set(gpfs_store.Store, \"_is_gpfs_path\","},{"line_number":63,"context_line":"                       self.fake_is_gpfs_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_8ddb67ec","line":60,"in_reply_to":"fa98f980_7a047b15","updated":"2014-09-02 06:14:57.000000000","message":"Aha, I mean use mock instead of mox _fully_ in unit testing.","commit_id":"f5ac4b81f07b32dd156a5c43fd49756601cc6973"}]}
