)]}'
{"cinder/objects/__init__.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9f63f329bd70ae6c5983f32d38dfbc09652cc000","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    __import__(\u0027cinder.objects.cgsnapshot\u0027)"},{"line_number":29,"context_line":"    __import__(\u0027cinder.objects.cluster\u0027)"},{"line_number":30,"context_line":"    __import__(\u0027cinder.objects.consistencygroup\u0027)"},{"line_number":31,"context_line":"    __import__(\u0027cinder.objects.filter_properties\u0027)"},{"line_number":32,"context_line":"    __import__(\u0027cinder.objects.qos_specs\u0027)"},{"line_number":33,"context_line":"    __import__(\u0027cinder.objects.request_spec\u0027)"},{"line_number":34,"context_line":"    __import__(\u0027cinder.objects.service\u0027)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_bcc2ec50","line":31,"updated":"2016-08-24 06:00:53.000000000","message":"Why SchedulerRetries not here? I understand it is also received via RPC.","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f9f34ab6faf86b3dcd93672bbfa0c2f0c8abf984","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    __import__(\u0027cinder.objects.cgsnapshot\u0027)"},{"line_number":29,"context_line":"    __import__(\u0027cinder.objects.cluster\u0027)"},{"line_number":30,"context_line":"    __import__(\u0027cinder.objects.consistencygroup\u0027)"},{"line_number":31,"context_line":"    __import__(\u0027cinder.objects.filter_properties\u0027)"},{"line_number":32,"context_line":"    __import__(\u0027cinder.objects.qos_specs\u0027)"},{"line_number":33,"context_line":"    __import__(\u0027cinder.objects.request_spec\u0027)"},{"line_number":34,"context_line":"    __import__(\u0027cinder.objects.service\u0027)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_858d10d5","line":31,"in_reply_to":"1ac06dbe_bcc2ec50","updated":"2016-08-24 11:00:25.000000000","message":"These are modules and SchedulerRetries object is inside cinder.objects.filter_properties, so it\u0027s actually included here. I haven\u0027t added a separated module for it, as it\u0027s a vital part of FilterProperties object.","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"}],"cinder/objects/base.py":[{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"95abfb15e82b1355291731c8afa4124e6bd60d32","unresolved":false,"context_lines":[{"line_number":102,"context_line":"OBJ_VERSIONS.add(\u00271.3\u0027, {\u0027Service\u0027: \u00271.3\u0027})"},{"line_number":103,"context_line":"OBJ_VERSIONS.add(\u00271.4\u0027, {\u0027Snapshot\u0027: \u00271.1\u0027})"},{"line_number":104,"context_line":"OBJ_VERSIONS.add(\u00271.5\u0027, {\u0027RequestSpec\u0027: \u00271.0\u0027, \u0027VolumeProperties\u0027: \u00271.0\u0027})"},{"line_number":105,"context_line":"OBJ_VERSIONS.add(\u00271.6\u0027, {\u0027RequestSpec\u0027: \u00271.1\u0027, \u0027VolumeProperties\u0027: \u00271.1\u0027,"},{"line_number":106,"context_line":"                         \u0027VolumeType\u0027: \u00271.1\u0027, \u0027VolumeTypeList\u0027: \u00271.2\u0027})"},{"line_number":107,"context_line":"OBJ_VERSIONS.add(\u00271.6\u0027, {\u0027VolumeTypeList\u0027: \u00271.3\u0027})"},{"line_number":108,"context_line":"OBJ_VERSIONS.add(\u00271.7\u0027, {\u0027FilterProperties\u0027: \u00271.0\u0027, \u0027SchedulerRetries\u0027: \u00271.0\u0027})"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"bab6814e_cad16bcf","line":107,"range":{"start_line":105,"start_character":18,"end_line":107,"end_character":24},"updated":"2016-05-25 11:29:19.000000000","message":"version bump for VolumeTypeList :) \nneed to rebase for https://review.openstack.org/#/c/253033","commit_id":"084874051623132b75578e7870796e73908417ba"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"b0c85e85a3af1d8d992c0e3641374f74dd9d843f","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_37b07043","line":469,"updated":"2016-07-28 21:17:15.000000000","message":"So I\u0027ve been trying to test this patch and I\u0027m not sure if this is a bug or I\u0027m doing things in the wrong order, because I keep hitting this exception. Here is what I\u0027ve done:\n\nI have two node devstack running, the first is running all cinder services on master with this patch applied. The second is only running c-vol, and is on the stable/mitaka branch. The first devstack is up and running, and the version cap on it is 1.10 as you\u0027ve added in the patch - when the stable/mitaka c-vol node tries to start up it gets this version cap and compares it to its own OBJ_VERSIONS. In mitaka this only goes up to 1.3, so 1.10 isn\u0027t present there, and it raises this exception and fails on startup.\n\nIs there some other way that I\u0027m supposed to be doing this? I know the point here is that the new version is supposed to  be able to play nice with stable/mitaka, so why should the stable/mitaka node be looking for the new object version number when it starts up and fail when it can\u0027t find it in its own list? I have a feeling there is a different order that I\u0027m supposed to be doing this in.","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"3ae21f89cfd8aec4b38a3ab3b954d9592c4ab5cc","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_57688487","line":469,"in_reply_to":"bacf61ea_37b07043","updated":"2016-07-28 21:21:14.000000000","message":"Is it that I need all three services running on the second node as stable/mitaka and *only* have patched c-api running on the master node? I suppose the issue here is that the nodes running the older version should already be running, as they would be in the situation where you upgrade from older to newer. This does mean that while upgrading it\u0027s impossible for services to restart it seems like, if they\u0027re remaining at the older version.","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"b68b84ace6e83b171fd948d6f317ce71f259455e","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_f799b86f","line":469,"in_reply_to":"bacf61ea_57688487","updated":"2016-07-28 21:26:54.000000000","message":"here\u0027s a log of the error at startup btw. Just looking for version 1.10 and not finding it http://paste.openstack.org/show/543446/","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"bc6716506ef02948c5edad3bc52ebb6c747b6c12","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_867b747a","line":469,"in_reply_to":"bacf61ea_98f2b304","updated":"2016-08-01 16:22:49.000000000","message":"Yep, I got it worked out and all the testing was successful.","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e3fc5d137cae80672055e054aaae6af416e91cee","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_98f2b304","line":469,"in_reply_to":"bacf61ea_d7eab4ab","updated":"2016-08-01 15:52:15.000000000","message":"Just erase your services table with all services off and restart everything starting from stable/mitaka ones. In the process we\u0027re assuming going only forward, so it\u0027s not possible to start a stable/mitaka when all other services are in newton.","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"c69e9a47c171e9f396c89029f1f884882f3a69ec","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            self.manifest \u003d None"},{"line_number":467,"context_line":"        else:"},{"line_number":468,"context_line":"            if version_cap not in OBJ_VERSIONS:"},{"line_number":469,"context_line":"                raise exception.CappedVersionUnknown(version\u003dversion_cap)"},{"line_number":470,"context_line":"            self.manifest \u003d OBJ_VERSIONS[version_cap]"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def _get_capped_obj_version(self, obj):"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_d7eab4ab","line":469,"in_reply_to":"bacf61ea_f799b86f","updated":"2016-07-28 21:28:51.000000000","message":"Sorry for all the comments here, I just realized this must be covered by some kind of version pinning during upgrade, and I don\u0027t have it because I\u0027m just manually setting up some devstack nodes here. Is that possible to mimic?","commit_id":"4594ea462583116979da3e418e5efdee0edbd103"}],"cinder/objects/filter_properties.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"2410544869cca0ac08e903c98f73e1156afd1ce3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2015 Intel Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":29,"id":"7aa08908_2f02ef0b","line":1,"range":{"start_line":1,"start_character":14,"end_line":1,"end_character":19},"updated":"2016-06-16 03:24:14.000000000","message":"2016? It\u0027s not a big deal.","commit_id":"7f85e217c397ee57bb82de6abfb7e48caa9d7b6b"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"62ed78bea67cf22f0bb4f85a5a0c28463972c9ec","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def _log_volume_error(self, volume_id, retry):"},{"line_number":203,"context_line":"        \"\"\"Log requests with exceptions from previous volume operations.\"\"\""},{"line_number":204,"context_line":"        exc \u003d retry.get(\u0027exc\u0027, None)  # string-ified exception from volume"},{"line_number":205,"context_line":"        if not exc:"},{"line_number":206,"context_line":"            return  # no exception info from a previous attempt, skip"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_23c5878d","line":204,"range":{"start_line":204,"start_character":20,"end_line":204,"end_character":23},"updated":"2015-12-23 18:16:49.000000000","message":"Why the change from pop to get?","commit_id":"4e28a292e558845fa03c8485e37845daa85cfeb7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b3f4310a59a8e5c6052d49604ba8ddb84abf0465","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def _log_volume_error(self, volume_id, retry):"},{"line_number":203,"context_line":"        \"\"\"Log requests with exceptions from previous volume operations.\"\"\""},{"line_number":204,"context_line":"        exc \u003d retry.get(\u0027exc\u0027, None)  # string-ified exception from volume"},{"line_number":205,"context_line":"        if not exc:"},{"line_number":206,"context_line":"            return  # no exception info from a previous attempt, skip"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_33057e45","line":204,"range":{"start_line":204,"start_character":20,"end_line":204,"end_character":23},"in_reply_to":"1a7b0d38_23c5878d","updated":"2015-12-28 10:14:08.000000000","message":"We don\u0027t have pop in VersionedObjectDictCompat mixin [1]. That\u0027s why I\u0027m getting it and removing it from the retry object at the end of the method. Probably the removal should be done earlier to keep older behavior (return may happen in line 210)…\n\n[1] https://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/base.py#L678-L738","commit_id":"4e28a292e558845fa03c8485e37845daa85cfeb7"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9f63f329bd70ae6c5983f32d38dfbc09652cc000","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        If maximum retries is exceeded, raise NoValidHost."},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        max_attempts \u003d self.max_attempts"},{"line_number":227,"context_line":"        retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":228,"context_line":"        filter_properties[\u0027retry\u0027] \u003d None"},{"line_number":229,"context_line":"        if max_attempts \u003d\u003d 1:"},{"line_number":230,"context_line":"            # re-scheduling is disabled."}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_2bd358d6","line":227,"updated":"2016-08-24 06:00:53.000000000","message":"-1\n\nAfter scheduler manager changes filter_properties into objects in create_volume and retype, filter_properties are objects in scheduler module. I think it is better to use object\u0027s attributes in new codes:\n\nretry \u003d filter_properties.retry\n\nIt makes it easier to find problems if filter_properties is dict.","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f9f34ab6faf86b3dcd93672bbfa0c2f0c8abf984","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        If maximum retries is exceeded, raise NoValidHost."},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        max_attempts \u003d self.max_attempts"},{"line_number":227,"context_line":"        retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":228,"context_line":"        filter_properties[\u0027retry\u0027] \u003d None"},{"line_number":229,"context_line":"        if max_attempts \u003d\u003d 1:"},{"line_number":230,"context_line":"            # re-scheduling is disabled."}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_c568a8f7","line":227,"in_reply_to":"1ac06dbe_2bd358d6","updated":"2016-08-24 11:00:25.000000000","message":"I need to leave \"get\" here, as it may happen retry will not be set in object.","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9f63f329bd70ae6c5983f32d38dfbc09652cc000","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        max_attempts \u003d self.max_attempts"},{"line_number":227,"context_line":"        retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":228,"context_line":"        filter_properties[\u0027retry\u0027] \u003d None"},{"line_number":229,"context_line":"        if max_attempts \u003d\u003d 1:"},{"line_number":230,"context_line":"            # re-scheduling is disabled."},{"line_number":231,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_2bea3874","line":228,"updated":"2016-08-24 06:00:53.000000000","message":"Also here filter_properties.retry \u003d None","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f9f34ab6faf86b3dcd93672bbfa0c2f0c8abf984","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        max_attempts \u003d self.max_attempts"},{"line_number":227,"context_line":"        retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":228,"context_line":"        filter_properties[\u0027retry\u0027] \u003d None"},{"line_number":229,"context_line":"        if max_attempts \u003d\u003d 1:"},{"line_number":230,"context_line":"            # re-scheduling is disabled."},{"line_number":231,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":45,"id":"1ac06dbe_4575d8c8","line":228,"in_reply_to":"1ac06dbe_2bea3874","updated":"2016-08-24 11:00:25.000000000","message":"Sure, will do.","commit_id":"18a92a380e610e6805afb3134915f1505fb06d32"}],"cinder/scheduler/filters/capacity_filter.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"62ed78bea67cf22f0bb4f85a5a0c28463972c9ec","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        if host_state.host \u003d\u003d filter_properties.get(\u0027vol_exists_on\u0027, None):"},{"line_number":40,"context_line":"            return True"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        volume_size \u003d filter_properties.get(\u0027size\u0027, None)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if host_state.free_capacity_gb is None:"},{"line_number":45,"context_line":"            # Fail Safe"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_e3be9ffe","line":42,"range":{"start_line":42,"start_character":51,"end_line":42,"end_character":52},"updated":"2015-12-23 18:16:49.000000000","message":"The default from a get for something not there is None, so this is a bit redundant.","commit_id":"4e28a292e558845fa03c8485e37845daa85cfeb7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b3f4310a59a8e5c6052d49604ba8ddb84abf0465","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        if host_state.host \u003d\u003d filter_properties.get(\u0027vol_exists_on\u0027, None):"},{"line_number":40,"context_line":"            return True"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        volume_size \u003d filter_properties.get(\u0027size\u0027, None)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if host_state.free_capacity_gb is None:"},{"line_number":45,"context_line":"            # Fail Safe"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_f31e16ba","line":42,"range":{"start_line":42,"start_character":51,"end_line":42,"end_character":52},"in_reply_to":"1a7b0d38_e3be9ffe","updated":"2015-12-28 10:14:08.000000000","message":"Due to [1] in current state it isn\u0027t. We should probably merge [1] and stop this confusion…\n\n[1] https://review.openstack.org/#/c/258249/","commit_id":"4e28a292e558845fa03c8485e37845daa85cfeb7"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0e9a11a255b571d6ec014c19c3990b5e8a474494","unresolved":false,"context_lines":[{"line_number":57,"context_line":"              and manage_existing calls."},{"line_number":58,"context_line":"        2.3 - Sends request_spec_list as object in create_consistencygroup"},{"line_number":59,"context_line":"               call."},{"line_number":60,"context_line":"        3.4 - Sends filter_properties as object in create_volume and retype"},{"line_number":61,"context_line":"              call."},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    RPC_API_VERSION \u003d \u00272.4\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_43322b5f","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":19},"updated":"2016-05-17 00:15:51.000000000","message":"3.4-\u003e2.4","commit_id":"1396c562a2e7ae941904b2300f1b71f63e7c037e"}]}
