)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dce8a711fd4848ceb5af471229ad691195f882ed","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds the metadata type validation, and the API will return"},{"line_number":14,"context_line":"a HTTP400(Bad Request) response. In addition, this patch removes log.WARNs"},{"line_number":15,"context_line":"of bad incomming requests because they are just client-side problems not"},{"line_number":16,"context_line":"server-side."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: 1238344"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F%2F87E%3D","line":15,"updated":"2013-10-24 17:34:05.000000000","message":"\"incoming\" is misspelled.","commit_id":"b0679c1b0bbee9955e5856718c80a9c13ada295c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dce8a711fd4848ceb5af471229ad691195f882ed","unresolved":false,"context_lines":[{"line_number":16,"context_line":"server-side."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: 1238344"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I8f1d5debf74891e67b17f8128cc0eb0ab7f5c3f5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F%2F864%3D","line":19,"updated":"2013-10-24 17:34:05.000000000","message":"This blank line should not be here.","commit_id":"b0679c1b0bbee9955e5856718c80a9c13ada295c"}],"nova/compute/api.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"e7a6dcaa8eafc46c56f2876374cb7b9cc2dee266","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        if not metadata:"},{"line_number":391,"context_line":"            metadata \u003d {}"},{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d _(\"Metadata is not a dict\")"},{"line_number":394,"context_line":"            LOG.warn(msg)"},{"line_number":395,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":396,"context_line":"        num_metadata \u003d len(metadata)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FsiU%3D","line":393,"updated":"2013-10-11 03:04:39.000000000","message":"how about \"Metadata type should be dict, but %(type)s is given\"?","commit_id":"9324822b1e04ceadbba9f48e940684886f0cb2cd"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"590d8191da8685afbb9760b5793019630dabb454","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        if not metadata:"},{"line_number":391,"context_line":"            metadata \u003d {}"},{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d _(\"Metadata is not a dict\")"},{"line_number":394,"context_line":"            LOG.warn(msg)"},{"line_number":395,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":396,"context_line":"        num_metadata \u003d len(metadata)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fsew%3D","line":393,"in_reply_to":"AAAATH%2F%2FsiU%3D","updated":"2013-10-11 03:16:22.000000000","message":"nice idea, it would be user-friendly. will change here.","commit_id":"9324822b1e04ceadbba9f48e940684886f0cb2cd"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"e7a6dcaa8eafc46c56f2876374cb7b9cc2dee266","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            metadata \u003d {}"},{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d _(\"Metadata is not a dict\")"},{"line_number":394,"context_line":"            LOG.warn(msg)"},{"line_number":395,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":396,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":397,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FshM%3D","line":394,"updated":"2013-10-11 03:04:39.000000000","message":"since the exception raised here, LOG.error would be more appropriate.","commit_id":"9324822b1e04ceadbba9f48e940684886f0cb2cd"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"657c3c7bdd0067a3af595e0a940cf1204969c849","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            metadata \u003d {}"},{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d _(\"Metadata is not a dict\")"},{"line_number":394,"context_line":"            LOG.warn(msg)"},{"line_number":395,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":396,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":397,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fscg%3D","line":394,"in_reply_to":"AAAATH%2F%2FseE%3D","updated":"2013-10-11 03:30:58.000000000","message":"I meaned\n\n We don\u0027t want to been asked a question from OpenStack operators only if some clients send invalid requests.\n That is not server-side problem.","commit_id":"9324822b1e04ceadbba9f48e940684886f0cb2cd"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"590d8191da8685afbb9760b5793019630dabb454","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            metadata \u003d {}"},{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d _(\"Metadata is not a dict\")"},{"line_number":394,"context_line":"            LOG.warn(msg)"},{"line_number":395,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":396,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":397,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FseE%3D","line":394,"in_reply_to":"AAAATH%2F%2FshM%3D","updated":"2013-10-11 03:16:22.000000000","message":"The similar validations after line 410 output LOG.warn().\nand this is due to invalid client request, not server-side problem.\n\nso LOG.error is not right, I guess.","commit_id":"9324822b1e04ceadbba9f48e940684886f0cb2cd"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"a49aa378fabe1b9622a64d43f04d21bd64946b61","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d (_(\"Metadata type should be dict, but %s is given\") %"},{"line_number":394,"context_line":"                   type(metadata))"},{"line_number":395,"context_line":"            LOG.warn(msg)"},{"line_number":396,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":397,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":398,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FptU%3D","line":395,"updated":"2013-10-11 17:46:14.000000000","message":"Not a big fan of logging WARNINGs, ERRORs for bad incoming API requests. I think raising the exception below is sufficient.","commit_id":"060f8f0a3fcca79e13ab9a19283f6193a22830b4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4678ffe7efd102e827e3b53360f7cf1eba7dde28","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d (_(\"Metadata type should be dict, but %s is given\") %"},{"line_number":394,"context_line":"                   type(metadata))"},{"line_number":395,"context_line":"            LOG.warn(msg)"},{"line_number":396,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":397,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":398,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FmpU%3D","line":395,"in_reply_to":"AAAATH%2F%2FpbE%3D","updated":"2013-10-13 12:40:59.000000000","message":"+1, Thanks for pointing it.\nand  we should remove the following LOG.warn()s with the same reason.","commit_id":"060f8f0a3fcca79e13ab9a19283f6193a22830b4"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"8c160322793a12e69135bb3934d1b492a87371f2","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":393,"context_line":"            msg \u003d (_(\"Metadata type should be dict, but %s is given\") %"},{"line_number":394,"context_line":"                   type(metadata))"},{"line_number":395,"context_line":"            LOG.warn(msg)"},{"line_number":396,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":397,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":398,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FpbE%3D","line":395,"in_reply_to":"AAAATH%2F%2FptU%3D","updated":"2013-10-11 19:11:17.000000000","message":"+1","commit_id":"060f8f0a3fcca79e13ab9a19283f6193a22830b4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8f2b5557ed2de9f5d0d626b78a7d2ede1565ac3e","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        for k, v in metadata.iteritems():"},{"line_number":405,"context_line":"            if len(k) \u003d\u003d 0:"},{"line_number":406,"context_line":"                msg \u003d _(\"Metadata property key blank\")"},{"line_number":407,"context_line":"                LOG.warn(msg)"},{"line_number":408,"context_line":"                raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":409,"context_line":"            if len(k) \u003e 255:"},{"line_number":410,"context_line":"                msg \u003d _(\"Metadata property key greater than 255 characters\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2Ffws%3D","side":"PARENT","line":407,"updated":"2013-10-15 12:53:47.000000000","message":"why did you remove these warnings?","commit_id":"29aa77387e1c0ba9077fdfa4358c534f1da400e8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5a366facbf2d671a9448422f00fffdcae2c388c8","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        for k, v in metadata.iteritems():"},{"line_number":405,"context_line":"            if len(k) \u003d\u003d 0:"},{"line_number":406,"context_line":"                msg \u003d _(\"Metadata property key blank\")"},{"line_number":407,"context_line":"                LOG.warn(msg)"},{"line_number":408,"context_line":"                raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":409,"context_line":"            if len(k) \u003e 255:"},{"line_number":410,"context_line":"                msg \u003d _(\"Metadata property key greater than 255 characters\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2Ffbo%3D","side":"PARENT","line":407,"in_reply_to":"AAAATH%2F%2Ffws%3D","updated":"2013-10-15 13:57:58.000000000","message":"Through the reviews for patch set 4, Dan and Matt said the logs of WARN/ERROR is not good if bad API requests are incoming.\nI agree with the comment, and remove the other log.WARNs with the same reason.","commit_id":"29aa77387e1c0ba9077fdfa4358c534f1da400e8"},{"author":{"_account_id":360,"name":"Dan Prince","email":"dprince@redhat.com","username":"dan-prince"},"change_message_id":"0882788f107a62dd1711293582fc557330d1eb93","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            metadata \u003d {}"},{"line_number":390,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":391,"context_line":"            msg \u003d (_(\"Metadata type should be dict, but %s is given\") %"},{"line_number":392,"context_line":"                   type(metadata))"},{"line_number":393,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":394,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":395,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2Ff8s%3D","line":392,"updated":"2013-10-15 11:47:12.000000000","message":"This is going to add the \"\u003ctype\u003e\" class string to the error message. Probably fine but it might be better to just drop that and have \u0027Metadata type should be a dict\u0027.","commit_id":"7df23d6ca303c7b65e50d7701ade6cf12235f732"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5a366facbf2d671a9448422f00fffdcae2c388c8","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            metadata \u003d {}"},{"line_number":390,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":391,"context_line":"            msg \u003d (_(\"Metadata type should be dict, but %s is given\") %"},{"line_number":392,"context_line":"                   type(metadata))"},{"line_number":393,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":394,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":395,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FfbY%3D","line":392,"in_reply_to":"AAAATH%2F%2Ff8s%3D","updated":"2013-10-15 13:57:58.000000000","message":"ok, will remove it.","commit_id":"7df23d6ca303c7b65e50d7701ade6cf12235f732"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b1979d02fcd7d8ab897804e0fce4e58643c5b2ff","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            metadata \u003d {}"},{"line_number":390,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":391,"context_line":"            msg \u003d (_(\"Metadata type should be dict.\"))"},{"line_number":392,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":393,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":394,"context_line":"        try:"},{"line_number":395,"context_line":"            QUOTAS.limit_check(context, metadata_items\u003dnum_metadata)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATH%2F%2FKVA%3D","line":392,"updated":"2013-10-22 09:01:29.000000000","message":"looks like we have same checking for rebuild https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/plugins/v3/servers.py#L1173\n\nshould we delete it?","commit_id":"d40f5e0634ac3f97f9ba291ef443bdd1828aa344"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b1cbf683126b3179c852d4571ed60a14ce5b7145","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            metadata \u003d {}"},{"line_number":390,"context_line":"        if not isinstance(metadata, dict):"},{"line_number":391,"context_line":"            msg \u003d (_(\"Metadata type should be dict.\"))"},{"line_number":392,"context_line":"            raise exception.InvalidMetadata(reason\u003dmsg)"},{"line_number":393,"context_line":"        num_metadata \u003d len(metadata)"},{"line_number":394,"context_line":"        try:"},{"line_number":395,"context_line":"            QUOTAS.limit_check(context, metadata_items\u003dnum_metadata)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATH%2F%2FKOw%3D","line":392,"in_reply_to":"AAAATH%2F%2FKVA%3D","updated":"2013-10-22 09:40:10.000000000","message":"Thanks for pointing it out. I feel it is better to remove it for code clean-up.","commit_id":"d40f5e0634ac3f97f9ba291ef443bdd1828aa344"}],"nova/tests/api/openstack/compute/plugins/v3/test_servers.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"bba73b3da7abcc55e3b170688a6b111b2e556d00","unresolved":false,"context_lines":[{"line_number":2143,"context_line":"    def test_create_instance_metadata_not_dict(self):"},{"line_number":2144,"context_line":"        self.flags(quota_metadata_items\u003d1)"},{"line_number":2145,"context_line":"        image_href \u003d \u0027http://localhost/v2/images/%s\u0027 % self.image_uuid"},{"line_number":2146,"context_line":"        self.body[\u0027server\u0027][\u0027imageRef\u0027] \u003d image_href"},{"line_number":2147,"context_line":"        self.body[\u0027server\u0027][\u0027metadata\u0027] \u003d \u0027string\u0027"},{"line_number":2148,"context_line":"        self.req.body \u003d jsonutils.dumps(self.body)"},{"line_number":2149,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FrA4%3D","line":2146,"updated":"2013-10-11 13:02:24.000000000","message":"it should be \"image_ref\"","commit_id":"0c5ce8fa4e16efeb9999b1c5b603908b994d0c36"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b1a7b9a209a34662c6a3749eb74bc56705c45826","unresolved":false,"context_lines":[{"line_number":2143,"context_line":"    def test_create_instance_metadata_not_dict(self):"},{"line_number":2144,"context_line":"        self.flags(quota_metadata_items\u003d1)"},{"line_number":2145,"context_line":"        image_href \u003d \u0027http://localhost/v2/images/%s\u0027 % self.image_uuid"},{"line_number":2146,"context_line":"        self.body[\u0027server\u0027][\u0027imageRef\u0027] \u003d image_href"},{"line_number":2147,"context_line":"        self.body[\u0027server\u0027][\u0027metadata\u0027] \u003d \u0027string\u0027"},{"line_number":2148,"context_line":"        self.req.body \u003d jsonutils.dumps(self.body)"},{"line_number":2149,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqjQ%3D","line":2146,"in_reply_to":"AAAATH%2F%2FrA4%3D","updated":"2013-10-11 14:44:43.000000000","message":"oops, right. I should notice it.","commit_id":"0c5ce8fa4e16efeb9999b1c5b603908b994d0c36"}]}
