)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e677b9ade1ef4edee0cbc228be811cce92f9bc82","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Cell Scheduler support for hypervisor versions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding the hypervisor version to cell capacities"},{"line_number":10,"context_line":"Creating a filter in cell scheduler to filter cells based on prominent hypervisor version"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements blueprint xen-support-for-hypervisor-versions"},{"line_number":13,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAQn%2F%2F81Q%3D","line":10,"updated":"2013-07-18 16:17:45.000000000","message":"We advise to word-wrap commit messages at 72 columns.  I wouldn\u0027t bother mentioning this if this were 75 or 79 columns, but it\u0027s 89 columns, which is just a little much…","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"7c0436e53e43918d291c9fc20f6e5188ac2c0ecd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Cell Scheduler support for hypervisor versions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding the hypervisor version to cell capacities"},{"line_number":10,"context_line":"Creating a filter in cell scheduler to filter cells based on prominent hypervisor version"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially Implements blueprint xen-support-for-hypervisor-versions"},{"line_number":13,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAQn%2F%2F6ik%3D","line":10,"in_reply_to":"AAAAQn%2F%2F81Q%3D","updated":"2013-07-19 09:23:28.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0561692cc609f872915b0305bb470d29ad534b54","unresolved":false,"context_lines":[{"line_number":11,"context_line":"prominent hypervisor version"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially Implements blueprint xen-support-for-hypervisor-versions"},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ied716a5964fd86a919ffb8bac99100afb770896e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAQn%2F%2F5i0%3D","line":14,"updated":"2013-07-19 15:53:16.000000000","message":"Since you mention adding stuff to the wiki, let me suggest that you expand this DocImpact tag into a paragraph explaining the basics of what should go in the docs…","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"b175b60597a3eda55ffba944db827aff53899ee1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"prominent hypervisor version"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially Implements blueprint xen-support-for-hypervisor-versions"},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ied716a5964fd86a919ffb8bac99100afb770896e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAQn%2F%2F13c%3D","line":14,"in_reply_to":"AAAAQn%2F%2F5i0%3D","updated":"2013-07-22 10:25:47.000000000","message":"Done","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"}],"nova/cells/filters/image_properties.py":[{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"661dcc1d252e0d09803d2d68dfcbf07defabb814","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Image properties filter."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"A scheduler hint of \u0027target_cell\u0027 with a value of a full cell name may be"},{"line_number":20,"context_line":"specified to route a build to a particular cell.  No error handling is"},{"line_number":21,"context_line":"done as there\u0027s no way to know whether the full path is a valid."},{"line_number":22,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fgec%3D","line":19,"updated":"2013-07-17 07:40:58.000000000","message":"please update the docstring.","commit_id":"4eab98a0291d24d9391b9887e832569352254d01"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0a0979ec614fad015b745f4fa6444c23cd4b53e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Image properties filter."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"A scheduler hint of \u0027target_cell\u0027 with a value of a full cell name may be"},{"line_number":20,"context_line":"specified to route a build to a particular cell.  No error handling is"},{"line_number":21,"context_line":"done as there\u0027s no way to know whether the full path is a valid."},{"line_number":22,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F908%3D","line":19,"in_reply_to":"AAAAP3%2F%2Fgec%3D","updated":"2013-07-18 10:51:31.000000000","message":"Done","commit_id":"4eab98a0291d24d9391b9887e832569352254d01"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"661dcc1d252e0d09803d2d68dfcbf07defabb814","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class ImagePropertiesFilter(filters.BaseCellFilter):"},{"line_number":32,"context_line":"    \"\"\"Target cell filter.  Works by specifying a scheduler hint of"},{"line_number":33,"context_line":"    \u0027target_cell\u0027. The value should be the full cell path."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def filter_all(self, cells, filter_properties):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FgeY%3D","line":33,"updated":"2013-07-17 07:40:58.000000000","message":"update the docstring.","commit_id":"4eab98a0291d24d9391b9887e832569352254d01"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0a0979ec614fad015b745f4fa6444c23cd4b53e6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class ImagePropertiesFilter(filters.BaseCellFilter):"},{"line_number":32,"context_line":"    \"\"\"Target cell filter.  Works by specifying a scheduler hint of"},{"line_number":33,"context_line":"    \u0027target_cell\u0027. The value should be the full cell path."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def filter_all(self, cells, filter_properties):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F91A%3D","line":33,"in_reply_to":"AAAAP3%2F%2FgeY%3D","updated":"2013-07-18 10:51:31.000000000","message":"Done","commit_id":"4eab98a0291d24d9391b9887e832569352254d01"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e677b9ade1ef4edee0cbc228be811cce92f9bc82","unresolved":false,"context_lines":[{"line_number":25,"context_line":"cells."},{"line_number":26,"context_line":"\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from distutils import versionpredicate"},{"line_number":29,"context_line":"from nova.cells import filters"},{"line_number":30,"context_line":"from nova.openstack.common import log as logging"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F80s%3D","line":28,"updated":"2013-07-18 16:17:45.000000000","message":"distutils is a standard python import and should be separated from the project imports by a blank line.  Also, I can\u0027t find any documentation for the versionpredicate module, and I don\u0027t see it used anywhere else in nova; what versions of Python is it present in?  Is it a public interface or an internal interface?  If it is internal, I would be nervous about relying on it…","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0ab2ee1cf51552de073014bf0eea268e62667796","unresolved":false,"context_lines":[{"line_number":25,"context_line":"cells."},{"line_number":26,"context_line":"\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from distutils import versionpredicate"},{"line_number":29,"context_line":"from nova.cells import filters"},{"line_number":30,"context_line":"from nova.openstack.common import log as logging"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F13A%3D","line":28,"in_reply_to":"AAAAQn%2F%2F51g%3D","updated":"2013-07-22 10:25:38.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2649b6c50324b8a216f58c39ae1e24b82d9653c2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"cells."},{"line_number":26,"context_line":"\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from distutils import versionpredicate"},{"line_number":29,"context_line":"from nova.cells import filters"},{"line_number":30,"context_line":"from nova.openstack.common import log as logging"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F51g%3D","line":28,"in_reply_to":"AAAAQn%2F%2F6gU%3D","updated":"2013-07-19 14:19:10.000000000","message":"I think it\u0027s safe to rely on this being available.  Now as to whether or not it\u0027s considered public or private is hard to ascertain given the poor state of distutils docs.  But there\u0027s nothing to indicate it\u0027s private.\n\nBut, this still needs to be separated from the other imports by a blank line.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"7c0436e53e43918d291c9fc20f6e5188ac2c0ecd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"cells."},{"line_number":26,"context_line":"\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from distutils import versionpredicate"},{"line_number":29,"context_line":"from nova.cells import filters"},{"line_number":30,"context_line":"from nova.openstack.common import log as logging"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F6gU%3D","line":28,"in_reply_to":"AAAAQn%2F%2F80s%3D","updated":"2013-07-19 09:23:28.000000000","message":"I can find this module from python 2.6.\nI think we can rely on distutils library - http://www.python.org/files/sigs/sc_submission.html\n\nBut anyways this import will be removed in the next commit where the versionpredicate logic is moved to the utils.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e677b9ade1ef4edee0cbc228be811cce92f9bc82","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ImagePropertiesFilter(filters.BaseCellFilter):"},{"line_number":36,"context_line":"    \"\"\"Image properties filter. Works by specifying the hypervisor requires in"},{"line_number":37,"context_line":"    the image metadata and the hypervisor version capability in cells."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F8zk%3D","line":36,"updated":"2013-07-18 16:17:45.000000000","message":"s/requires/required/ to make the tenses work (femtonit).  I would also suggest a similar change for the property name…","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"7c0436e53e43918d291c9fc20f6e5188ac2c0ecd","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ImagePropertiesFilter(filters.BaseCellFilter):"},{"line_number":36,"context_line":"    \"\"\"Image properties filter. Works by specifying the hypervisor requires in"},{"line_number":37,"context_line":"    the image metadata and the hypervisor version capability in cells."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F6fo%3D","line":36,"in_reply_to":"AAAAQn%2F%2F8zk%3D","updated":"2013-07-19 09:23:28.000000000","message":"Thanks, I changed the comment. I think the metadata key is fine, it\u0027s added as a part of https://review.openstack.org/#/c/36073/\n\nLet me know if it has to change","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2649b6c50324b8a216f58c39ae1e24b82d9653c2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        request_spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":45,"context_line":"        image_properties \u003d request_spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":46,"context_line":"        hypervisor_version_requires \u003d \\"},{"line_number":47,"context_line":"                image_properties.get(\u0027hypervisor_version_requires\u0027, {})"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if hypervisor_version_requires is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F53Y%3D","line":46,"updated":"2013-07-19 14:19:10.000000000","message":"Minor nit, but please don\u0027t use continuations like this.  Split after .get( or at another spot that python allows line breaks at.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0ab2ee1cf51552de073014bf0eea268e62667796","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        request_spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":45,"context_line":"        image_properties \u003d request_spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":46,"context_line":"        hypervisor_version_requires \u003d \\"},{"line_number":47,"context_line":"                image_properties.get(\u0027hypervisor_version_requires\u0027, {})"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if hypervisor_version_requires is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F12o%3D","line":46,"in_reply_to":"AAAAQn%2F%2F53Y%3D","updated":"2013-07-22 10:25:38.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e337110a4ae5176fc8ea646c7fc1c00e2180dd20","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        filtered_cells \u003d []"},{"line_number":53,"context_line":"        for cell in cells:"},{"line_number":54,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":55,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":56,"context_line":"                                                hypervisor_version_requires):"},{"line_number":57,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F74c%3D","line":54,"updated":"2013-07-18 20:48:37.000000000","message":"I can\u0027t find where this is set.  Should this patch be dependent on another?","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0ab2ee1cf51552de073014bf0eea268e62667796","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        filtered_cells \u003d []"},{"line_number":53,"context_line":"        for cell in cells:"},{"line_number":54,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":55,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":56,"context_line":"                                                hypervisor_version_requires):"},{"line_number":57,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F12k%3D","line":54,"in_reply_to":"AAAAQn%2F%2F57o%3D","updated":"2013-07-22 10:25:38.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2649b6c50324b8a216f58c39ae1e24b82d9653c2","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        filtered_cells \u003d []"},{"line_number":53,"context_line":"        for cell in cells:"},{"line_number":54,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":55,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":56,"context_line":"                                                hypervisor_version_requires):"},{"line_number":57,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F57o%3D","line":54,"in_reply_to":"AAAAQn%2F%2F6fQ%3D","updated":"2013-07-19 14:19:10.000000000","message":"I see now.  Didn\u0027t realize that cells_capabilities was a string list of key:values.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"7c0436e53e43918d291c9fc20f6e5188ac2c0ecd","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        filtered_cells \u003d []"},{"line_number":53,"context_line":"        for cell in cells:"},{"line_number":54,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":55,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":56,"context_line":"                                                hypervisor_version_requires):"},{"line_number":57,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F6fQ%3D","line":54,"in_reply_to":"AAAAQn%2F%2F74c%3D","updated":"2013-07-19 09:23:28.000000000","message":"This has to be set in the cells configuration in nova.conf.\nWe will add this in the wiki for this feature.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e677b9ade1ef4edee0cbc228be811cce92f9bc82","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":62,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":63,"context_line":"        # Refactor this to use that after it merged"},{"line_number":64,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":65,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":66,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F8zg%3D","line":63,"updated":"2013-07-18 16:17:45.000000000","message":"What method in utils are you waiting to merge?  Does it perform version comparisons?","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0ab2ee1cf51552de073014bf0eea268e62667796","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":62,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":63,"context_line":"        # Refactor this to use that after it merged"},{"line_number":64,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":65,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":66,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F12g%3D","line":63,"in_reply_to":"AAAAQn%2F%2F538%3D","updated":"2013-07-22 10:25:38.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2649b6c50324b8a216f58c39ae1e24b82d9653c2","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":62,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":63,"context_line":"        # Refactor this to use that after it merged"},{"line_number":64,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":65,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":66,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F538%3D","line":63,"in_reply_to":"AAAAQn%2F%2F6fM%3D","updated":"2013-07-19 14:19:10.000000000","message":"There\u0027s no utility method being added there for this, it\u0027s internal to the image_props_filter.  If you want to break it out into a utility method then rebase this patch on that one and do that.  But you could also just remove this TODO and use this method.\n\nA TODO should only be used if there\u0027s a strong reason that it can\u0027t be done now, such as a blueprint that needs to be completed first.  In this case you can just make this patch dependent on that one.","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"7c0436e53e43918d291c9fc20f6e5188ac2c0ecd","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":62,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":63,"context_line":"        # Refactor this to use that after it merged"},{"line_number":64,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":65,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":66,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F6fM%3D","line":63,"in_reply_to":"AAAAQn%2F%2F8zg%3D","updated":"2013-07-19 09:23:28.000000000","message":"It\u0027s going to be added as a part of https://review.openstack.org/#/c/36073 for host_scheduling","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0561692cc609f872915b0305bb470d29ad534b54","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        filtered_cells \u003d []"},{"line_number":54,"context_line":"        for cell in cells:"},{"line_number":55,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":56,"context_line":"            version \u003d version and str(version.pop())"},{"line_number":57,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":58,"context_line":"                                                hypervisor_version_requires):"},{"line_number":59,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F5iY%3D","line":56,"updated":"2013-07-19 15:53:16.000000000","message":"What processing are you doing with this line?  Could you walk me through what version looks like in this code?  I was initially expecting it to be a string, but now it looks like a list…","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"b175b60597a3eda55ffba944db827aff53899ee1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        filtered_cells \u003d []"},{"line_number":54,"context_line":"        for cell in cells:"},{"line_number":55,"context_line":"            version \u003d cell.capabilities.get(\u0027prominent_hypervisor_version\u0027)"},{"line_number":56,"context_line":"            version \u003d version and str(version.pop())"},{"line_number":57,"context_line":"            if version is None or self._matches_version(version,"},{"line_number":58,"context_line":"                                                hypervisor_version_requires):"},{"line_number":59,"context_line":"                filtered_cells.append(cell)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F2fo%3D","line":56,"in_reply_to":"AAAAQn%2F%2F5iY%3D","updated":"2013-07-22 10:25:47.000000000","message":"When we add something in the nova.conf, it\u0027s loaded as an array of unicode strings.\n\nExample,  this entry in nova.conf,\ncapabilities\u003dhv_version\u003d6.0\n\nwill result in\ncapabilities[\u0027hv_version\u0027] \u003d [u\u00276.0\u0027]","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0561692cc609f872915b0305bb470d29ad534b54","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":64,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":65,"context_line":"        # Refactor this to use that after it merged"},{"line_number":66,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":67,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":68,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F5iU%3D","line":65,"updated":"2013-07-19 15:53:16.000000000","message":"I\u0027m with Andrew here, I think you should make this patch dependent on that one; that way, we don\u0027t have to worry at all about versionpredicate…","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"b175b60597a3eda55ffba944db827aff53899ee1","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _matches_version(self, version, version_requires):"},{"line_number":64,"context_line":"        # TODO(kaushikc): There is a method in utils waited to be merged."},{"line_number":65,"context_line":"        # Refactor this to use that after it merged"},{"line_number":66,"context_line":"        predicate \u003d versionpredicate.VersionPredicate("},{"line_number":67,"context_line":"                             \u0027prop (%s)\u0027 % version_requires)"},{"line_number":68,"context_line":"        return predicate.satisfied_by(version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F2fs%3D","line":65,"in_reply_to":"AAAAQn%2F%2F5iU%3D","updated":"2013-07-22 10:25:47.000000000","message":"As Alaski suggested, I\u0027m going to remove the TODO and go ahead by using this method. versionpredicate can be used here.","commit_id":"aa1071ce2cb24655eaea7a11e2fe90a3fffef248"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bd33aa4372e1c0bec582211635a7f2656152daf4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        request_spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":47,"context_line":"        image_properties \u003d request_spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":48,"context_line":"        hypervisor_version_requires \u003d image_properties.get("},{"line_number":49,"context_line":"            \u0027hypervisor_version_requires\u0027, {})"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if hypervisor_version_requires is None:"},{"line_number":52,"context_line":"            return cells"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F0XU%3D","line":49,"updated":"2013-07-22 20:31:56.000000000","message":"It looks like you don\u0027t want {} returned by get() if there\u0027s no \u0027hypervisor_version_requires\u0027.  It seems to work because the string interpolation accepts it below, but you really want the check on line 51 to fail.","commit_id":"314354b6e67c207389e7141defe59df8507879ac"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c739f0574b52d29388488c36460fde4e36d1fd33","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        request_spec \u003d filter_properties.get(\u0027request_spec\u0027, {})"},{"line_number":47,"context_line":"        image_properties \u003d request_spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":48,"context_line":"        hypervisor_version_requires \u003d image_properties.get("},{"line_number":49,"context_line":"            \u0027hypervisor_version_requires\u0027, {})"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if hypervisor_version_requires is None:"},{"line_number":52,"context_line":"            return cells"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2FyR0%3D","line":49,"updated":"2013-07-23 09:04:53.000000000","message":"Agree with Laski, this should be None, not {}, so you hit the early exit.","commit_id":"bd84ca07ebcd7bc96c6eebe593e3491f3aed2873"}],"nova/tests/cells/test_cells_filters.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2649b6c50324b8a216f58c39ae1e24b82d9653c2","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(self.cells,"},{"line_number":78,"context_line":"                         self._filter_cells(self.cells, self.filter_props))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_missing_hypervisor_verison_in_cells(self):"},{"line_number":81,"context_line":"        image \u003d {\u0027properties\u0027: {\u0027hypervisor_version_requires\u0027: \u0027\u003e6.2.1\u0027}}"},{"line_number":82,"context_line":"        self.filter_props[\u0027request_spec\u0027] \u003d {\u0027image\u0027: image}"},{"line_number":83,"context_line":"        self.assertEqual(self.cells,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F52o%3D","line":80,"updated":"2013-07-19 14:19:10.000000000","message":"s/verison/version/","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":6992,"name":"Kaushik Chandrashekar","email":"kaushik.chandrashekar@rackspace.com","username":"kaushikc"},"change_message_id":"0ab2ee1cf51552de073014bf0eea268e62667796","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(self.cells,"},{"line_number":78,"context_line":"                         self._filter_cells(self.cells, self.filter_props))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_missing_hypervisor_verison_in_cells(self):"},{"line_number":81,"context_line":"        image \u003d {\u0027properties\u0027: {\u0027hypervisor_version_requires\u0027: \u0027\u003e6.2.1\u0027}}"},{"line_number":82,"context_line":"        self.filter_props[\u0027request_spec\u0027] \u003d {\u0027image\u0027: image}"},{"line_number":83,"context_line":"        self.assertEqual(self.cells,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2F12Y%3D","line":80,"in_reply_to":"AAAAQn%2F%2F52o%3D","updated":"2013-07-22 10:25:38.000000000","message":"Done","commit_id":"fb166564fabf0d3770d23374f83f6ad2ba9a78e3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c739f0574b52d29388488c36460fde4e36d1fd33","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_missing_hypervisor_version_requires(self):"},{"line_number":76,"context_line":"        self.filter_props[\u0027request_spec\u0027] \u003d {\u0027image\u0027: {\u0027properties\u0027: {}}}"},{"line_number":77,"context_line":"        self.assertEqual(self.cells,"},{"line_number":78,"context_line":"                         self._filter_cells(self.cells, self.filter_props))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_missing_hypervisor_version_in_cells(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2FyRY%3D","line":77,"updated":"2013-07-23 09:04:53.000000000","message":"You could mock out a method to confirm it is taking the fast exit route. Its probably quite important from a performance perspective.","commit_id":"bd84ca07ebcd7bc96c6eebe593e3491f3aed2873"}]}
