)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"6705324ed0a0014efbed612522e630c5a38d4701","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-01-02 22:48:15 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update solidfire driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds support for clone volumes and set QoS use volumt type / extra_specs."},{"line_number":10,"context_line":"Also includes some minor cleanup and some haredning for known pre-release"},{"line_number":11,"context_line":"XDB issue in SolidFire Cluster API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAM3%2F%2Fxg0%3D","line":8,"updated":"2013-01-06 04:39:59.000000000","message":"volume*","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"6705324ed0a0014efbed612522e630c5a38d4701","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update solidfire driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds support for clone volumes and set QoS use volumt type / extra_specs."},{"line_number":10,"context_line":"Also includes some minor cleanup and some haredning for known pre-release"},{"line_number":11,"context_line":"XDB issue in SolidFire Cluster API."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAM3%2F%2FxhE%3D","line":9,"updated":"2013-01-06 04:39:59.000000000","message":"hardening*","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"}],"cinder/volume/drivers/solidfire.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"473fe3121381ffe8c9032628fdd21cde2334be45","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        For now, we\u0027re just using very basic settings, QOS is"},{"line_number":392,"context_line":"        turned off, 512 byte emulation is off etc.  Will be"},{"line_number":393,"context_line":"        looking at extensions for these things later, or"},{"line_number":394,"context_line":"        this module can be hacked to suit needs."},{"line_number":395,"context_line":"        \"\"\""},{"line_number":396,"context_line":"        slice_count \u003d 1"},{"line_number":397,"context_line":"        attributes \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F1n4%3D","line":394,"updated":"2013-01-02 21:45:35.000000000","message":"Are the comments here about QOS being off still valid?   It looks like you are adding QOS support in this change?","commit_id":"e802839ff08c1dde9cab72a1d24839752c337a32"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"6c7b854cb561c69605846edd01e5bd10dba1f184","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        For now, we\u0027re just using very basic settings, QOS is"},{"line_number":392,"context_line":"        turned off, 512 byte emulation is off etc.  Will be"},{"line_number":393,"context_line":"        looking at extensions for these things later, or"},{"line_number":394,"context_line":"        this module can be hacked to suit needs."},{"line_number":395,"context_line":"        \"\"\""},{"line_number":396,"context_line":"        slice_count \u003d 1"},{"line_number":397,"context_line":"        attributes \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F1mE%3D","line":394,"in_reply_to":"AAAAM3%2F%2F1n4%3D","updated":"2013-01-02 21:53:54.000000000","message":"No actually QoS support was there before BUT, it wasn\u0027t read in via the volume-type/Extra-specs (it was via volume metadata only).\n\nThe dict\u0027s you see below are actually just \"extra\" metadata storage on the SF cluster, as opposed to settings for QoS.  So we have this capability to add and for that matter query on attributes which are completely arbitrary.\n\nThey\u0027ve proved somewhat handy for doing buld operations and other *special* types of operations.","commit_id":"e802839ff08c1dde9cab72a1d24839752c337a32"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"94d520b30a9bcae977d643d6b8e51961aa38f3fa","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            sfaccount \u003d data[\u0027result\u0027][\u0027account\u0027]"},{"line_number":155,"context_line":"        return sfaccount"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def _get_sf_account_name(self, project_id):"},{"line_number":158,"context_line":"        \"\"\"Build the SolidFire account name to use.\"\"\""},{"line_number":159,"context_line":"        return (\u0027%s-%s\u0027 % (socket.gethostname(), project_id))"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FwMg%3D","line":157,"updated":"2013-01-07 17:08:37.000000000","message":"If project_id is equivalent to cinder_project_id, can you make these parameter names the same?","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            sfaccount \u003d data[\u0027result\u0027][\u0027account\u0027]"},{"line_number":155,"context_line":"        return sfaccount"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def _get_sf_account_name(self, project_id):"},{"line_number":158,"context_line":"        \"\"\"Build the SolidFire account name to use.\"\"\""},{"line_number":159,"context_line":"        return (\u0027%s-%s\u0027 % (socket.gethostname(), project_id))"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FvrE%3D","line":157,"in_reply_to":"AAAAM3%2F%2FwMg%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"cc912d67d74abe0b43c160496b727d83ae5baa7d","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0y0%3D","line":261,"updated":"2013-01-03 16:50:37.000000000","message":"It looks like you are calling ListVolumesForAccount twice with no need (in _get_sfaccount and _get_volumes_by_sfaccount) - would it be better to re-use the result?","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"6705324ed0a0014efbed612522e630c5a38d4701","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FxhA%3D","line":261,"in_reply_to":"AAAAM3%2F%2F0v8%3D","updated":"2013-01-06 04:39:59.000000000","message":"I think avishay is saying you can do...\n\ndata \u003d self._issue_api_request(\u0027ListVolumesForAccount\u0027, params)\n\non this layer and pass data to those methods instead of doing the api request in each method.","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fvn0%3D","line":261,"in_reply_to":"AAAAM3%2F%2F0y0%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"a5445481bbf2b58e5d20d261e13784d521c6daf9","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0v8%3D","line":261,"in_reply_to":"AAAAM3%2F%2F0y0%3D","updated":"2013-01-03 17:06:04.000000000","message":"Hmm... not seeing it?  _get_sfaccount just gets the account, and _get_volumes_by_sfaccount.. well gets the volumes associated with that account?","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fvns%3D","line":261,"in_reply_to":"AAAAM3%2F%2FwKw%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fvnw%3D","line":261,"in_reply_to":"AAAAM3%2F%2FxhA%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"94d520b30a9bcae977d643d6b8e51961aa38f3fa","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if sf_volid is None:"},{"line_number":259,"context_line":"            raise exception.VolumeNotFound(volume_id\u003duuid)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volumes \u003d self._get_volumes_by_sfaccount(sfaccount[\u0027accountID\u0027])"},{"line_number":262,"context_line":"        for v in volumes:"},{"line_number":263,"context_line":"            if v[\u0027volumeID\u0027] \u003d\u003d sf_volid:"},{"line_number":264,"context_line":"                if \u0027qos\u0027 in v:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FwKw%3D","line":261,"in_reply_to":"AAAAM3%2F%2FxhA%3D","updated":"2013-01-07 17:08:37.000000000","message":"It is actually _get_sf_volume_id (rather than _get_sfaccount quoted above) and_get_volumes_by_sfaccount that both result in ListVolumesForAccount api requests.","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"cc912d67d74abe0b43c160496b727d83ae5baa7d","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        attributes \u003d {\u0027uuid\u0027: v_ref[\u0027id\u0027],"},{"line_number":269,"context_line":"                      \u0027is_clone\u0027: \u0027True\u0027,"},{"line_number":270,"context_line":"                      \u0027src_uuid\u0027: \u0027src_uuid\u0027}"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        if qos:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0yo%3D","line":269,"updated":"2013-01-03 16:50:37.000000000","message":"I should probably have put this comment on your general clone patch, but why do we care if a volume is a clone?  Shouldn\u0027t they be identical?","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"a5445481bbf2b58e5d20d261e13784d521c6daf9","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        attributes \u003d {\u0027uuid\u0027: v_ref[\u0027id\u0027],"},{"line_number":269,"context_line":"                      \u0027is_clone\u0027: \u0027True\u0027,"},{"line_number":270,"context_line":"                      \u0027src_uuid\u0027: \u0027src_uuid\u0027}"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        if qos:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0w8%3D","line":269,"in_reply_to":"AAAAM3%2F%2F0yo%3D","updated":"2013-01-03 17:06:04.000000000","message":"Well, there might be some folks that care for billing reasons or whatever, but... in this case the attributes that I\u0027m setting here is actually something internal to the SolidFire cluster, it has nothing to do with OpenStack or it\u0027s database.  I just thought it could be handy to have some hooks in the SF cluster for an admin to do some queries on certain criteria such as clones and source volumes etc.","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"cc912d67d74abe0b43c160496b727d83ae5baa7d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                  \u0027qos\u0027: qos}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        data \u003d self._issue_api_request(\u0027CloneVolume\u0027, params)"},{"line_number":281,"context_line":"        if \u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027 in data[\u0027error\u0027][\u0027name\u0027]:"},{"line_number":282,"context_line":"            retry_count \u003d 5"},{"line_number":283,"context_line":"            while (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":284,"context_line":"                   in data[\u0027error\u0027][\u0027name\u0027] and retry_count \u003e 0):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0yk%3D","line":281,"updated":"2013-01-03 16:50:37.000000000","message":"It looks like you have very similar retry code in 3 different places - might be worth factoring out","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                  \u0027qos\u0027: qos}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        data \u003d self._issue_api_request(\u0027CloneVolume\u0027, params)"},{"line_number":281,"context_line":"        if \u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027 in data[\u0027error\u0027][\u0027name\u0027]:"},{"line_number":282,"context_line":"            retry_count \u003d 5"},{"line_number":283,"context_line":"            while (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":284,"context_line":"                   in data[\u0027error\u0027][\u0027name\u0027] and retry_count \u003e 0):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FvmM%3D","line":281,"in_reply_to":"AAAAM3%2F%2F0yk%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"a5445481bbf2b58e5d20d261e13784d521c6daf9","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                  \u0027qos\u0027: qos}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        data \u003d self._issue_api_request(\u0027CloneVolume\u0027, params)"},{"line_number":281,"context_line":"        if \u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027 in data[\u0027error\u0027][\u0027name\u0027]:"},{"line_number":282,"context_line":"            retry_count \u003d 5"},{"line_number":283,"context_line":"            while (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":284,"context_line":"                   in data[\u0027error\u0027][\u0027name\u0027] and retry_count \u003e 0):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0wY%3D","line":281,"in_reply_to":"AAAAM3%2F%2F0yk%3D","updated":"2013-01-03 17:06:04.000000000","message":"yeah, I\u0027d like to have all of this moved up in to _issue_api_request, but I have different behaviors on the actual result data depending on the call and I didn\u0027t want to clutter up the api_request with that logic.  \n\nI\u0027ll take another look at it later today and look at a refactor.","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"cc912d67d74abe0b43c160496b727d83ae5baa7d","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                           \u0027uuid\u0027: uuid})"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if found_count \u003d\u003d 0:"},{"line_number":365,"context_line":"            # NOTE(jdg): We use to raise here, but there are cases"},{"line_number":366,"context_line":"            # where this might be a cleanup for a failed delete."},{"line_number":367,"context_line":"            # Until we get better states we\u0027ll just log an error"},{"line_number":368,"context_line":"            LOG.error(_(\"Volume %s, not found on SF Cluster.\"), uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F0yM%3D","line":365,"updated":"2013-01-03 16:50:37.000000000","message":"used*","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"daaa3bdb4b666cbfac734ba4696d948034a742f1","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                           \u0027uuid\u0027: uuid})"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if found_count \u003d\u003d 0:"},{"line_number":365,"context_line":"            # NOTE(jdg): We use to raise here, but there are cases"},{"line_number":366,"context_line":"            # where this might be a cleanup for a failed delete."},{"line_number":367,"context_line":"            # Until we get better states we\u0027ll just log an error"},{"line_number":368,"context_line":"            LOG.error(_(\"Volume %s, not found on SF Cluster.\"), uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Fvnk%3D","line":365,"in_reply_to":"AAAAM3%2F%2F0yM%3D","updated":"2013-01-07 22:56:44.000000000","message":"Done","commit_id":"9d74109d8e8bc1d7439b36b23f264d72bd79110b"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"7dbcdcf4c27d5a77daddf249188b06510ea998a3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cluster_admin \u003d FLAGS.san_login"},{"line_number":96,"context_line":"        cluster_password \u003d FLAGS.san_password"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # NOTE(jdg): We\u0027re wrapping a retry loop for a know XDB issue"},{"line_number":99,"context_line":"        # Shows up in very high request rates (ie create 1000 volumes)"},{"line_number":100,"context_line":"        # we have to wrap the whole sequence because the reques_id"},{"line_number":101,"context_line":"        # can\u0027t be re-used"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fu7U%3D","line":98,"updated":"2013-01-08 10:16:54.000000000","message":"If the request_id cannot be re-used, can you put the generation of the uuid above within the main while loop and avoid the recursive call below?","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"781abc00754b6f6f729da7105218113225bebf38","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        cluster_admin \u003d FLAGS.san_login"},{"line_number":96,"context_line":"        cluster_password \u003d FLAGS.san_password"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # NOTE(jdg): We\u0027re wrapping a retry loop for a know XDB issue"},{"line_number":99,"context_line":"        # Shows up in very high request rates (ie create 1000 volumes)"},{"line_number":100,"context_line":"        # we have to wrap the whole sequence because the reques_id"},{"line_number":101,"context_line":"        # can\u0027t be re-used"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FulY%3D","line":98,"in_reply_to":"AAAAM3%2F%2Fu7U%3D","updated":"2013-01-08 15:18:03.000000000","message":"copy paste error, the function should not call itself.","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"7dbcdcf4c27d5a77daddf249188b06510ea998a3","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # NOTE(jdg): We\u0027re wrapping a retry loop for a know XDB issue"},{"line_number":99,"context_line":"        # Shows up in very high request rates (ie create 1000 volumes)"},{"line_number":100,"context_line":"        # we have to wrap the whole sequence because the reques_id"},{"line_number":101,"context_line":"        # can\u0027t be re-used"},{"line_number":102,"context_line":"        retry_count \u003d 5"},{"line_number":103,"context_line":"        while retry_count \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fu%2B0%3D","line":100,"updated":"2013-01-08 10:16:54.000000000","message":"*request_id","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"781abc00754b6f6f729da7105218113225bebf38","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # NOTE(jdg): We\u0027re wrapping a retry loop for a know XDB issue"},{"line_number":99,"context_line":"        # Shows up in very high request rates (ie create 1000 volumes)"},{"line_number":100,"context_line":"        # we have to wrap the whole sequence because the reques_id"},{"line_number":101,"context_line":"        # can\u0027t be re-used"},{"line_number":102,"context_line":"        retry_count \u003d 5"},{"line_number":103,"context_line":"        while retry_count \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FulM%3D","line":100,"in_reply_to":"AAAAM3%2F%2Fu%2B0%3D","updated":"2013-01-08 15:18:03.000000000","message":"Done","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"7dbcdcf4c27d5a77daddf249188b06510ea998a3","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                  \u0027retry %s of 5\u0027) %"},{"line_number":153,"context_line":"                                 (5 - retry_count))"},{"line_number":154,"context_line":"                    time.sleep(1)"},{"line_number":155,"context_line":"                    data \u003d self._issue_api_request(\u0027CreateVolume\u0027, params)"},{"line_number":156,"context_line":"                    retry_count -\u003d 1"},{"line_number":157,"context_line":"            else:"},{"line_number":158,"context_line":"                retry_count \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fu%2Bc%3D","line":155,"updated":"2013-01-08 10:16:54.000000000","message":"I\u0027m a bit confused about what is happening here. Do you mean to do a recursive call and should it be issue_api_request(command,params) instead of for \u0027CreateVolume\u0027\nIf the retry check only applies to \u0027CreateVolume\u0027 requests (as the comments above suggest) add it is a condition to the outer if statement.\n\nCan you leave out the recursive call and inner while loop here and instead, just decrement retry_count and let the main outer while loop repeat?","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"781abc00754b6f6f729da7105218113225bebf38","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                  \u0027retry %s of 5\u0027) %"},{"line_number":153,"context_line":"                                 (5 - retry_count))"},{"line_number":154,"context_line":"                    time.sleep(1)"},{"line_number":155,"context_line":"                    data \u003d self._issue_api_request(\u0027CreateVolume\u0027, params)"},{"line_number":156,"context_line":"                    retry_count -\u003d 1"},{"line_number":157,"context_line":"            else:"},{"line_number":158,"context_line":"                retry_count \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fulo%3D","line":155,"in_reply_to":"AAAAM3%2F%2Fu%2Bc%3D","updated":"2013-01-08 15:18:03.000000000","message":"Nope, this is a copy paste error.","commit_id":"ecd9a973133c265bb5dd65f4db5c5ba1b0c5a708"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"4e76a87d8443c521dce12b0e452f0ac371a33dcb","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        host \u003d FLAGS.san_ip"},{"line_number":91,"context_line":"        # For now 443 is the only port our server accepts requests on"},{"line_number":92,"context_line":"        port \u003d 443"},{"line_number":93,"context_line":"        request_id \u003d int(uuid.uuid4())  # just generate a random number"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cluster_admin \u003d FLAGS.san_login"},{"line_number":96,"context_line":"        cluster_password \u003d FLAGS.san_password"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Ftao%3D","line":93,"updated":"2013-01-09 00:57:25.000000000","message":"Move this to be within the retry loop below? According to comment below, request_id cannot be reused.","commit_id":"b6f92c428a649910f11f66c31f3613486ef101c9"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7e882331d0b04ae279a11eb4975ef19ea312acf8","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        host \u003d FLAGS.san_ip"},{"line_number":91,"context_line":"        # For now 443 is the only port our server accepts requests on"},{"line_number":92,"context_line":"        port \u003d 443"},{"line_number":93,"context_line":"        request_id \u003d int(uuid.uuid4())  # just generate a random number"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cluster_admin \u003d FLAGS.san_login"},{"line_number":96,"context_line":"        cluster_password \u003d FLAGS.san_password"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FtX0%3D","line":93,"in_reply_to":"AAAAM3%2F%2Ftao%3D","updated":"2013-01-09 01:08:54.000000000","message":"Yup","commit_id":"b6f92c428a649910f11f66c31f3613486ef101c9"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"4e76a87d8443c521dce12b0e452f0ac371a33dcb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            LOG.debug(_(\"Results of SolidFire API call: %s\"), data)"},{"line_number":146,"context_line":"            if (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":147,"context_line":"                    in data[\u0027error\u0027][\u0027name\u0027]):"},{"line_number":148,"context_line":"                retry_count \u003d 5"},{"line_number":149,"context_line":"                while (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":150,"context_line":"                       in data[\u0027error\u0027][\u0027name\u0027] and retry_count \u003e 0):"},{"line_number":151,"context_line":"                    LOG.warning(_(\u0027Detected xDBVersionMismatch, \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FtZs%3D","line":148,"updated":"2013-01-09 00:57:25.000000000","message":"As far as I can see, an error here results in just a Log message + sleep repeated five times, without an actual retry of the http request. Suggest removing Lines 148-150 (i.e. remove the inner while loop) and keeping (and outdenting) the warning message, sleep and decrement of the retry_count:\n\nif (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027\n                   in data[\u0027error\u0027][\u0027name\u0027]):\n    LOG.warning(_(\u0027Detected xDBVersionMismatch, \u0027\n                           \u0027retry %s of 5\u0027) % (5 - retry_count))\n    time.sleep(1)\n    retry_count -\u003d 1\n\nNote also that as it stands, this will output \u0027retry 0...\u0027, \u0027retry 1...\u0027 and so on. Not sure if this is desired, but could move the decrement before the Log statement.","commit_id":"b6f92c428a649910f11f66c31f3613486ef101c9"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"7e882331d0b04ae279a11eb4975ef19ea312acf8","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            LOG.debug(_(\"Results of SolidFire API call: %s\"), data)"},{"line_number":146,"context_line":"            if (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":147,"context_line":"                    in data[\u0027error\u0027][\u0027name\u0027]):"},{"line_number":148,"context_line":"                retry_count \u003d 5"},{"line_number":149,"context_line":"                while (\u0027error\u0027 in data and \u0027xDBVersionMismatch\u0027"},{"line_number":150,"context_line":"                       in data[\u0027error\u0027][\u0027name\u0027] and retry_count \u003e 0):"},{"line_number":151,"context_line":"                    LOG.warning(_(\u0027Detected xDBVersionMismatch, \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FtX8%3D","line":148,"in_reply_to":"AAAAM3%2F%2FtZs%3D","updated":"2013-01-09 01:08:54.000000000","message":"Yup, this another copy paste issue here.  I\u0027ll get on it later.","commit_id":"b6f92c428a649910f11f66c31f3613486ef101c9"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c4fbcb5ae31d6d06785cc1d72b5deef820ac9f5d","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            data \u003d self._issue_api_request(\u0027DeleteVolume\u0027, params)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"            if \u0027result\u0027 not in data:"},{"line_number":447,"context_line":"                raise exception.SolidFireAPIDataException(data\u003ddata)"},{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            LOG.error(_(\"Volume ID %s was not found on \""},{"line_number":450,"context_line":"                        \"the SolidFire Cluster!\"), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Ftp8%3D","line":447,"updated":"2013-01-08 22:27:43.000000000","message":"We have driver specific custom exceptions in cinder/exception.py ?","commit_id":"b6f92c428a649910f11f66c31f3613486ef101c9"},{"author":{"_account_id":1605,"name":"tom-howley","email":"tom.howley@hp.com","username":"tom-howley"},"change_message_id":"9b61b7606f73a1a31a51a36e5a4f59ba0eb99dd4","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            #look for explicit settings"},{"line_number":329,"context_line":"            for i in volume.get(\u0027volume_metadata\u0027):"},{"line_number":330,"context_line":"                if i.key in self.sf_qos_keys:"},{"line_number":331,"context_line":"                    qos[i.key] \u003d int(i.value)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def _set_qos_by_volume_type(self, type_id, ctxt):"},{"line_number":334,"context_line":"        qos \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Fr4A%3D","line":331,"updated":"2013-01-09 17:01:32.000000000","message":"_set_qos_presets function doesn\u0027t return qos","commit_id":"43bf8d027512eb853454842d78a8574406aeaa43"}]}
