)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":17,"context_line":"(Restrictions)"},{"line_number":18,"context_line":"cinder-volume has to running in the computer server"},{"line_number":19,"context_line":"which want to be using local storage."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I472361c6e04c2d7e1a03282e3015bfd6280019d4"},{"line_number":22,"context_line":"Implements: blueprint local-storage-volume-scheduling"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2Br7U%3D","line":20,"updated":"2014-01-23 07:31:31.000000000","message":"Please add \"DocImpact\" to the commit message, as this feature should be added to the documentation.","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9867a5d3a34cec157ea818c81fccbe29ccf4780d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"(cli version 2 example)"},{"line_number":13,"context_line":"cinder create [--hint instance_uuid\u003d\u003cinstance_uuid\u003e] size"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This volume only can be attached the specific vm instance."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"(Restrictions)"},{"line_number":18,"context_line":"cinder-volume has to running in the computer server"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAUX%2F%2F2fE%3D","line":15,"updated":"2014-02-10 12:19:58.000000000","message":"Is this enforced anywhere? What stops the user doing a detach then attach to a different host?","commit_id":"2f6d68f198d5959879d98ea179a5a4a1de6540d2"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4a4296d0b0c0cd70a17ff8d2fead609bff602de3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"(cli version 2 example)"},{"line_number":13,"context_line":"cinder create [--hint instance_uuid\u003d\u003cinstance_uuid\u003e] size"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This volume only can be attached the specific vm instance."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"HintFilter has to be added in cinder.conf"},{"line_number":18,"context_line":"(cinder.conf)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAUX%2F%2Faug%3D","line":15,"updated":"2014-02-13 11:02:14.000000000","message":"I\u0027m still concerned that this isn\u0027t enforced or even recorded anywhere:\n\n- If you try to attach it to the wrong instance, what happens?\n\n- Is your volume useless if you delete that instance?\n\nMight be possible to enforce it via storing the instance id and hostname in the volume admin metadata...","commit_id":"7c2ecbdc47eddb1b58f0e246df734b828102dcfc"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"b1fd1ef6f774cdbdf1e7b8393d61305fafa709e7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"(cli version 2 example)"},{"line_number":13,"context_line":"cinder create [--hint instance_uuid\u003d\u003cinstance_uuid\u003e] size"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This volume only can be attached the specific vm instance."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"HintFilter has to be added in cinder.conf"},{"line_number":18,"context_line":"(cinder.conf)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAUX%2F%2FUh4%3D","line":15,"in_reply_to":"AAAAUX%2F%2Faug%3D","updated":"2014-02-14 00:27:41.000000000","message":"I think it will be supposed to be. not right now.\nSame instance option for Savanna project to increase disk performance when it creates instances and volumes.","commit_id":"7c2ecbdc47eddb1b58f0e246df734b828102dcfc"}],"cinder/api/contrib/scheduler_hints.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"20690d48ad046ee2ad973c74d649e03698c2f63b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @wsgi.extends"},{"line_number":42,"context_line":"    def create(self, req, body):"},{"line_number":43,"context_line":"        if \u0027volume\u0027 in body:"},{"line_number":44,"context_line":"            hints \u003d self._extract_scheduler_hints(body[\u0027volume\u0027])"},{"line_number":45,"context_line":"            body[\u0027volume\u0027][\u0027scheduler_hints\u0027] \u003d hints"},{"line_number":46,"context_line":"        yield"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9kts%3D","line":44,"updated":"2014-02-05 23:09:40.000000000","message":"I\u0027m not sure I follow this change. It\u0027s now expected for this information to be contained in the volume key of the request body instead of just in the general body? Can you elaborate more?","commit_id":"0374bbcd927e7c8f5282e5288383c91655f6a0dc"}],"cinder/compute/nova.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            snapshot_id,"},{"line_number":136,"context_line":"            delete_info\u003ddelete_info)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_server(self, context, server):"},{"line_number":139,"context_line":"        return novaclient(context).servers.get(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br7g%3D","line":138,"updated":"2014-01-23 07:31:31.000000000","message":"Does this assume a particular Nova API version?  If so, please document.  We should do this for the other functions in here as well.","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"}],"cinder/scheduler/filters/hint_filter.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4a4296d0b0c0cd70a17ff8d2fead609bff602de3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        # NOTE(StephenAhn): A local volume shall be created in the same host"},{"line_number":27,"context_line":"        #                   that the corresponding instance resides for"},{"line_number":28,"context_line":"        #                   performance issue."},{"line_number":29,"context_line":"        if host_state.host \u003d\u003d filter_properties.get(\u0027instance_exists_on\u0027):"},{"line_number":30,"context_line":"            return True"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2FavQ%3D","line":29,"updated":"2014-02-13 11:02:14.000000000","message":"if filter_properties.get(\u0027instance_exists_on\u0027, None) is not None:\n    if host_state.host \u003d\u003d filter_properties.get(\u0027instance_exists_on\u0027):\n        return True\nelse:\n    return True\n\nreturn False\n\n\nThis way the filter does not cause any change in behaviour if the hint is not set. Otherwise I can\u0027t see a way of having both local and normal cinder volumes available at the same time... (Correct me if I\u0027m wrong)","commit_id":"7c2ecbdc47eddb1b58f0e246df734b828102dcfc"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"e7fc4ff88e29a270056bcb8ae712a0c0c76650da","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.openstack.common.scheduler import filters"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class HintFilter(filters.BaseHostFilter):"},{"line_number":21,"context_line":"    \"\"\"HintFilter filters based on hint values.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def host_passes(self, host_state, filter_properties):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2F6Lo%3D","line":20,"updated":"2014-02-24 05:55:10.000000000","message":"We have already a powerful filter (cinder/openstack/common/scheduler/filters/json_filter.py) can do this type of thing.","commit_id":"23500517af80d4d455a8a9eef58652561716ab57"}],"cinder/tests/test_create_volume_flow.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class fake_scheduler_rpc_api(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, expected_spec, test_inst):"},{"line_number":29,"context_line":"        self.expected_spec \u003d expected_spec"},{"line_number":30,"context_line":"        self.test_inst \u003d test_inst"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br7E%3D","line":27,"updated":"2014-01-23 07:31:31.000000000","message":"Please remove this blank line","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class fake_volume_api(object):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, expected_spec, test_inst):"},{"line_number":42,"context_line":"        self.expected_spec \u003d expected_spec"},{"line_number":43,"context_line":"        self.test_inst \u003d test_inst"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br7A%3D","line":40,"updated":"2014-01-23 07:31:31.000000000","message":"Please remove this blank line","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class fake_nova_api(object):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_server(self, context, server):"},{"line_number":60,"context_line":"        instance \u003d stubs.stub_instance_create(self, context, None)"},{"line_number":61,"context_line":"        if server \u003d\u003d instance[\u0027uuid\u0027]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br68%3D","line":58,"updated":"2014-01-23 07:31:31.000000000","message":"Please remove this blank line","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        task._cast_create_volume(self.ctxt, spec, props)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        props \u003d {\u0027scheduler_hints\u0027:"},{"line_number":131,"context_line":"                 {\u0027instance_uuid\u0027: \u0027aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa\u0027}}"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        task.nova_api \u003d fake_nova_api()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br6Y%3D","line":130,"updated":"2014-01-23 07:31:31.000000000","message":"Please create new tests rather than adding to existing ones.","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        task.nova_api \u003d fake_nova_api()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        task._cast_create_volume(self.ctxt, spec, props)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        props \u003d {\u0027scheduler_hints\u0027:"},{"line_number":138,"context_line":"                 {\u0027instance_uuid\u0027: \u0027a\u0027}}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br6U%3D","line":135,"updated":"2014-01-23 07:31:31.000000000","message":"Is there anything you can check here to make sure it worked correctly?","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"1bbfca3d752a512781be35e8d1f5075048c9fd75","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        if instance_uuid:"},{"line_number":643,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":644,"context_line":"            if instance is None:"},{"line_number":645,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_uuid)"},{"line_number":646,"context_line":"            if \u0027host\u0027 not in instance or instance[\u0027host\u0027] is None:"},{"line_number":647,"context_line":"                raise exception.HostNotFound(host\u003dinstance[\u0027host\u0027])"},{"line_number":648,"context_line":"            host \u003d instance[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9kro%3D","line":645,"updated":"2014-02-05 23:17:19.000000000","message":"We don\u0027t have one of these","commit_id":"0374bbcd927e7c8f5282e5288383c91655f6a0dc"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9867a5d3a34cec157ea818c81fccbe29ccf4780d","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        # NOTE(StephenAhn): A local volume shall be created in the same host"},{"line_number":639,"context_line":"        #                   that the corresponding instance resides for"},{"line_number":640,"context_line":"        #                   performance issue. No need to schedule."},{"line_number":641,"context_line":"        #                   (e.q. hadoop Data Node Volume)"},{"line_number":642,"context_line":"        if instance_uuid:"},{"line_number":643,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":644,"context_line":"            if instance is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2F2fo%3D","line":641,"updated":"2014-02-10 12:19:58.000000000","message":"Might be better to pass to the scheduler with a hint, rather than direct casting here, since the scheduler knows the list of all the cinder-volume services running. This avoids a hint causing a volume create to be sent to a node that does not run a volume service, where it will be stuck forever.","commit_id":"2f6d68f198d5959879d98ea179a5a4a1de6540d2"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4a4296d0b0c0cd70a17ff8d2fead609bff602de3","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        # NOTE(StephenAhn): Before scheduling, we need to check valid instance"},{"line_number":639,"context_line":"        #                   and host."},{"line_number":640,"context_line":"        if instance_uuid:"},{"line_number":641,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":642,"context_line":"            if instance is None:"},{"line_number":643,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_uuid)"},{"line_number":644,"context_line":"            if \u0027host\u0027 not in instance or instance[\u0027host\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Faws%3D","line":641,"updated":"2014-02-13 11:02:14.000000000","message":"Question to other core folks: Is a call to the nova API reasonable here? We generally don\u0027t make call-outs in the API server, since they\u0027re blocking. We could defer this check until the scheduler, but then we don\u0027t get to return an error message - the volume just gets put in an error state and that\u0027s it...","commit_id":"7c2ecbdc47eddb1b58f0e246df734b828102dcfc"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"b1fd1ef6f774cdbdf1e7b8393d61305fafa709e7","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        # NOTE(StephenAhn): Before scheduling, we need to check valid instance"},{"line_number":639,"context_line":"        #                   and host."},{"line_number":640,"context_line":"        if instance_uuid:"},{"line_number":641,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":642,"context_line":"            if instance is None:"},{"line_number":643,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_uuid)"},{"line_number":644,"context_line":"            if \u0027host\u0027 not in instance or instance[\u0027host\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2FUfA%3D","line":641,"in_reply_to":"AAAAUX%2F%2Faws%3D","updated":"2014-02-14 00:27:41.000000000","message":"I think that scheduler doesn\u0027t have to be dependent with other module.","commit_id":"7c2ecbdc47eddb1b58f0e246df734b828102dcfc"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"c38a85b63f46d8abf48af4776abb062f320bff32","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        # NOTE(StephenAhn): Before scheduling, we need to check valid instance"},{"line_number":639,"context_line":"        #                   and host."},{"line_number":640,"context_line":"        if instance_uuid:"},{"line_number":641,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":642,"context_line":"            if instance is None:"},{"line_number":643,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_uuid)"},{"line_number":644,"context_line":"            if \u0027host\u0027 not in instance or instance[\u0027host\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2B0uA%3D","line":641,"updated":"2014-02-18 19:37:04.000000000","message":"There\u0027s still a blocking call here. Any other core devs got any opinions?","commit_id":"23500517af80d4d455a8a9eef58652561716ab57"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"e7fc4ff88e29a270056bcb8ae712a0c0c76650da","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        # NOTE(StephenAhn): Before scheduling, we need to check valid instance"},{"line_number":639,"context_line":"        #                   and host."},{"line_number":640,"context_line":"        if instance_uuid:"},{"line_number":641,"context_line":"            instance \u003d self.nova_api.get_server(context, instance_uuid)"},{"line_number":642,"context_line":"            if instance is None:"},{"line_number":643,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_uuid)"},{"line_number":644,"context_line":"            if \u0027host\u0027 not in instance or instance[\u0027host\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2F6F4%3D","line":641,"in_reply_to":"AAAAUX%2F%2B0uA%3D","updated":"2014-02-24 05:55:10.000000000","message":"I have similar concern.  We should at least have some sort of time-out mechanism to make sure it didn\u0027t block too long (until TCP connection timed out).","commit_id":"23500517af80d4d455a8a9eef58652561716ab57"}],"cinder/volume/flows/create_volume/__init__.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"9a932f1f8927eda8e0f8fc82cff87ccc32044bba","unresolved":false,"context_lines":[{"line_number":749,"context_line":"            if instance[\u0027host\u0027] is None:"},{"line_number":750,"context_line":"                raise exception.HostNotFound(host\u003dinstance[\u0027host\u0027])"},{"line_number":751,"context_line":"            host \u003d instance[\u0027host\u0027]"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        if not host:"},{"line_number":754,"context_line":"            # Cast to the scheduler and let it handle whatever is needed"},{"line_number":755,"context_line":"            # to select the target host for this volume."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Br34%3D","line":752,"updated":"2014-01-23 07:31:31.000000000","message":"This case is creating a new volume from scratch, which should go through the scheduler.  We should make sure that all filters pass, for example that the volume type is appropriate for the host, that there is sufficient free space, etc.  How you do this depends on the behavior that you want.  If you want to fail the create operation if the host is not valid, you should add a new filter.  If you want to favor this host over others, add a new weigher.  The documentation should instruct admins who are interested in this feature to use the new filter/weigher.","commit_id":"d368b7b234a19ba92a163b69da68cbe0bf0a7d7e"}]}
