)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"0b0fd67a270de485ba6f4744af23651f36df5551","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Proposed Smaug API v1.0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Easier link view  of the proposed API"},{"line_number":10,"context_line":"http://editor.swagger.io/#/?import\u003dhttp:%2F%2Ffpaste.org%2F303974%2F50792296%2Fraw%2F"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint api-data-model"},{"line_number":13,"context_line":"Change-Id: I1eb3c4c80da74cfedf589b9446c55c80955c40d3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1a7b0d38_2fcf612a","line":10,"range":{"start_line":10,"start_character":77,"end_line":10,"end_character":82},"updated":"2015-12-27 09:46:06.000000000","message":"fix link","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Proposed Smaug API v1.0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Easier link view of the proposed API"},{"line_number":10,"context_line":"http://editor.swagger.io/#/?import\u003dhttp:%2F%2Ffpaste.org%2F305493%2F51319380%2Fraw%2F"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint api-data-model"},{"line_number":13,"context_line":"Change-Id: I1eb3c4c80da74cfedf589b9446c55c80955c40d3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"da6ed579_d60fb72c","line":10,"updated":"2016-01-16 16:55:07.000000000","message":"Several warnings right now from the swagger UI warning about unused definitions. That should probably be cleaned up.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Proposed Smaug API v1.0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Easier link view of the proposed API"},{"line_number":10,"context_line":"http://editor.swagger.io/#/?import\u003dhttp:%2F%2Ffpaste.org%2F305493%2F51319380%2Fraw%2F"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint api-data-model"},{"line_number":13,"context_line":"Change-Id: I1eb3c4c80da74cfedf589b9446c55c80955c40d3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"da6ed579_278924cb","line":10,"in_reply_to":"da6ed579_d60fb72c","updated":"2016-01-18 09:21:40.000000000","message":"Those warnings are because the linter can\u0027t detect inheritance.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"}],"doc/images/class_diagram_001.svg":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\" standalone\u003d\"yes\"?\u003e"},{"line_number":2,"context_line":"    \u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\" height\u003d\"187px\" style\u003d\"width:1550px;height:187px;\" version\u003d\"1.1\" viewBox\u003d\"0 0 1550 187\" width\u003d\"1550px\"\u003e"},{"line_number":3,"context_line":"        \u003cdefs\u003e"},{"line_number":4,"context_line":"            \u003cfilter height\u003d\"300%\" id\u003d\"f1\" width\u003d\"300%\" x\u003d\"-1\" y\u003d\"-1\"\u003e"}],"source_content_type":"application/xml","patch_set":26,"id":"9a68dd71_8d114560","line":1,"range":{"start_line":1,"start_character":8,"end_line":1,"end_character":30},"updated":"2016-01-20 12:51:03.000000000","message":"We are missing the .pu file for this example Plugins \nand it need to be updated to the latest design.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"7deac8dd6c06b09477569d7ca971113077e6c291","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\" standalone\u003d\"yes\"?\u003e"},{"line_number":2,"context_line":"    \u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\" height\u003d\"187px\" style\u003d\"width:1550px;height:187px;\" version\u003d\"1.1\" viewBox\u003d\"0 0 1550 187\" width\u003d\"1550px\"\u003e"},{"line_number":3,"context_line":"        \u003cdefs\u003e"},{"line_number":4,"context_line":"            \u003cfilter height\u003d\"300%\" id\u003d\"f1\" width\u003d\"300%\" x\u003d\"-1\" y\u003d\"-1\"\u003e"}],"source_content_type":"application/xml","patch_set":26,"id":"9a68dd71_e35e9711","line":1,"range":{"start_line":1,"start_character":8,"end_line":1,"end_character":30},"in_reply_to":"9a68dd71_8d114560","updated":"2016-01-28 03:44:10.000000000","message":"i wonder if it\u0027s necessary to leave them somewhere as an specify example to understand the API, when we consider the use case in real environment, what user want is one kind of these protection types. if we mix them together with an abstract service, i worry it will increase the complexity for plug-in developer because of less sense about the action: protect, start, stop.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"916d54b02ce086d224cbecf03437b259e70f0270","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\" standalone\u003d\"yes\"?\u003e"},{"line_number":2,"context_line":"    \u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\" height\u003d\"187px\" style\u003d\"width:1550px;height:187px;\" version\u003d\"1.1\" viewBox\u003d\"0 0 1550 187\" width\u003d\"1550px\"\u003e"},{"line_number":3,"context_line":"        \u003cdefs\u003e"},{"line_number":4,"context_line":"            \u003cfilter height\u003d\"300%\" id\u003d\"f1\" width\u003d\"300%\" x\u003d\"-1\" y\u003d\"-1\"\u003e"}],"source_content_type":"application/xml","patch_set":28,"id":"9aed3d3a_0405ea44","line":1,"range":{"start_line":1,"start_character":1,"end_line":1,"end_character":55},"updated":"2016-02-29 16:29:23.000000000","message":"Please remove","commit_id":"b64c1d0eb319bab333821c6f72c13a4de90b2805"}],"doc/source/api/api_examples.md":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"## Checkpoint ##"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"### List Checkpoints ###"},{"line_number":62,"context_line":"\u003e **get** : /v1/providers/{provider_id}/checkpoints"},{"line_number":63,"context_line":"#### Response JSON ####"},{"line_number":64,"context_line":"```json"},{"line_number":65,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_ab8000c0","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"updated":"2015-12-29 07:33:49.000000000","message":"should add \"tenant_id\".","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"5182cfbe5f164e0fda790bde663f934d6cb25b10","unresolved":false,"context_lines":[{"line_number":59,"context_line":"## Checkpoint ##"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"### List Checkpoints ###"},{"line_number":62,"context_line":"\u003e **get** : /v1/providers/{provider_id}/checkpoints"},{"line_number":63,"context_line":"#### Response JSON ####"},{"line_number":64,"context_line":"```json"},{"line_number":65,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_da60ab03","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"in_reply_to":"1a7b0d38_2d4c20c7","updated":"2015-12-29 12:55:40.000000000","message":"I think it would be better if this API can filter checkpoints by project_id, or by other key, such as created time.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"## Checkpoint ##"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"### List Checkpoints ###"},{"line_number":62,"context_line":"\u003e **get** : /v1/providers/{provider_id}/checkpoints"},{"line_number":63,"context_line":"#### Response JSON ####"},{"line_number":64,"context_line":"```json"},{"line_number":65,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_b7c7ff96","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"in_reply_to":"1a7b0d38_ab8000c0","updated":"2015-12-29 09:56:54.000000000","message":"providers are not a tenant api","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"f342e463affbb803c9ca73fb48bb7120e66b3850","unresolved":false,"context_lines":[{"line_number":59,"context_line":"## Checkpoint ##"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"### List Checkpoints ###"},{"line_number":62,"context_line":"\u003e **get** : /v1/providers/{provider_id}/checkpoints"},{"line_number":63,"context_line":"#### Response JSON ####"},{"line_number":64,"context_line":"```json"},{"line_number":65,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_2d4c20c7","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"in_reply_to":"1a7b0d38_b7c7ff96","updated":"2015-12-29 10:35:56.000000000","message":"i think here is to list all the checkpoints not providers,do you mean only admin can use this API?","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"## Plan ##"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"### List Plans ###"},{"line_number":165,"context_line":"\u003e **get** : /v1/{project_id}/plans"},{"line_number":166,"context_line":"#### Response JSON ####"},{"line_number":167,"context_line":"```json"},{"line_number":168,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_6b6f782b","line":165,"updated":"2015-12-29 07:33:49.000000000","message":"s/{project_id}/{tenant_id}\nplease follow other project\u0027s API.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"5529c9df43faf58fa229223b7e7d2846aa7607f2","unresolved":false,"context_lines":[{"line_number":162,"context_line":"## Plan ##"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"### List Plans ###"},{"line_number":165,"context_line":"\u003e **get** : /v1/{project_id}/plans"},{"line_number":166,"context_line":"#### Response JSON ####"},{"line_number":167,"context_line":"```json"},{"line_number":168,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_3debe414","line":165,"in_reply_to":"1a7b0d38_0dce042e","updated":"2015-12-29 15:49:14.000000000","message":"It\u0027s just a name here. The actual value is the same as tenant_id.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"f342e463affbb803c9ca73fb48bb7120e66b3850","unresolved":false,"context_lines":[{"line_number":162,"context_line":"## Plan ##"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"### List Plans ###"},{"line_number":165,"context_line":"\u003e **get** : /v1/{project_id}/plans"},{"line_number":166,"context_line":"#### Response JSON ####"},{"line_number":167,"context_line":"```json"},{"line_number":168,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_0dce042e","line":165,"in_reply_to":"1a7b0d38_17f5b355","updated":"2015-12-29 10:35:56.000000000","message":"ok, but it seems that Cinder still uses the \u0027tenant_id\u0027,how do think about the integration with Cinder?","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":162,"context_line":"## Plan ##"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"### List Plans ###"},{"line_number":165,"context_line":"\u003e **get** : /v1/{project_id}/plans"},{"line_number":166,"context_line":"#### Response JSON ####"},{"line_number":167,"context_line":"```json"},{"line_number":168,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_17f5b355","line":165,"in_reply_to":"1a7b0d38_6b6f782b","updated":"2015-12-29 09:56:54.000000000","message":"The new Keystone API changed tenant to project. We would like to use the latest terminology instead of change to it in the future.\nhttps://specs.openstack.org/openstack/keystone-specs/api/v3/identity-api-v3-v2-comparison.html","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":383,"context_line":"  \"project_id\": \"586cc6ce-e286-40bd-b2b5-dd32694d9944\","},{"line_number":384,"context_line":"  \"provider_id\": \"2220f8b1-975d-4621-a872-fa9afb43cb6c\","},{"line_number":385,"context_line":"  \"checkpoint_id\": \"09edcbdc-d1c2-49c1-a212-122627b20968\","},{"line_number":386,"context_line":"  \"restore_target\": \"192.168.1.2:35357/v2.0\","},{"line_number":387,"context_line":"  \"parameters\": {"},{"line_number":388,"context_line":"    \"username\": \"admin\""},{"line_number":389,"context_line":"  },"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_2bfad043","line":386,"range":{"start_line":386,"start_character":3,"end_line":386,"end_character":17},"updated":"2015-12-29 07:33:49.000000000","message":"the restore_target need more parameters, take an exampel, when we consider to restore a volume in cinder, maybe we need the cinder bank end infomation and the volume id.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":383,"context_line":"  \"project_id\": \"586cc6ce-e286-40bd-b2b5-dd32694d9944\","},{"line_number":384,"context_line":"  \"provider_id\": \"2220f8b1-975d-4621-a872-fa9afb43cb6c\","},{"line_number":385,"context_line":"  \"checkpoint_id\": \"09edcbdc-d1c2-49c1-a212-122627b20968\","},{"line_number":386,"context_line":"  \"restore_target\": \"192.168.1.2:35357/v2.0\","},{"line_number":387,"context_line":"  \"parameters\": {"},{"line_number":388,"context_line":"    \"username\": \"admin\""},{"line_number":389,"context_line":"  },"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_977683d5","line":386,"range":{"start_line":386,"start_character":3,"end_line":386,"end_character":17},"in_reply_to":"1a7b0d38_2bfad043","updated":"2015-12-29 09:56:54.000000000","message":"You are correct. We still haven\u0027t nailed down all the details relating to restore target parameters.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    \"id\": \"2220f8b1-975d-4621-a872-fa9afb43cb6c\","},{"line_number":16,"context_line":"    \"name\": \"OS Infra Provider\","},{"line_number":17,"context_line":"    \"description\": \"This provider uses OpenStack\u0027s own services (swift, cinder) as storage\","},{"line_number":18,"context_line":"    \"extended_info_schema\": {"},{"line_number":19,"context_line":"      \"OS::Nova::Cinder\": {"},{"line_number":20,"context_line":"        \"type\": \"object\","},{"line_number":21,"context_line":"        \"properties\": {"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_58345fdd","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":25},"updated":"2015-12-30 09:55:28.000000000","message":"We are missing the options_schema","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      \"OS::Nova::Cinder\": {"},{"line_number":20,"context_line":"        \"type\": \"object\","},{"line_number":21,"context_line":"        \"properties\": {"},{"line_number":22,"context_line":"          \"use_cbt\": {"},{"line_number":23,"context_line":"            \"type\": \"boolean\","},{"line_number":24,"context_line":"            \"title\": \"Use CBT\","},{"line_number":25,"context_line":"            \"description\": \"Use Changed Block Tracking when backing up this volume\""}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_98ddf772","line":22,"range":{"start_line":22,"start_character":11,"end_line":22,"end_character":18},"updated":"2015-12-30 09:55:28.000000000","message":"I think the example for the extended_info_schema should reflect information that the vendor/plugin will like to  expose to the user about a operation \n\nI think a better example will be Achieved_Consistency or any additional info on the operation like protect","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":38,"context_line":"{"},{"line_number":39,"context_line":"  \"id\": \"2220f8b1-975d-4621-a872-fa9afb43cb6c\","},{"line_number":40,"context_line":"  \"name\": \"OS Infra Provider\","},{"line_number":41,"context_line":"  \"description\": \"This provider uses OpenStack\u0027s own services (swift, cinder) as storage\","},{"line_number":42,"context_line":"  \"extended_info_schema\": {"},{"line_number":43,"context_line":"    \"OS::Nova::Cinder\": {"},{"line_number":44,"context_line":"      \"type\": \"object\","}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_38d5eb42","line":41,"range":{"start_line":41,"start_character":3,"end_line":41,"end_character":14},"updated":"2015-12-30 09:55:28.000000000","message":"missing options_schema","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  \"project_id\": \"446a04d8-6ff5-4e0e-99a4-827a6389e9ff\","},{"line_number":100,"context_line":"  \"status\": \"committed\","},{"line_number":101,"context_line":"  \"protection_plan\": {"},{"line_number":102,"context_line":"    \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":103,"context_line":"    \"name\": \"My 3 tier application\","},{"line_number":104,"context_line":"    \"resources\": ["},{"line_number":105,"context_line":"      {"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_d8812ffd","line":102,"range":{"start_line":102,"start_character":25,"end_line":102,"end_character":29},"updated":"2015-12-30 09:55:28.000000000","message":"if we pass the plan inline then we are missing the parameters\nor we could pass the paln_id the swagger is missing this definition","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":124,"context_line":"\u003e **get** : /v1/providers/{provider_id}/checkpoints/{checkpoint_id}"},{"line_number":125,"context_line":"#### Response JSON ####"},{"line_number":126,"context_line":"```json"},{"line_number":127,"context_line":"{"},{"line_number":128,"context_line":"  \"id\": \"2220f8b1-975d-4621-a872-fa9afb43cb6c\","},{"line_number":129,"context_line":"  \"project_id\": \"446a04d8-6ff5-4e0e-99a4-827a6389e9ff\","},{"line_number":130,"context_line":"  \"status\": \"committed\","}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_38940b36","line":127,"range":{"start_line":127,"start_character":0,"end_line":127,"end_character":1},"updated":"2015-12-30 09:55:28.000000000","message":"we need to return extended_info  for each resource","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":220,"context_line":"{"},{"line_number":221,"context_line":"  \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":222,"context_line":"  \"name\": \"My 3 tier application\","},{"line_number":223,"context_line":"  \"resources\": ["},{"line_number":224,"context_line":"    {"},{"line_number":225,"context_line":"      \"id\": \"64e51e85-4f31-441f-9a5d-6e93e3196628\","},{"line_number":226,"context_line":"      \"type\": \"OS::Nova::Server\""}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_f802f36e","line":223,"range":{"start_line":223,"start_character":15,"end_line":223,"end_character":16},"updated":"2015-12-30 09:55:28.000000000","message":"Missing parameters super set","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f7780290d52fb989dc6c8a60e2d4a3906709e38d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Smaug API #"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"----------"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":24,"id":"fa69d971_e9dcf1e5","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":12},"updated":"2016-01-09 10:13:34.000000000","message":"we need to add example for Plan update","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f7780290d52fb989dc6c8a60e2d4a3906709e38d","unresolved":false,"context_lines":[{"line_number":160,"context_line":"\u003e **get** : /v1/{project_id}/plans/{plan_id}"},{"line_number":161,"context_line":"#### Response JSON ####"},{"line_number":162,"context_line":"```json"},{"line_number":163,"context_line":"{"},{"line_number":164,"context_line":"  \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":165,"context_line":"  \"name\": \"My 3 tier application\","},{"line_number":166,"context_line":"  \"resources\": ["}],"source_content_type":"text/x-markdown","patch_set":24,"id":"fa69d971_a9e2799e","line":163,"range":{"start_line":163,"start_character":0,"end_line":163,"end_character":1},"updated":"2016-01-09 10:13:34.000000000","message":"Please add status to the example","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"### Create Scheduled Operation ###"},{"line_number":264,"context_line":"\u003e **post** : /v1/{project_id}/scheduled_operations"},{"line_number":265,"context_line":"#### Response JSON ####"},{"line_number":266,"context_line":"```json"},{"line_number":267,"context_line":"{"},{"line_number":268,"context_line":"  \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\","}],"source_content_type":"text/x-markdown","patch_set":25,"id":"da6ed579_23ecd38e","line":265,"updated":"2016-01-16 16:55:07.000000000","message":"POST operations should also show the expected request payload data.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"### Create Scheduled Operation ###"},{"line_number":264,"context_line":"\u003e **post** : /v1/{project_id}/scheduled_operations"},{"line_number":265,"context_line":"#### Response JSON ####"},{"line_number":266,"context_line":"```json"},{"line_number":267,"context_line":"{"},{"line_number":268,"context_line":"  \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\","}],"source_content_type":"text/x-markdown","patch_set":25,"id":"da6ed579_08d8ad1c","line":265,"in_reply_to":"da6ed579_23ecd38e","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      }"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":"  },"},{"line_number":38,"context_line":"  \"options_schema\": {"},{"line_number":39,"context_line":"    \"OS::Nova::Server\": {"},{"line_number":40,"context_line":"      \"consistency\": {"},{"line_number":41,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-markdown","patch_set":26,"id":"9a68dd71_901f1a5b","line":38,"range":{"start_line":38,"start_character":3,"end_line":38,"end_character":17},"updated":"2016-01-20 12:51:03.000000000","message":"Missing the restore schema","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":318,"context_line":"## Restoration ##"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"### List Restoration ###"},{"line_number":321,"context_line":"\u003e **get** : /v1/{project_id}/restorations"},{"line_number":322,"context_line":"#### Response JSON ####"},{"line_number":323,"context_line":"```json"},{"line_number":324,"context_line":"["}],"source_content_type":"text/x-markdown","patch_set":26,"id":"9a68dd71_90a4fa08","line":321,"range":{"start_line":321,"start_character":29,"end_line":321,"end_character":41},"updated":"2016-01-20 12:51:03.000000000","message":"restore","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":336,"context_line":"]"},{"line_number":337,"context_line":"```"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"### Create Restoration ###"},{"line_number":340,"context_line":"\u003e **post** : /v1/{project_id}/restorations"},{"line_number":341,"context_line":"#### Response JSON ####"},{"line_number":342,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":26,"id":"9a68dd71_907b9a7b","line":339,"range":{"start_line":339,"start_character":11,"end_line":339,"end_character":22},"updated":"2016-01-20 12:51:03.000000000","message":"Restore","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"}],"doc/source/api/bank.md":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"},{"line_number":34,"context_line":"        \"plugin_1\": {"},{"line_number":35,"context_line":"            \"name\": \"cinder volume\","}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_a8e564a4","line":32,"updated":"2015-11-19 03:41:21.000000000","message":"Including the operation action info may be better.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`transactions/\u003cplan_id\u003e/\u003ctransaction_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_8e498962","line":44,"updated":"2015-11-19 03:41:21.000000000","message":"The example content below seems to only have static info, such as dependencies, nothing to do with the transaction.\nThen why need a transaction_id in the path?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"dcfbd5b7ab5fcee5f66b98dca206378bcbced757","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`transactions/\u003cplan_id\u003e/\u003ctransaction_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_177996fc","line":44,"in_reply_to":"ba8a016a_8e498962","updated":"2015-11-23 11:48:52.000000000","message":"It\u0027s not static. The \u003cother_protection_definition_id\u003e is specific to the transaction. Also the dependencies might have changed on the original resource since the transaction was created.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":123,"context_line":"       \"plugins\": {}"},{"line_number":124,"context_line":"   }"},{"line_number":125,"context_line":"   ```"},{"line_number":126,"context_line":"4. Remove indices"},{"line_number":127,"context_line":"5. Remove index \u0027plan\u0027 (Example, there could be any number of indexes)"},{"line_number":128,"context_line":"  * action: delete_object"},{"line_number":129,"context_line":"  * path: `/indices/by_plan/\u003cPLAN-ID\u003e/\u003cTRANSACTION-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_2e85fd05","line":126,"updated":"2015-11-19 03:41:21.000000000","message":"This step seems duplicated, cause step 5 below describes the same functionality.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"dcfbd5b7ab5fcee5f66b98dca206378bcbced757","unresolved":false,"context_lines":[{"line_number":123,"context_line":"       \"plugins\": {}"},{"line_number":124,"context_line":"   }"},{"line_number":125,"context_line":"   ```"},{"line_number":126,"context_line":"4. Remove indices"},{"line_number":127,"context_line":"5. Remove index \u0027plan\u0027 (Example, there could be any number of indexes)"},{"line_number":128,"context_line":"  * action: delete_object"},{"line_number":129,"context_line":"  * path: `/indices/by_plan/\u003cPLAN-ID\u003e/\u003cTRANSACTION-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_bcc9917b","line":126,"in_reply_to":"ba8a016a_2e85fd05","updated":"2015-11-23 11:48:52.000000000","message":"Maybe there is a better way to express that but 4 is when you start remove indexes. Step 5 is an example. calling it step 4.1. might have been clearer. I\u0027ll change that.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ff3cc4151e993b585bc8382b2a5facb3b58672a1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"But the simplified interface doesn\u0027t describe how Smaug will do it\u0027s higher"},{"line_number":15,"context_line":"level operations and how the higher level logic will be layed out in the object"},{"line_number":16,"context_line":"store. This is why we need higher level logic defined explicitly so that later"},{"line_number":17,"context_line":"we could use higher level bank functions knowing they are correct, safe and atomic."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"## Layout"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"7a740942_1e48b95a","line":17,"updated":"2015-12-06 08:57:39.000000000","message":"I think that we should add here that only when Protect is called   we create a transaction on the bank.\n\nProtect  --\u003e Create Transaction \n\nDelete   --\u003e  Delete Transaction\n\nRestore  --\u003e Read Transaction\n\nVerify    --\u003e  Read Transaction   \n\nAll the operations are lodged in the local Smaug database","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17192,"name":"xiangxinyong","email":"xiangxinyong@huawei.com","username":"xianxinyong"},"change_message_id":"1031c50cb9f7282798da2e87871dc232c6318ab5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":"```"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"### Protection definition plugin data directory"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"`transactions/\u003ctransaction_id\u003e/\u003cprotection_defintion_id\u003e/plugin_data/*`"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_05966294","line":57,"updated":"2015-12-01 02:52:51.000000000","message":"Hi saggi, when will we create ##Protection definition directory data and ##Protection definition plugin data directory data in the ##Transaction Creation Process?","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"we defined a simplified object store interface that we believe most backends will be able"},{"line_number":12,"context_line":"to support without much work."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But the simplified interface doesn\u0027t describe how Smaug will do it\u0027s higher"},{"line_number":15,"context_line":"level operations and how the higher level logic will be layed out in the object"},{"line_number":16,"context_line":"store. This is why we need higher level logic defined explicitly so that later"},{"line_number":17,"context_line":"we could use higher level bank functions knowing they are correct, safe and atomic."}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_187491cd","line":14,"updated":"2015-12-09 22:12:09.000000000","message":"nit: s/it\u0027s/its/","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ffac7acb1105827762d9f623fc9d731f3a2b67f9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"we defined a simplified object store interface that we believe most backends will be able"},{"line_number":12,"context_line":"to support without much work."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But the simplified interface doesn\u0027t describe how Smaug will do it\u0027s higher"},{"line_number":15,"context_line":"level operations and how the higher level logic will be layed out in the object"},{"line_number":16,"context_line":"store. This is why we need higher level logic defined explicitly so that later"},{"line_number":17,"context_line":"we could use higher level bank functions knowing they are correct, safe and atomic."}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_65beec66","line":14,"in_reply_to":"7a740942_187491cd","updated":"2015-12-18 14:02:11.000000000","message":"Done","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"```json"},{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_db19237b","line":30,"updated":"2015-12-09 22:12:09.000000000","message":"Should this be an ISO8701 timestamp? This format does not have time zone information and could be different between the smaug client and server.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"64e75dc0913951ee9cf6ff1d110eab967270b95c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"```json"},{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_d62f5486","line":30,"in_reply_to":"3a7e1126_f0fa9874","updated":"2015-12-18 14:09:48.000000000","message":"Oh, right. Sorry, that was a typo, I meant 8601. Thanks! :)","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ffac7acb1105827762d9f623fc9d731f3a2b67f9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"```json"},{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_f0fa9874","line":30,"in_reply_to":"7a740942_db19237b","updated":"2015-12-18 14:02:11.000000000","message":"Yes thanks you are right we should add the time zone info\n\n  do you mean ISO 8601?\n\nWe could use 8601 or RFC 2822 time \n\nI will fix it at the moment to ISO 8601 UTC --\n 2015-12-18T13:41:02Z","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"},{"line_number":34,"context_line":"        \"plugin_1\": {"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_bbb8d72b","line":31,"updated":"2015-12-09 22:12:09.000000000","message":"Should this actually be \"in_progress\" to be consistent with status instances below?","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ffac7acb1105827762d9f623fc9d731f3a2b67f9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"},{"line_number":34,"context_line":"        \"plugin_1\": {"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_10dba4ed","line":31,"in_reply_to":"7a740942_bbb8d72b","updated":"2015-12-18 14:02:11.000000000","message":"Done","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"56fd4add657a921787e2f6acdf4ff13ae3075685","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"### Protection definition plugin data directory"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"`/checkpoints/\u003ccheckpoint_id\u003e/\u003cprotection_defintion_id\u003e/plugin_data/*`"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_004968d0","line":59,"updated":"2015-12-10 05:12:12.000000000","message":"is it necessary to show the Resource info when looking into the chenpoints, if necessary, how to do that.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ffac7acb1105827762d9f623fc9d731f3a2b67f9","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"### Protection definition plugin data directory"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"`/checkpoints/\u003ccheckpoint_id\u003e/\u003cprotection_defintion_id\u003e/plugin_data/*`"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_30b4a080","line":59,"in_reply_to":"7a740942_004968d0","updated":"2015-12-18 14:02:11.000000000","message":"You are right it is missing we will add that","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"779654891ce8fd31c458879fb199c2eade13fd53","unresolved":false,"context_lines":[{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"1. Acquire checkpoint lock"},{"line_number":66,"context_line":" * action acquire_lock"},{"line_number":67,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_f34b5b85","line":64,"updated":"2015-12-08 06:56:52.000000000","message":"Let\u0027s call a transaction which failed to finish as an in-the-half transaction. If one protection service crashes and restarts, those in-the-half transactions need to be picked up and rescheduled right?  Then we need a way to easily differentiate which transactions are in-the-half.\nAnother option is the MQ itself will provide persistent message and reschedule once the worker gets connection lost. If the transaction lock between write is used to reschedule transaction, we could consider queue reschedule as well.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ffac7acb1105827762d9f623fc9d731f3a2b67f9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"1. Acquire checkpoint lock"},{"line_number":66,"context_line":" * action acquire_lock"},{"line_number":67,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"3a7e1126_4b23c1a7","line":64,"in_reply_to":"7a740942_8a024e6e","updated":"2015-12-18 14:02:11.000000000","message":"Lets discuss this in the next IRC ,meeting I will add this to the agenda","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"125cb7cc91fdda58d3992016c225b263e1ad021f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"1. Acquire checkpoint lock"},{"line_number":66,"context_line":" * action acquire_lock"},{"line_number":67,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_8a024e6e","line":64,"in_reply_to":"7a740942_eedb1420","updated":"2015-12-10 09:08:55.000000000","message":"Just to make sure we\u0027re on the same page:\n1. We don\u0027t prefer use queue to manage reschedule broken transactions (redo operation).  On protection service restart, we need a component to pick up those broken work. \n\n2. We can list operation db(or transaction records) to pickup broken work and redo them. To tell whether an operation is broken or not, we use timeout. Any other methods to identify broken operations?\n\n3. During redo operation, shall we give up all previous transactions and redo the whole protection plan or continue with the previous transaction? say, just update the transaction state which failed previously.\n\n4. If we redo the whole operation, garbage left by broken transaction is acceptable. (say, half of plan resources already generated backup, but the other half failed. We don\u0027t recycle those generated backups.)","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"486c57ff081eebdb7903c9e03e0d24401500562c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"## Checkpoint Creation Process"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"1. Acquire checkpoint lock"},{"line_number":66,"context_line":" * action acquire_lock"},{"line_number":67,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_eedb1420","line":64,"in_reply_to":"7a740942_f34b5b85","updated":"2015-12-09 15:05:31.000000000","message":"I\u0027m not sure if this is the place to manage broken transactions.  Anyway, the implementation [protection service] needs to handle reprocessing of \"unfinished\" transactions itself, because it is possible that the transaction was finished but only the state update failed, and therefore forcing reprocessing in the MQ will cause duplicates and unnecessary work.  The MQ should only deal with persistence and passing of the messages, and not enforce any application-specific logic.  \n\nIt is possible to introduce a separate \"Cleanup\" service that picks up aged \"unfinished\" transactions and handles them (either purge, re-submit, or escalate to manual resolution via trouble-ticketing interface).  However, it should not be done as part of this project.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"```json"},{"line_number":28,"context_line":"{"},{"line_number":29,"context_line":"    \"trigger\": {},"},{"line_number":30,"context_line":"    \"started_at\": \"11 OCT 2237\","},{"line_number":31,"context_line":"    \"status\": \"in progress\","},{"line_number":32,"context_line":"    \"plan\": {},"},{"line_number":33,"context_line":"    \"plugins\": {"}],"source_content_type":"text/x-markdown","patch_set":15,"id":"5a710552_67d5fb41","line":30,"updated":"2015-12-16 10:19:23.000000000","message":"please see the comments of previous version.","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"9ecf41a35d9150ebca537da9111f425a6d09b2ae","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":16,"id":"3a7e1126_21422311","line":44,"updated":"2015-12-18 10:16:41.000000000","message":"Does this mean bank (or provider) should have interface for put/get/update/delete protection_definition? As we run plugin.protect(), we will get the protection_id as return value. Say, we call backup plugin, then we  will get backup_id as protection_id, which we need persist under this key:/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json. \nDoes that sound reasonable?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":16,"id":"3a7e1126_d1a8be79","line":44,"in_reply_to":"3a7e1126_21422311","updated":"2015-12-18 14:51:28.000000000","message":"The idea of the new API was not to change the overall architecture \nwas to change what the user could configure via the API \nBut we left all the interfaces we defined earlier for Bank and Protection Plugin but at the moment we do not expose this to API and allow the Admin to configure it.\n in later phase we going to expose all this for the Admin API\n\nI am not sure if this answer the question ?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"9ecf41a35d9150ebca537da9111f425a6d09b2ae","unresolved":false,"context_lines":[{"line_number":80,"context_line":"       \"plugins\": {}"},{"line_number":81,"context_line":"   }"},{"line_number":82,"context_line":"   ```"},{"line_number":83,"context_line":"4. Run plugins"},{"line_number":84,"context_line":"5. Checkpoint finished but indices not yet created"},{"line_number":85,"context_line":" * action: write_object"},{"line_number":86,"context_line":" * path: `/checkpoints/\u003cCHECKPOINT-ID\u003e/index.json`,"}],"source_content_type":"text/x-markdown","patch_set":16,"id":"3a7e1126_21b543ed","line":83,"updated":"2015-12-18 10:16:41.000000000","message":"It looks to me that we should break checkpoint.create() into two calls: the top half is for checkpoint.create() including step 1~3; while the bottom half should be checkpoint.update() where we can update the status or other values of this checkpoint. The logic inside checkpoint.update() could check the status to be updated, if it\u0027s finished, we could do step 5~8.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"       \"plugins\": {}"},{"line_number":81,"context_line":"   }"},{"line_number":82,"context_line":"   ```"},{"line_number":83,"context_line":"4. Run plugins"},{"line_number":84,"context_line":"5. Checkpoint finished but indices not yet created"},{"line_number":85,"context_line":" * action: write_object"},{"line_number":86,"context_line":" * path: `/checkpoints/\u003cCHECKPOINT-ID\u003e/index.json`,"}],"source_content_type":"text/x-markdown","patch_set":16,"id":"3a7e1126_110c0640","line":83,"in_reply_to":"3a7e1126_21b543ed","updated":"2015-12-18 14:51:28.000000000","message":"Yes thanks we should arrange this according to the new CRUD checkpoint API","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"9de6570ff12068ef9c7a3b4cb7bf6b3eb3d7b3ba","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"### Protection definition directory"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#### Example content"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":17,"id":"3a7e1126_2a803a8a","line":45,"updated":"2015-12-22 11:38:06.000000000","message":"Protection_definition has been replaced by Protectable, need update here?","commit_id":"5ee58942f130fc8c949f48dcba6597deb886c9f6"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"9de6570ff12068ef9c7a3b4cb7bf6b3eb3d7b3ba","unresolved":false,"context_lines":[{"line_number":49,"context_line":"```json"},{"line_number":50,"context_line":"{"},{"line_number":51,"context_line":"    \"plugin\": \"plugin_1\","},{"line_number":52,"context_line":"    \"dependencies\": {"},{"line_number":53,"context_line":"        \"vol1\": \"\u003cother_protection_defintion_id\u003e\""},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":17,"id":"3a7e1126_85491f33","line":52,"updated":"2015-12-22 11:38:06.000000000","message":"Not sure if I got the point to backup the dependency into bank. \nJust a generic question: shall we have another two protectable type:\n1.volume_attachment to describe the information which volume attached to which vm with which device path;\n2.network_attachment to describe which network the vm attached to with which ip which network interface;\nWe need this information to re-organize those resource we restored, otherwise user has no way to assemble all parts together.  And HEAT also uses attachment to orchestrate the stack building work.","commit_id":"5ee58942f130fc8c949f48dcba6597deb886c9f6"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"ac9b36783e4a074921015bbcde92bffbd24417a5","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":18,"id":"1a7b0d38_66098195","line":44,"updated":"2015-12-23 01:49:54.000000000","message":"Protection_definition has been replaced by Protectable, need update here?","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04e9087e92bd5395e526a95d43b669e55a82d0fe","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cprotection_definition_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":18,"id":"1a7b0d38_afbcb106","line":44,"in_reply_to":"1a7b0d38_66098195","updated":"2015-12-27 09:14:29.000000000","message":"will do","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"ac9b36783e4a074921015bbcde92bffbd24417a5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"plugin\": \"plugin_1\","},{"line_number":51,"context_line":"    \"dependencies\": {"},{"line_number":52,"context_line":"        \"vol1\": \"\u003cother_protection_defintion_id\u003e\""},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"1a7b0d38_661741a4","line":51,"updated":"2015-12-23 01:49:54.000000000","message":"Not sure if I got the point to backup the dependency into bank. \nJust a generic question: shall we have another two protectable type:\n1.volume_attachment to describe the information which volume attached to which vm with which device path;\n2.network_attachment to describe which network the vm attached to with which ip which network interface;\nWe need this information to re-organize those resource we restored, otherwise user has no way to assemble all parts together.  And HEAT also uses attachment to orchestrate the stack building work.","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"4d1bfd2397787596562e86931959f2dfb232a4b7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"plugin\": \"plugin_1\","},{"line_number":51,"context_line":"    \"dependencies\": {"},{"line_number":52,"context_line":"        \"vol1\": \"\u003cother_protection_defintion_id\u003e\""},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"fa69d971_85b0318d","line":51,"in_reply_to":"1a7b0d38_2f5681ce","updated":"2015-12-30 03:08:52.000000000","message":"Due to the time shift, I will leave my questions here:\n1. so the dependency here in protection_definition doesn\u0027t mean the attachment info (metadata of vm). Could you pls. take an example for the dependency field of the protection_definition?\n2. we do have requirement that the IP won\u0027t change after restoration in hybrid cloud. So that apps won\u0027t be aware of the restoration.\n3. so it\u0027s the responsibility of vm protection plugin to store the metadata instead of bank? any available vm plugin offers this capability? AFAK,openstack suggests backup vm and metadata(db) separately.","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"147856eb445a79e601400e7db610522d191a73c9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"plugin\": \"plugin_1\","},{"line_number":51,"context_line":"    \"dependencies\": {"},{"line_number":52,"context_line":"        \"vol1\": \"\u003cother_protection_defintion_id\u003e\""},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"fa69d971_e5100dab","line":51,"in_reply_to":"1a7b0d38_2f5681ce","updated":"2015-12-30 02:47:25.000000000","message":"Ok, I do have more questions on both the dependency and the attachment information. Lets talk in IRC","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04e9087e92bd5395e526a95d43b669e55a82d0fe","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"plugin\": \"plugin_1\","},{"line_number":51,"context_line":"    \"dependencies\": {"},{"line_number":52,"context_line":"        \"vol1\": \"\u003cother_protection_defintion_id\u003e\""},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"1a7b0d38_2f5681ce","line":51,"in_reply_to":"1a7b0d38_661741a4","updated":"2015-12-27 09:14:29.000000000","message":"The mapping is the dependencies and the tag we add to it for multiple dependency\u0027s of the same type.\n\nIt is up to the protection plugin to provide the connectivity and HEAT template creation according to the dependencies and the tags he provided in Protect phase. \n\nLets take an example \nIf we will take for example VM protection plugin:\nThe metadata that any VM protection plugin must store is the following :\n1)the attached Volumes and there mapping to the internal VM block device /dev/sda /dev/sdn etc.\n2) The VM mac address ( Ip info is sent using DHCP is most deployment)\nData that could be stored by the VM protection plugin \n3) System image ( ephemeral  storage )\n\nI hope this answered your question if not lets discuss this on the IRC channel","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cresource_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_6b2778ca","line":44,"range":{"start_line":44,"start_character":15,"end_line":44,"end_character":28},"updated":"2015-12-29 07:33:49.000000000","message":"s/Checkpoint_id/checkpoint_id","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"### Protection definition directory"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"`/checkpoints/\u003cCheckpoint_id\u003e/\u003cresource_id\u003e/index.json`"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"#### Example content"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":20,"id":"1a7b0d38_972443c5","line":44,"range":{"start_line":44,"start_character":15,"end_line":44,"end_character":28},"in_reply_to":"1a7b0d38_6b2778ca","updated":"2015-12-29 09:56:54.000000000","message":"Done","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"name\": \"vm\","},{"line_number":51,"context_line":"    \"id\": \"8a562ed6-81ff-4bda-9672-2a8c49f130c3\","},{"line_number":52,"context_line":"    \"dependent_resources\": ["},{"line_number":53,"context_line":"        \"92b022d9-cca4-4d02-b7fb-6cec9183d9f2\","},{"line_number":54,"context_line":"        \"b081d472-023c-4a98-b57b-f2013996739b\""}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_bb10f54f","line":51,"range":{"start_line":51,"start_character":11,"end_line":51,"end_character":19},"updated":"2015-12-30 09:55:28.000000000","message":"missing extendet_info","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"835a206936eb7ec7ec6d04a25ff667fc5d5cbd4e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"```json"},{"line_number":49,"context_line":"{"},{"line_number":50,"context_line":"    \"name\": \"vm\","},{"line_number":51,"context_line":"    \"id\": \"8a562ed6-81ff-4bda-9672-2a8c49f130c3\","},{"line_number":52,"context_line":"    \"dependent_resources\": ["},{"line_number":53,"context_line":"        \"92b022d9-cca4-4d02-b7fb-6cec9183d9f2\","},{"line_number":54,"context_line":"        \"b081d472-023c-4a98-b57b-f2013996739b\""}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_5f5b8887","line":51,"range":{"start_line":51,"start_character":11,"end_line":51,"end_character":19},"in_reply_to":"fa69d971_bb10f54f","updated":"2016-01-05 16:17:30.000000000","message":"It\u0027s not in the json file. It\u0027s somewhere in the bank and the provider should supply it.","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"68043bd9f29d6cfeae6218d3ea2e5f824f3219e9","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"1. Acquire checkpoint lock"},{"line_number":68,"context_line":" * action acquire_lock"},{"line_number":69,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"},{"line_number":70,"context_line":"2. Create checkpoint pointer"}],"source_content_type":"text/x-markdown","patch_set":22,"id":"fa69d971_af6039d0","line":67,"updated":"2016-01-05 01:08:25.000000000","message":"Pls. correct the lock to lease and describe the way to grant lease and cleanup zombie checkpoints.","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"When deleting a checkpoint the checkpoint is only marked as deleted. On of the"},{"line_number":132,"context_line":"Smaug server will have to run a GC collection run and make sure all the actual"},{"line_number":133,"context_line":"data is free. This is done to unify all the cleanup to one flow and make sure"},{"line_number":134,"context_line":"the deletion has been propegated to all sites before actually deleting the data."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"For each checkpoint in `/indices/deleted_checkpoints`"}],"source_content_type":"text/x-markdown","patch_set":25,"id":"da6ed579_c38857c9","line":134,"range":{"start_line":134,"start_character":22,"end_line":134,"end_character":32},"updated":"2016-01-16 16:55:07.000000000","message":"nit: s/propegated/propagated/","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"When deleting a checkpoint the checkpoint is only marked as deleted. On of the"},{"line_number":132,"context_line":"Smaug server will have to run a GC collection run and make sure all the actual"},{"line_number":133,"context_line":"data is free. This is done to unify all the cleanup to one flow and make sure"},{"line_number":134,"context_line":"the deletion has been propegated to all sites before actually deleting the data."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"For each checkpoint in `/indices/deleted_checkpoints`"}],"source_content_type":"text/x-markdown","patch_set":25,"id":"da6ed579_62a4ea07","line":134,"range":{"start_line":134,"start_character":22,"end_line":134,"end_character":32},"in_reply_to":"da6ed579_c38857c9","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"started_at\": \"2015-10-29T13:41:02Z\","},{"line_number":32,"context_line":"    \"status\": \"in progress\","},{"line_number":33,"context_line":"    \"plan\": {},"},{"line_number":34,"context_line":"    \"plugins\": {"},{"line_number":35,"context_line":"        \"plugin_1\": {"},{"line_number":36,"context_line":"            \"name\": \"cinder volume\","},{"line_number":37,"context_line":"            \"version\": \"1.2.3\","}],"source_content_type":"text/x-markdown","patch_set":26,"id":"9a68dd71_4de7cd12","line":34,"range":{"start_line":34,"start_character":5,"end_line":34,"end_character":12},"updated":"2016-01-20 12:51:03.000000000","message":"I think This should be the provider ID with serialization of all the Provider definition including all the plugins","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Create new Checkpoint with id \u003cCHECKPOINT-ID\u003e;"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"1. Acquire checkpoint lock"},{"line_number":69,"context_line":" * action acquire_lock"},{"line_number":70,"context_line":" * id: `\u003cCHECKPOINT-ID\u003e`"},{"line_number":71,"context_line":"2. Create checkpoint pointer"},{"line_number":72,"context_line":" * action: write_object"}],"source_content_type":"text/x-markdown","patch_set":26,"id":"9a68dd71_6da09191","line":69,"range":{"start_line":69,"start_character":10,"end_line":69,"end_character":22},"updated":"2016-01-20 12:51:03.000000000","message":"I think that this was changed to get lease","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"}],"doc/source/api/class_diagram.pu":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    create_bank(parameters: dict)"},{"line_number":10,"context_line":"}"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class BankInfo {"},{"line_number":13,"context_line":"    name: string"},{"line_number":14,"context_line":"    comments: string"},{"line_number":15,"context_line":"    options: dict"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_d143b040","line":12,"updated":"2015-11-19 03:41:21.000000000","message":"Should contain \u0027ID: UUID\u0027 as well.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class BankInfo {"},{"line_number":13,"context_line":"    name: string"},{"line_number":14,"context_line":"    comments: string"},{"line_number":15,"context_line":"    options: dict"},{"line_number":16,"context_line":"}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"interface Bank {"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_2e389d3c","line":15,"updated":"2015-11-19 03:41:21.000000000","message":"The BankInfo is an API entity of Bank interface, shouldn\u0027t there be an interface object in this class definition? Like \u0027interface: Bank\u0027 or something?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"dcfbd5b7ab5fcee5f66b98dca206378bcbced757","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class BankInfo {"},{"line_number":13,"context_line":"    name: string"},{"line_number":14,"context_line":"    comments: string"},{"line_number":15,"context_line":"    options: dict"},{"line_number":16,"context_line":"}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"interface Bank {"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_37bffa61","line":15,"in_reply_to":"ba8a016a_2e389d3c","updated":"2015-11-23 11:48:52.000000000","message":"Not exactly, the API doesn\u0027t expose the Bank interface.\nWe use the BankInfo to initialize a new Bank instance internally.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class Trigger {"},{"line_number":35,"context_line":"    protection_plans: []ProtectionPlan"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TimedTrigger extends Trigger {"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_6e67854d","line":35,"updated":"2015-11-19 03:41:21.000000000","message":"Maybe should contain action type as well.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"1345efcb5ed7593abbb0bcf99ef1bb1682fc6085","unresolved":false,"context_lines":[{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class Trigger {"},{"line_number":35,"context_line":"    protection_plans: []ProtectionPlan"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TimedTrigger extends Trigger {"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_5e63b241","line":35,"in_reply_to":"ba8a016a_6e67854d","updated":"2015-11-23 12:47:22.000000000","message":"what is meant by \"action type\"?\nthis is a Trigger class... it is decoupled from the action(s) that run when it triggers the scheduler","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"1345efcb5ed7593abbb0bcf99ef1bb1682fc6085","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Trigger -right-\u003e ProtectionPlan: invokes"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SubVault extends Bank {"},{"line_number":49,"context_line":"    prefix: string"},{"line_number":50,"context_line":"    bank: Bank"},{"line_number":51,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_7a6d5f98","line":48,"updated":"2015-11-23 12:47:22.000000000","message":"SubVault is not such a good name for this.\nI suggest to call it a \"Compartment\" or \"Locker\" or \"Pocket\" or \"Parcel\"","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    managed_type: string"},{"line_number":57,"context_line":"    extended_info_schema: JSONSchema"},{"line_number":58,"context_line":"    list_all(type: string, filter: dict) Resource[]"},{"line_number":59,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":60,"context_line":"    get_extended_info(sub_vault: SubVault)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    protect: Action"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_2ea2dd4b","line":59,"updated":"2015-11-19 03:41:21.000000000","message":"Shouldn\u0027t the return value definition be the form Resource[]?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"dcfbd5b7ab5fcee5f66b98dca206378bcbced757","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    managed_type: string"},{"line_number":57,"context_line":"    extended_info_schema: JSONSchema"},{"line_number":58,"context_line":"    list_all(type: string, filter: dict) Resource[]"},{"line_number":59,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":60,"context_line":"    get_extended_info(sub_vault: SubVault)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    protect: Action"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_43e99d19","line":59,"in_reply_to":"ba8a016a_2ea2dd4b","updated":"2015-11-23 11:48:52.000000000","message":"No, it\u0027s a map between a key and a resource.\n\nEg.\n\n {\n   \"vol1\": {id\u003d11, type\u003d\"OS::Cinder::Volume\"},\n   \"vol2\": {id\u003d11, type\u003d\"OS::Cinder::Volume\"}\n }","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    extended_info_schema: JSONSchema"},{"line_number":58,"context_line":"    list_all(type: string, filter: dict) Resource[]"},{"line_number":59,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":60,"context_line":"    get_extended_info(sub_vault: SubVault)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    protect: Action"},{"line_number":63,"context_line":"    verify: Action"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_8e042918","line":60,"updated":"2015-11-19 03:41:21.000000000","message":"Why the parameter is SubVault? ProtectionPlugin seems not related to Bank.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"dcfbd5b7ab5fcee5f66b98dca206378bcbced757","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    extended_info_schema: JSONSchema"},{"line_number":58,"context_line":"    list_all(type: string, filter: dict) Resource[]"},{"line_number":59,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":60,"context_line":"    get_extended_info(sub_vault: SubVault)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    protect: Action"},{"line_number":63,"context_line":"    verify: Action"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_836c659d","line":60,"in_reply_to":"ba8a016a_8e042918","updated":"2015-11-23 11:48:52.000000000","message":"A plugin get\u0027s as an input it\u0027s own section in the bank (SubVault), Reads it and returns a value corresponding to the extenden_info_schema.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dde8b6806a7a70c6a204b410ab4cf8f92c177300","unresolved":false,"context_lines":[{"line_number":92,"context_line":"}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ProtectionPlan {"},{"line_number":95,"context_line":"    name: string"},{"line_number":96,"context_line":"    comments: string"},{"line_number":97,"context_line":"    protection_defintions: []ProtectionDefinition"},{"line_number":98,"context_line":"    bank: Bank"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"ba8a016a_b12f0c87","line":95,"updated":"2015-11-19 03:41:21.000000000","message":"Should contain \u0027ID: UUID\u0027 as well.","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7c0c0fddb365d7c266b891c1d0b1e5f23f600b82","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":59,"context_line":"    get_extended_info(sub_vault: SubVault): dict"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    protect: Action"},{"line_number":62,"context_line":"    verify: Action"},{"line_number":63,"context_line":"    delete: Action"},{"line_number":64,"context_line":"    restore: Action"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9a8ffd7b_a3b984eb","line":61,"updated":"2015-11-25 04:35:39.000000000","message":"Is this protect action synchronous or asynchronous?\nIf it\u0027s asynchronous, how can we get the result of background protecting process?","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"1a6bf57984ac1fb359829edcbdf4c89898123cd7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    get_dependent_resources(resource: Resource): [string]Resource"},{"line_number":59,"context_line":"    get_extended_info(sub_vault: SubVault): dict"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    protect: Action"},{"line_number":62,"context_line":"    verify: Action"},{"line_number":63,"context_line":"    delete: Action"},{"line_number":64,"context_line":"    restore: Action"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"9a8ffd7b_83926e9e","line":61,"in_reply_to":"9a8ffd7b_a3b984eb","updated":"2015-11-30 14:09:53.000000000","message":"This is just the definition of the action. Not where the invocation happens.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4d1b000301c08baa41938438c0a1ca9d407b87ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class Checkpoint {"},{"line_number":49,"context_line":"    tenant_id: UUID"},{"line_number":50,"context_line":"    plan: ProtectionPlan"},{"line_number":51,"context_line":"    status: string"},{"line_number":52,"context_line":"    started_at: DateTime"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_18896675","line":49,"updated":"2015-12-08 03:58:11.000000000","message":"Need a checkpoint_id.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"486c57ff081eebdb7903c9e03e0d24401500562c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class Checkpoint {"},{"line_number":49,"context_line":"    tenant_id: UUID"},{"line_number":50,"context_line":"    plan: ProtectionPlan"},{"line_number":51,"context_line":"    status: string"},{"line_number":52,"context_line":"    started_at: DateTime"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_29991620","line":49,"in_reply_to":"7a740942_18896675","updated":"2015-12-09 15:05:31.000000000","message":"It is possible to add it, but I am not sure why we need it.\nThe unique identifier is the \"started_at\" and \"plan\", and the fact that the checkpoint is created in a specific bank.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"56fd4add657a921787e2f6acdf4ff13ae3075685","unresolved":false,"context_lines":[{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class Checkpoint {"},{"line_number":49,"context_line":"    tenant_id: UUID"},{"line_number":50,"context_line":"    plan: ProtectionPlan"},{"line_number":51,"context_line":"    status: string"},{"line_number":52,"context_line":"    started_at: DateTime"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_3e24caad","line":49,"in_reply_to":"7a740942_29991620","updated":"2015-12-10 05:12:12.000000000","message":"i wonder if it\u0027s necessary to add the \u0027ended_at\u0027, it\u0027s difficult to distinguish the instance when picking up one checkpoint to restore.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"56fd4add657a921787e2f6acdf4ff13ae3075685","unresolved":false,"context_lines":[{"line_number":55,"context_line":"class ScheduledOperation {"},{"line_number":56,"context_line":"    id: UUID"},{"line_number":57,"context_line":"    name: string"},{"line_number":58,"context_line":"    comments: string"},{"line_number":59,"context_line":"    tenant_id: UUID"},{"line_number":60,"context_line":"    trigger: Trigger"},{"line_number":61,"context_line":"    operation: Operation"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_c09a80c5","line":58,"updated":"2015-12-10 05:12:12.000000000","message":"is it necessary to replace \u0027comments\u0027 with \u0027description\u0027; i think it\u0027s helpful for user to understand the model.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4d1b000301c08baa41938438c0a1ca9d407b87ce","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ProtectOperation extends Operation {"},{"line_number":99,"context_line":"    plan: ProtectionPlan"},{"line_number":100,"context_line":"    bank: Bank"},{"line_number":101,"context_line":"}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"ProtectOperation --\u003e ProtectionPlan"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_78150a3e","line":100,"updated":"2015-12-08 03:58:11.000000000","message":"Need override_parameters too?","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9bd92b5789252de262823b96453d51ade07c329c","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ProtectOperation extends Operation {"},{"line_number":99,"context_line":"    plan: ProtectionPlan"},{"line_number":100,"context_line":"    bank: Bank"},{"line_number":101,"context_line":"}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"ProtectOperation --\u003e ProtectionPlan"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_332c83ab","line":100,"in_reply_to":"7a740942_29d7d624","updated":"2015-12-12 08:02:27.000000000","message":"Thanks for your reply.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"486c57ff081eebdb7903c9e03e0d24401500562c","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class ProtectOperation extends Operation {"},{"line_number":99,"context_line":"    plan: ProtectionPlan"},{"line_number":100,"context_line":"    bank: Bank"},{"line_number":101,"context_line":"}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"ProtectOperation --\u003e ProtectionPlan"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_29d7d624","line":100,"in_reply_to":"7a740942_78150a3e","updated":"2015-12-09 15:05:31.000000000","message":"I\u0027m not sure we want to twist the model to accommodate for overrides. \nIt can work just as well (or just as bad) if a \"copy-on-write\" was done on the Plan itself, with revised parameters, and the data model will not be affected.\nPerhaps what you are alluding to here is having a \"Plan Template\", with some default parameters that can be overridden by the user, but if so I think it is out of scope for Smaug, and can be done \"on top\" without affecting the data model.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4d1b000301c08baa41938438c0a1ca9d407b87ce","unresolved":false,"context_lines":[{"line_number":112,"context_line":"RestoreOperation --\u003e Checkpoint: checkpoint to restore"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class DeleteCheckpointOperation extends Operation {"},{"line_number":115,"context_line":"    query: string"},{"line_number":116,"context_line":"    bank: Bank"},{"line_number":117,"context_line":"}"},{"line_number":118,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_d8599e36","line":115,"updated":"2015-12-08 03:58:11.000000000","message":"Shouldn\u0027t this be checkpoint or checkpoint_id?","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9bd92b5789252de262823b96453d51ade07c329c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"RestoreOperation --\u003e Checkpoint: checkpoint to restore"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class DeleteCheckpointOperation extends Operation {"},{"line_number":115,"context_line":"    query: string"},{"line_number":116,"context_line":"    bank: Bank"},{"line_number":117,"context_line":"}"},{"line_number":118,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_73268bcf","line":115,"in_reply_to":"7a740942_c9e5f2dc","updated":"2015-12-12 08:02:27.000000000","message":"Thanks for your reply.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"486c57ff081eebdb7903c9e03e0d24401500562c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"RestoreOperation --\u003e Checkpoint: checkpoint to restore"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class DeleteCheckpointOperation extends Operation {"},{"line_number":115,"context_line":"    query: string"},{"line_number":116,"context_line":"    bank: Bank"},{"line_number":117,"context_line":"}"},{"line_number":118,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":14,"id":"7a740942_c9e5f2dc","line":115,"in_reply_to":"7a740942_d8599e36","updated":"2015-12-09 15:05:31.000000000","message":"I think the checkpoint is found by running the query string.\nThis class is intended to represent \"a request to the bank to delete a checkpoint that matches the query string\".\nIt is possible that more than 1 checkpoints will match the criteria, or that none will.  It is conceivable that such an operation will be scheduled in order to do cleanups in the background, so it may sometimes come up empty.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"class Protectable {"},{"line_number":6,"context_line":"    name: string"},{"line_number":7,"context_line":"    instances: []Resource"},{"line_number":8,"context_line":"    is_root: bool"},{"line_number":9,"context_line":"}"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Protectable --\u003e Resource: lists"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_ab2fdcf4","line":8,"updated":"2015-12-16 10:19:23.000000000","message":"what\u0027s the parameter used for?","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    daily: bool"},{"line_number":50,"context_line":"    weekly: bool"},{"line_number":51,"context_line":"    monthly: bool"},{"line_number":52,"context_line":"    yearly: bool"},{"line_number":53,"context_line":"    protection_plan: ProtectionPlan"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_6b71f4df","line":52,"updated":"2015-12-16 10:19:23.000000000","message":"why not used one enum parameter?","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"ScheduledOperation *- Trigger: when should the operation should trigger"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class BackupPlan extends ScheduledOperation {"},{"line_number":64,"context_line":"    protection_plan: ProtectionPlan"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_ab1cbc77","line":63,"updated":"2015-12-16 10:19:23.000000000","message":"s/BackupPlan/BackupPlanOperation","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"BackupPlan *--\u003e ProtectionPlan"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class DeleteCheckpoints extends ScheduledOperation {"},{"line_number":70,"context_line":"    query: string"},{"line_number":71,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":72,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_a62713b5","line":69,"updated":"2015-12-16 10:19:23.000000000","message":"s/DeleteCheckpoints/DeleteCheckpointsOperation","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ProtectionProvider {"},{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    managed_type: string"},{"line_number":79,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    options_schema: [ResourceType]JSONSchema"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_e6351bda","line":77,"updated":"2015-12-16 10:19:23.000000000","message":"s/description/comments","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    managed_type: string"},{"line_number":79,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":81,"context_line":"    checkpoints: []Checkpoint"},{"line_number":82,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_065f070f","line":79,"updated":"2015-12-16 10:19:23.000000000","message":"miss ResourceType definition","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    keystone_uri: URI"},{"line_number":103,"context_line":"}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class Restoration {"},{"line_number":106,"context_line":"    template: string"},{"line_number":107,"context_line":"    target: RestoreTarget"},{"line_number":108,"context_line":"    provider: ProtectionProvider"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_66428b12","line":105,"updated":"2015-12-16 10:19:23.000000000","message":"is this a Operation too?","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"84a70a57d0eef1e8d64464e624b199577e14401a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    target: RestoreTarget"},{"line_number":108,"context_line":"    provider: ProtectionProvider"},{"line_number":109,"context_line":"    checkpoint: Checkpoint"},{"line_number":110,"context_line":"    started_at: string"},{"line_number":111,"context_line":"}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Restoration *-\u003e RestoreTarget: restores to"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"5a710552_060067a9","line":110,"updated":"2015-12-16 10:19:23.000000000","message":"string type or DateTime? suggest to keep the same as line36.","commit_id":"3cbe3390d300e64a293526dcafa021c0765cbb60"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class Checkpoint {"},{"line_number":32,"context_line":"    id: UUID"},{"line_number":33,"context_line":"    tenant_id: UUID"},{"line_number":34,"context_line":"    plan: ProtectionPlan"},{"line_number":35,"context_line":"    status: string"},{"line_number":36,"context_line":"    started_at: DateTime"},{"line_number":37,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_54e855b4","line":34,"updated":"2015-12-18 07:13:34.000000000","message":"So where\u0027re the plugins? In bank.md, we still have plugins field in each Checkpoint, but here we miss it.  Nor are they in ProtectionPlan fields.  If we\u0027re going to unify plugin and bank into one interface Provider, does that mean Provider has actions:put, get, list, protect, delete, restore, disable, enable, etc.  If that\u0027s the case, it looks like a big mix, composite class.  Any reason to mix them together?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f0b0d6baafe631a80f9de8740ebbe9063c12f28e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class Checkpoint {"},{"line_number":32,"context_line":"    id: UUID"},{"line_number":33,"context_line":"    tenant_id: UUID"},{"line_number":34,"context_line":"    plan: ProtectionPlan"},{"line_number":35,"context_line":"    status: string"},{"line_number":36,"context_line":"    started_at: DateTime"},{"line_number":37,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_407df06c","line":34,"in_reply_to":"3a7e1126_54e855b4","updated":"2015-12-18 08:10:19.000000000","message":"The plugins mechanism did not change it is all the same, we just We decouple User operations from Admin responsibilities.\nWe did it in order to simplify  Smaug User API.\nWe think in the first phase to mange the admin part via configuration and latter expose it as Admin API.\n\nWe all ready got some feedback\u0027s that we should support bank configuration Admin Api in the first version","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_546e1502","line":80,"updated":"2015-12-18 07:13:34.000000000","message":"It seems that we don\u0027t need have checkpoints as fields of ProtectionProvider. To get checkpoints under one provider, we just go to that storage endpoint and list all checkpoints will be enough. Otherwise, each time we write a checkpoint to the storage endpoint of the provider(say, swift), we need write the checkpoint into protectionProvider as well which locates in database. It seems redundant update and will introduce more inconsistency if there\u0027s failure between the two writes.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"dc6e8851d53e532ab9aac236224f2175b82965c1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_8ca2f897","line":80,"in_reply_to":"3a7e1126_44b89de5","updated":"2015-12-20 15:04:00.000000000","message":"According to my understanding, the member checkpoints here doesn\u0027t mean there are checkpoints data supposed to be stored in DB and related to ProtectionProvider.\nIt just indicates that from API perspective, checkpoints come from provider.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f0b0d6baafe631a80f9de8740ebbe9063c12f28e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_c06d6099","line":80,"in_reply_to":"3a7e1126_546e1502","updated":"2015-12-18 08:10:19.000000000","message":"A \"Protection Provider\" is basically a bundle of per-resource protection plugins and a bank, which are sub list from the total available protection plugins and bank plugins.\nIn addition, the Admin configures a Bank Account for each user (tenant).\nSo from the User perspective he assess the checkpoints from the provider","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"54d6e2ef139f2828ee5c5118879b88e1bbdcb65e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_fbc32d87","line":80,"in_reply_to":"3a7e1126_8ca2f897","updated":"2015-12-20 21:12:49.000000000","message":"Yes thanks yingzhe, \n\nthe checkpoint are only stored in the bank but and are accessible via the /provider/\u003cproject_id\u003e/checkpoints \n\nEnables the Smaug user to CRUD access of Protection Checkpoints, \n\nGet:  listing and querying of the existing Checkpoints in a Provider.\nPOST :Create will start a protection process that will create a Vault in the user\u0027s Bank Account, on the Bank that is assigned to the Provider.\n\nDelete: delete the checkpoint","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"715324eebccfcc926869d72160b3b90024a01137","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_44b89de5","line":80,"in_reply_to":"3a7e1126_c06d6099","updated":"2015-12-18 10:31:02.000000000","message":"Yes, I agree that user could access the checkpoints from the provider, but it looks to me that provider API could list checkpoints from bank endpoint which provider has persisted as its field.  I mean we don\u0027t need persist two copies of checkpoints, one in bank, the other in API DB.  This redundancy will introduce some consistency trouble.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"6c32546cfa9a1769807c197e27d0a7802f7d2edb","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_cc28f9e4","line":80,"in_reply_to":"3a7e1126_fbc32d87","updated":"2015-12-21 03:20:21.000000000","message":"Thanks! Got it. Then per my understanding, checkpoints should not be a field of ProtectionProvider, but ProtectionProvider should has a series of checkpoints operations, such as get/post/delete checkpoints.  \nIt\u0027s a bit confusing to me to make them as class fields.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    name: string"},{"line_number":89,"context_line":"    comments: string"},{"line_number":90,"context_line":"    resources: []Resource"},{"line_number":91,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":92,"context_line":"    parameters: dict"},{"line_number":93,"context_line":"    Start()"},{"line_number":94,"context_line":"    Suspend()"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_ba1e4361","line":91,"updated":"2015-12-18 07:13:34.000000000","message":"ProtectionProvider will provide a series of protection plugins, each for one resource type? So we don\u0027t have plugin_id in each resource anymore, just match the resource type to plugins in ProtectionProvider will get the plugin?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    name: string"},{"line_number":89,"context_line":"    comments: string"},{"line_number":90,"context_line":"    resources: []Resource"},{"line_number":91,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":92,"context_line":"    parameters: dict"},{"line_number":93,"context_line":"    Start()"},{"line_number":94,"context_line":"    Suspend()"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_635d8178","line":91,"in_reply_to":"3a7e1126_04a0558f","updated":"2015-12-18 14:51:28.000000000","message":"we need to define mapping between resource UUID and its type this by the type that we get back from the Protectable API like OpenStack::Cinder::Volume-\u003cActual Volume UUID\u003e But the Plugin-id for the mapping is set by the Provider Bandle.\nThe admin will create bundle of per-resource protection plugins and a single bank","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"715324eebccfcc926869d72160b3b90024a01137","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    name: string"},{"line_number":89,"context_line":"    comments: string"},{"line_number":90,"context_line":"    resources: []Resource"},{"line_number":91,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":92,"context_line":"    parameters: dict"},{"line_number":93,"context_line":"    Start()"},{"line_number":94,"context_line":"    Suspend()"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_04a0558f","line":91,"in_reply_to":"3a7e1126_20e4640b","updated":"2015-12-18 10:31:02.000000000","message":"yes, so my question is in which format we persist the mapping resource-\u003eprotection_plugin?  Is there any mapping in provider like:{volume: plugin_id; vm:plugin_id, image:plugin_id}?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"6c32546cfa9a1769807c197e27d0a7802f7d2edb","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    name: string"},{"line_number":89,"context_line":"    comments: string"},{"line_number":90,"context_line":"    resources: []Resource"},{"line_number":91,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":92,"context_line":"    parameters: dict"},{"line_number":93,"context_line":"    Start()"},{"line_number":94,"context_line":"    Suspend()"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_0c104158","line":91,"in_reply_to":"3a7e1126_635d8178","updated":"2015-12-21 03:20:21.000000000","message":"Thanks, got it! Why not define the resource_type-\u003ePlugin_id mapping in ProtectionProvider as its class field?  It would be better for understanding.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f0b0d6baafe631a80f9de8740ebbe9063c12f28e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    name: string"},{"line_number":89,"context_line":"    comments: string"},{"line_number":90,"context_line":"    resources: []Resource"},{"line_number":91,"context_line":"    protection_provider: ProtectionProvider"},{"line_number":92,"context_line":"    parameters: dict"},{"line_number":93,"context_line":"    Start()"},{"line_number":94,"context_line":"    Suspend()"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_20e4640b","line":91,"in_reply_to":"3a7e1126_ba1e4361","updated":"2015-12-18 08:10:19.000000000","message":"The user does not need to select plugin per resource any mor ejust select provider that the admin exposed","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"},{"line_number":108,"context_line":"    checkpoint: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_1a3e77b8","line":105,"updated":"2015-12-18 07:13:34.000000000","message":"what does template mean?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    started_at: string"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Restoration *-\u003e RestoreTarget: restores to"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"@enduml"},{"line_number":115,"context_line":"@startuml"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_5a5b9f2e","line":112,"updated":"2015-12-18 07:13:34.000000000","message":"Is the RestoreTarget a series of resources where data will be restored to, like volume ids, or just an endpoint to tell where the target openstack is and thus restore data there?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f0b0d6baafe631a80f9de8740ebbe9063c12f28e","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    started_at: string"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Restoration *-\u003e RestoreTarget: restores to"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"@enduml"},{"line_number":115,"context_line":"@startuml"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_80899828","line":112,"in_reply_to":"3a7e1126_5a5b9f2e","updated":"2015-12-18 08:10:19.000000000","message":"Restore target will be where to create restored application \n\nkeystone_uri: URI","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"1e1d0bbaf5aeed7da2dd87f904418f6a52c49c9a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"@enduml"},{"line_number":115,"context_line":"@startuml"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"package \"Plugin Examples\" {"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"interface BackupPlugin \u003c\u003caction set\u003e\u003e {"},{"line_number":120,"context_line":"    \u003c\u003cprotect\u003e\u003e create_backup(resource: Resource, bank: Bank)"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_bafde33b","line":117,"updated":"2015-12-18 07:13:34.000000000","message":"How does plugins interact with other components?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"@enduml"},{"line_number":115,"context_line":"@startuml"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"package \"Plugin Examples\" {"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"interface BackupPlugin \u003c\u003caction set\u003e\u003e {"},{"line_number":120,"context_line":"    \u003c\u003cprotect\u003e\u003e create_backup(resource: Resource, bank: Bank)"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"3a7e1126_23dbf9ed","line":117,"in_reply_to":"3a7e1126_bafde33b","updated":"2015-12-18 14:51:28.000000000","message":"The same way they interact  before we did not change that","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    tenant_id: UUID"},{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class PlanRetention extends AutomaticOperation {"},{"line_number":49,"context_line":"    daily: bool"},{"line_number":50,"context_line":"    weekly: bool"},{"line_number":51,"context_line":"    monthly: bool"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_7e3e5429","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":19},"updated":"2015-12-29 07:33:49.000000000","message":"i\u0027m not sure why not use an enum instead of list all the opetion parameters here.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    tenant_id: UUID"},{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class PlanRetention extends AutomaticOperation {"},{"line_number":49,"context_line":"    daily: bool"},{"line_number":50,"context_line":"    weekly: bool"},{"line_number":51,"context_line":"    monthly: bool"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_92121156","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":19},"in_reply_to":"1a7b0d38_7e3e5429","updated":"2015-12-29 09:56:54.000000000","message":"Because all operations have different options.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"f342e463affbb803c9ca73fb48bb7120e66b3850","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    tenant_id: UUID"},{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class PlanRetention extends AutomaticOperation {"},{"line_number":49,"context_line":"    daily: bool"},{"line_number":50,"context_line":"    weekly: bool"},{"line_number":51,"context_line":"    monthly: bool"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_8d943443","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":19},"in_reply_to":"1a7b0d38_92121156","updated":"2015-12-29 10:35:56.000000000","message":"i do not think i completely understand what\u0027s the responsibility of this class","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ProtectionProvider {"},{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_5ed35804","line":75,"range":{"start_line":75,"start_character":6,"end_line":75,"end_character":24},"updated":"2015-12-29 07:33:49.000000000","message":"i think it\u0027s unnecessary to present a \"Provider\" to the end user. what user considered more is i want to protect my resource, also he must decide which resource should be protected. it\u0027s admin\u0027s job to consider how to protect them and where does the protection data really locate. that means admin should provide a service to end user instead of a basket of tools.\nit\u0027s just my opinion.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ProtectionProvider {"},{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_528b4968","line":75,"range":{"start_line":75,"start_character":6,"end_line":75,"end_character":24},"in_reply_to":"1a7b0d38_5ed35804","updated":"2015-12-29 09:56:54.000000000","message":"We agree that the exact details of how and where to protect should be hidden from the user and this is what the provider is for. But we do think that the admin might want to provide options of storage provider. For example to provide the user different levels of protection.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ProtectionProvider {"},{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_9e5460fe","line":77,"range":{"start_line":77,"start_character":4,"end_line":77,"end_character":15},"updated":"2015-12-29 07:33:49.000000000","message":"should use comments to be consistent with other objects.\ns/description/comments","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ProtectionProvider {"},{"line_number":76,"context_line":"    name: string"},{"line_number":77,"context_line":"    description: string"},{"line_number":78,"context_line":"    extended_info_schema: [ResourceType]JSONSchema"},{"line_number":79,"context_line":"    options_schema: [ResourceType]JSONSchema"},{"line_number":80,"context_line":"    checkpoints: []Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_724d253d","line":77,"range":{"start_line":77,"start_character":4,"end_line":77,"end_character":15},"in_reply_to":"1a7b0d38_9e5460fe","updated":"2015-12-29 09:56:54.000000000","message":"Done","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    keystone_uri: URI"},{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_de38a8a2","line":104,"range":{"start_line":104,"start_character":6,"end_line":104,"end_character":17},"updated":"2015-12-29 07:33:49.000000000","message":"add id:UUID\nadd tenant_id:UUID","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    keystone_uri: URI"},{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_52bfc9a9","line":104,"range":{"start_line":104,"start_character":6,"end_line":104,"end_character":17},"in_reply_to":"1a7b0d38_de38a8a2","updated":"2015-12-29 09:56:54.000000000","message":"Done","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"67e09b39d2253d1de5ad0ac8112e1a670f219e9c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"},{"line_number":108,"context_line":"    checkpoint: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_de5f48e3","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":12},"updated":"2015-12-29 07:33:49.000000000","message":"i\u0027m not sure why need a template? is it the heat template?","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"f342e463affbb803c9ca73fb48bb7120e66b3850","unresolved":false,"context_lines":[{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"},{"line_number":108,"context_line":"    checkpoint: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_4d508cd4","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":12},"in_reply_to":"1a7b0d38_d237394b","updated":"2015-12-29 10:35:56.000000000","message":"agree","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9cab24428530b13aedc8c9c1276b659229dfe0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class Restoration {"},{"line_number":105,"context_line":"    template: string"},{"line_number":106,"context_line":"    target: RestoreTarget"},{"line_number":107,"context_line":"    provider: ProtectionProvider"},{"line_number":108,"context_line":"    checkpoint: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"1a7b0d38_d237394b","line":105,"range":{"start_line":105,"start_character":4,"end_line":105,"end_character":12},"in_reply_to":"1a7b0d38_de5f48e3","updated":"2015-12-29 09:56:54.000000000","message":"It\u0027s the heat template. We are not yet sure how we are going to really pass it to the user though. I might just remove this field for now since people find it confusing.","commit_id":"088ba3ef967b5635793b004c3094e08a6cf9b223"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f7780290d52fb989dc6c8a60e2d4a3906709e38d","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class ProtectionPlan {"},{"line_number":78,"context_line":"    id: UUID"},{"line_number":79,"context_line":"    is_enabled: boolean"},{"line_number":80,"context_line":"    name: string"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"fa69d971_c971ed0d","line":77,"range":{"start_line":77,"start_character":6,"end_line":77,"end_character":20},"updated":"2016-01-09 10:13:34.000000000","message":"Missing status Running/ suspended","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    parameters: dict"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"ProtectionPlan \"1\" *--\u003e \"N\" Resource: aggragates"},{"line_number":89,"context_line":"ProtectionPlan -\u003e ProtectionProvider"},{"line_number":90,"context_line":"ProtectionPlan -\u003e ePlanStatus"},{"line_number":91,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":25,"id":"da6ed579_43bb0776","line":88,"updated":"2016-01-16 16:55:07.000000000","message":"nit: s/aggragate/aggregate/","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    parameters: dict"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"ProtectionPlan \"1\" *--\u003e \"N\" Resource: aggragates"},{"line_number":89,"context_line":"ProtectionPlan -\u003e ProtectionProvider"},{"line_number":90,"context_line":"ProtectionPlan -\u003e ePlanStatus"},{"line_number":91,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":25,"id":"da6ed579_223fd226","line":88,"in_reply_to":"da6ed579_43bb0776","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"7deac8dd6c06b09477569d7ca971113077e6c291","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    checkpoints: []Checkpoint"},{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class ProtectionPlan {"},{"line_number":79,"context_line":"    id: UUID"}],"source_content_type":"application/octet-stream","patch_set":26,"id":"7a5de9d1_36d639c6","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":18},"updated":"2016-01-28 03:44:10.000000000","message":"if i understand correctly, what user concern is his plan instead of a provider, and one ProtectionProvider can be used in different ProtectionPlan, so, when list all the checkpoints of one provider, it will list all the checkpoints of all its plans(the plan may belong to different users). I wonder if there is any scenario that need provider to list all the checkpoint?","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9dbc009d18362f563a1f226a6683bf5787103c32","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    checkpoints: []Checkpoint"},{"line_number":74,"context_line":"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"ProtectionProvider o-\u003e Checkpoint: lists"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class ProtectionPlan {"},{"line_number":79,"context_line":"    id: UUID"}],"source_content_type":"application/octet-stream","patch_set":26,"id":"7a5de9d1_a5c3d137","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":18},"in_reply_to":"7a5de9d1_36d639c6","updated":"2016-02-02 23:47:48.000000000","message":"It will be rare that the user will list all the checkpoints. This will mostly be used with a filter in the API either by Plan or by date.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"enum ePlanStatus {"},{"line_number":93,"context_line":"    started"},{"line_number":94,"context_line":"    stopped"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class RestoreTarget {"}],"source_content_type":"application/octet-stream","patch_set":26,"id":"9a68dd71_ed99e120","line":94,"range":{"start_line":94,"start_character":4,"end_line":94,"end_character":11},"updated":"2016-01-20 12:51:03.000000000","message":"Should be suspended","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"7deac8dd6c06b09477569d7ca971113077e6c291","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class Restoration {"},{"line_number":102,"context_line":"    id: UUID"},{"line_number":103,"context_line":"    protiect_id: UUID"},{"line_number":104,"context_line":"    target: RestoreTarget"},{"line_number":105,"context_line":"    provider: ProtectionProvider"},{"line_number":106,"context_line":"    checkpoint: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":26,"id":"7a5de9d1_96adad8a","line":103,"range":{"start_line":103,"start_character":4,"end_line":103,"end_character":15},"updated":"2016-01-28 03:44:10.000000000","message":"s/project_id/tenant_id\nwhich keystone version  shall we plan to support?","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"}],"doc/source/api/class_diagram_001.svg":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ff3cc4151e993b585bc8382b2a5facb3b58672a1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\" standalone\u003d\"yes\"?\u003e\u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\" height\u003d\"187px\" style\u003d\"width:1550px;height:187px;\" version\u003d\"1.1\" viewBox\u003d\"0 0 1550 187\" width\u003d\"1550px\"\u003e\u003cdefs\u003e\u003cfilter height\u003d\"300%\" id\u003d\"f1\" width\u003d\"300%\" x\u003d\"-1\" y\u003d\"-1\"\u003e\u003cfeGaussianBlur result\u003d\"blurOut\" stdDeviation\u003d\"2.0\"/\u003e\u003cfeColorMatrix in\u003d\"blurOut\" result\u003d\"blurOut2\" type\u003d\"matrix\" values\u003d\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0\"/\u003e\u003cfeOffset dx\u003d\"4.0\" dy\u003d\"4.0\" in\u003d\"blurOut2\" result\u003d\"blurOut3\"/\u003e\u003cfeBlend in\u003d\"SourceGraphic\" in2\u003d\"blurOut3\" mode\u003d\"normal\"/\u003e\u003c/filter\u003e\u003c/defs\u003e\u003cg\u003e\u003cpolygon fill\u003d\"#FFFFFF\" filter\u003d\"url(#f1)\" points\u003d\"22,24,155,24,162,46.2969,1543,46.2969,1543,180,22,180,22,24\" style\u003d\"stroke: #000000; stroke-width: 2.0;\"/\u003e\u003cline style\u003d\"stroke: #000000; stroke-width: 2.0;\" x1\u003d\"22\" x2\u003d\"162\" y1\u003d\"46.2969\" y2\u003d\"46.2969\"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"14\" font-weight\u003d\"bold\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"127\" x\u003d\"26\" y\u003d\"38.9951\"\u003ePlugin Examples\u003c/text\u003e\u003crect fill\u003d\"#FEFECE\" filter\u003d\"url(#f1)\" height\u003d\"92.3516\" style\u003d\"stroke: #A80036; stroke-width: 1.5;\" width\u003d\"343\" x\u003d\"358.5\" y\u003d\"65.5\"/\u003e\u003cellipse cx\u003d\"484.25\" cy\u003d\"84.4688\" fill\u003d\"#B4A7E5\" rx\u003d\"11\" ry\u003d\"11\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003cpath d\u003d\"M480.1719,80.2344 L480.1719,78.0781 L487.5625,78.0781 L487.5625,80.2344 L485.0938,80.2344 L485.0938,88.3125 L487.5625,88.3125 L487.5625,90.4688 L480.1719,90.4688 L480.1719,88.3125 L482.6406,88.3125 L482.6406,80.2344 L480.1719,80.2344 Z \"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"76\" x\u003d\"508.25\" y\u003d\"81.6387\"\u003e«action set»\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"83\" x\u003d\"504.75\" y\u003d\"95.6074\"\u003eBackupPlugin\u003c/text\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"359.5\" x2\u003d\"700.5\" y1\u003d\"103.4375\" y2\u003d\"103.4375\"/\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"359.5\" x2\u003d\"700.5\" y1\u003d\"111.4375\" y2\u003d\"111.4375\"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"331\" x\u003d\"364.5\" y\u003d\"125.6479\"\u003e«protect» create_backup(resource: Resource, bank: Bank)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"223\" x\u003d\"364.5\" y\u003d\"138.4526\"\u003e«verify» verify_backup(backup: Backup)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"231\" x\u003d\"364.5\" y\u003d\"151.2573\"\u003e«delete» delete_backup(backup: Backup)\u003c/text\u003e\u003crect fill\u003d\"#FEFECE\" filter\u003d\"url(#f1)\" height\u003d\"105.1563\" style\u003d\"stroke: #A80036; stroke-width: 1.5;\" width\u003d\"617\" x\u003d\"736.5\" y\u003d\"59\"/\u003e\u003cellipse cx\u003d\"987.75\" cy\u003d\"77.9688\" fill\u003d\"#B4A7E5\" rx\u003d\"11\" ry\u003d\"11\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003cpath d\u003d\"M983.6719,73.7344 L983.6719,71.5781 L991.0625,71.5781 L991.0625,73.7344 L988.5938,73.7344 L988.5938,81.8125 L991.0625,81.8125 L991.0625,83.9688 L983.6719,83.9688 L983.6719,81.8125 L986.1406,81.8125 L986.1406,73.7344 L983.6719,73.7344 Z \"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"76\" x\u003d\"1023.25\" y\u003d\"75.1387\"\u003e«action set»\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"106\" x\u003d\"1008.25\" y\u003d\"89.1074\"\u003eReplicationPlugin\u003c/text\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"737.5\" x2\u003d\"1352.5\" y1\u003d\"96.9375\" y2\u003d\"96.9375\"/\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"737.5\" x2\u003d\"1352.5\" y1\u003d\"104.9375\" y2\u003d\"104.9375\"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"465\" x\u003d\"742.5\" y\u003d\"119.1479\"\u003e«enable» start_replication(resource: Resource, replicationType: eReplicationType)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"605\" x\u003d\"742.5\" y\u003d\"131.9526\"\u003e«protect» create_snapshot_from_replicated_target(resource: Resource, replicationType: eReplicationType)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"464\" x\u003d\"742.5\" y\u003d\"144.7573\"\u003e«delete» delete_snapshot(resource: Resource, replicationType: eReplicationType)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"269\" x\u003d\"742.5\" y\u003d\"157.562\"\u003e«disable» stop_replication(resource: Resource)\u003c/text\u003e\u003crect fill\u003d\"#FEFECE\" filter\u003d\"url(#f1)\" height\u003d\"73.6094\" style\u003d\"stroke: #A80036; stroke-width: 1.5;\" width\u003d\"138\" x\u003d\"1389\" y\u003d\"74.5\"/\u003e\u003cellipse cx\u003d\"1404\" cy\u003d\"90.5\" fill\u003d\"#EB937F\" rx\u003d\"11\" ry\u003d\"11\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003cpath d\u003d\"M1408.1094,96.5 L1400.3906,96.5 L1400.3906,84.1094 L1408.1094,84.1094 L1408.1094,86.2656 L1402.8438,86.2656 L1402.8438,88.9375 L1407.6094,88.9375 L1407.6094,91.0938 L1402.8438,91.0938 L1402.8438,94.3438 L1408.1094,94.3438 L1408.1094,96.5 Z \"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"106\" x\u003d\"1418\" y\u003d\"94.6543\"\u003eeReplicationType\u003c/text\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"1390\" x2\u003d\"1526\" y1\u003d\"106.5\" y2\u003d\"106.5\"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"60\" x\u003d\"1395\" y\u003d\"120.7104\"\u003ehypervisor\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"35\" x\u003d\"1395\" y\u003d\"133.5151\"\u003ecinder\u003c/text\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"1390\" x2\u003d\"1526\" y1\u003d\"140.1094\" y2\u003d\"140.1094\"/\u003e\u003crect fill\u003d\"#FEFECE\" filter\u003d\"url(#f1)\" height\u003d\"92.3516\" style\u003d\"stroke: #A80036; stroke-width: 1.5;\" width\u003d\"285\" x\u003d\"38.5\" y\u003d\"65.5\"/\u003e\u003cellipse cx\u003d\"128.75\" cy\u003d\"84.4688\" fill\u003d\"#B4A7E5\" rx\u003d\"11\" ry\u003d\"11\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003cpath d\u003d\"M124.6719,80.2344 L124.6719,78.0781 L132.0625,78.0781 L132.0625,80.2344 L129.5938,80.2344 L129.5938,88.3125 L132.0625,88.3125 L132.0625,90.4688 L124.6719,90.4688 L124.6719,88.3125 L127.1406,88.3125 L127.1406,80.2344 L124.6719,80.2344 Z \"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"76\" x\u003d\"159.25\" y\u003d\"81.6387\"\u003e«action set»\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"12\" font-style\u003d\"italic\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"96\" x\u003d\"149.25\" y\u003d\"95.6074\"\u003eSnapshotPlugin\u003c/text\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"39.5\" x2\u003d\"322.5\" y1\u003d\"103.4375\" y2\u003d\"103.4375\"/\u003e\u003cline style\u003d\"stroke: #A80036; stroke-width: 1.5;\" x1\u003d\"39.5\" x2\u003d\"322.5\" y1\u003d\"111.4375\" y2\u003d\"111.4375\"/\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"273\" x\u003d\"44.5\" y\u003d\"125.6479\"\u003e«protect» create_snapshot(resource: Resource)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"262\" x\u003d\"44.5\" y\u003d\"138.4526\"\u003e«verify» verify_snapshot(snapshot: Snapshot)\u003c/text\u003e\u003ctext fill\u003d\"#000000\" font-family\u003d\"sans-serif\" font-size\u003d\"11\" lengthAdjust\u003d\"spacingAndGlyphs\" textLength\u003d\"270\" x\u003d\"44.5\" y\u003d\"151.2573\"\u003e«delete» delete_snapshot(snapshot: Snapshot)\u003c/text\u003e\u003cpath d\u003d\"M1353.54,111.5 C1363.5,111.5 1373.46,111.5 1383.42,111.5 \" fill\u003d\"none\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003cpolygon fill\u003d\"#A80036\" points\u003d\"1388.63,111.5,1379.63,107.5,1383.63,111.5,1379.63,115.5,1388.63,111.5\" style\u003d\"stroke: #A80036; stroke-width: 1.0;\"/\u003e\u003c/g\u003e\u003c/svg\u003e"}],"source_content_type":"application/xml","patch_set":13,"id":"7a740942_5e65e1de","line":1,"updated":"2015-12-06 08:57:39.000000000","message":"Need to be updated, enable disable ....","commit_id":"0f72673175501c33316432c9b02969ed6453574b"}],"doc/source/api/smaug_api.v1.md":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"### Create a Protection Plan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"*response missing Plan_ID*"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"`POST` : `/v1/{tenant_id}/plans/`"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_215cc3ec","line":7,"updated":"2015-11-13 09:58:49.000000000","message":"Why?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"### Create a Protection Plan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"*response missing Plan_ID*"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"`POST` : `/v1/{tenant_id}/plans/`"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_f2cf6b27","line":7,"in_reply_to":"da85f559_215cc3ec","updated":"2015-11-13 10:58:14.000000000","message":"Will be added in the next patch","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":14,"context_line":"|tenant_id|URI|csapi:UUID|The tenant ID in a multi-tenancy cloud."},{"line_number":15,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":16,"context_line":"|comments (optional)|plain|xsd:string| Plan comments."},{"line_number":17,"context_line":"|bank_id|plain|xsd:string|Id of the bank."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"#### Response JSON"},{"line_number":20,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_01409f06","line":17,"updated":"2015-11-13 09:58:49.000000000","message":"Didn\u0027t see where to specify protection defintions.","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"|tenant_id|URI|csapi:UUID|The tenant ID in a multi-tenancy cloud."},{"line_number":15,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":16,"context_line":"|comments (optional)|plain|xsd:string| Plan comments."},{"line_number":17,"context_line":"|bank_id|plain|xsd:string|Id of the bank."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"#### Response JSON"},{"line_number":20,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_32173356","line":17,"in_reply_to":"da85f559_01409f06","updated":"2015-11-13 10:58:14.000000000","message":"Please look at line 74 \n/v1/{tenant_id}/plans/\u003cplan_id\u003e/protection_defintions/","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":19,"context_line":"#### Response JSON"},{"line_number":20,"context_line":"```json"},{"line_number":21,"context_line":"{"},{"line_number":22,"context_line":"    \"plans\": ["},{"line_number":23,"context_line":"        {"},{"line_number":24,"context_line":"            \"name\": \"My Plan\","},{"line_number":25,"context_line":"            \"comments\": \"This protects everything that I love\","}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_e8ac6037","line":22,"updated":"2015-11-13 09:58:49.000000000","message":"This API only support create one plan at a time.\nSo is it necessary to return plan info within a list?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"#### Response JSON"},{"line_number":20,"context_line":"```json"},{"line_number":21,"context_line":"{"},{"line_number":22,"context_line":"    \"plans\": ["},{"line_number":23,"context_line":"        {"},{"line_number":24,"context_line":"            \"name\": \"My Plan\","},{"line_number":25,"context_line":"            \"comments\": \"This protects everything that I love\","}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_b28803c8","line":22,"in_reply_to":"da85f559_e8ac6037","updated":"2015-11-13 10:58:14.000000000","message":"Good point the response should be created plan info,\nWill be changed","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":76,"context_line":"|Parameter|Style|Type|Description"},{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_81f00fcb","line":79,"updated":"2015-11-13 09:58:49.000000000","message":"plan-\u003edefinition","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"564aec3093853a8bd520de197cf2661502a2fed5","unresolved":false,"context_lines":[{"line_number":76,"context_line":"|Parameter|Style|Type|Description"},{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_f4b95bed","line":79,"in_reply_to":"da85f559_4d03360e","updated":"2015-11-16 02:00:53.000000000","message":"I thought it\u0027s a name for this protection definition self.\nIsn\u0027t it?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"|Parameter|Style|Type|Description"},{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_4d03360e","line":79,"in_reply_to":"da85f559_81f00fcb","updated":"2015-11-13 10:58:14.000000000","message":"I am not sure I understand ?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_c1cdb787","line":80,"updated":"2015-11-13 09:58:49.000000000","message":"plan-\u003edefinition","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_0d0d2e37","line":80,"in_reply_to":"da85f559_c1cdb787","updated":"2015-11-13 10:58:14.000000000","message":"same ?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"},{"line_number":84,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_61088b92","line":81,"updated":"2015-11-13 09:58:49.000000000","message":"Why resource type is dict?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"564aec3093853a8bd520de197cf2661502a2fed5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"},{"line_number":84,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_f48e3b26","line":81,"in_reply_to":"da85f559_2db592cf","updated":"2015-11-16 02:00:53.000000000","message":"So this resource parameter should be the form like:\n{\u0027resource_type\u0027: \u0027resource_id\u0027}?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"},{"line_number":84,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_2db592cf","line":81,"in_reply_to":"da85f559_61088b92","updated":"2015-11-13 10:58:14.000000000","message":"This is a good questions, we think it should be a dict for the following reasons:\n1) Protection Plugin can protect more then one resource, the most common use case will be 1 to 1 but we see a use case of a vendor wanting to protect few resources in one protection plugin.\n2) We do not want mandate the plugin to have an internal DB for the ID mapping and other extra resource info/metadata, \n3) The Smaug infrastructure will not know any thing about this resource it does not have to be part of OpenStack, it could be a DB,..., but we do want the ability to show the User some metadata and info regarding the protected resource.\n\nAs you could see below we have an example of Cinder Volume resource","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":150,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":151,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":152,"context_line":"| tenant_id\t                           | URI   |csapi:UUID\t | The tenant ID in a multi-tenancy cloud."},{"line_number":153,"context_line":"| sort (Optional)                      | query | xsd:string   | Comma-separated list of sort keys and optional sort directions in the form of \u0026lt;key\u0026gt;[:\u0026lt;direction\u0026gt;]. A valid direction is asc (ascending) or desc (descending). |"},{"line_number":154,"context_line":"| limit (Optional)       | query | xsd:int      | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request. |"},{"line_number":155,"context_line":"|marker (Optional)\t   |query |xsd:string|\tSpecifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_fcb2e205","line":153,"updated":"2015-11-13 09:58:49.000000000","message":"\u0026lt;key\u0026gt;[:\u0026lt;direction\u0026gt;] -\u003e \u003ckey\u003e[:\u003cdirection\u003e]","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":150,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":151,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":152,"context_line":"| tenant_id\t                           | URI   |csapi:UUID\t | The tenant ID in a multi-tenancy cloud."},{"line_number":153,"context_line":"| sort (Optional)                      | query | xsd:string   | Comma-separated list of sort keys and optional sort directions in the form of \u0026lt;key\u0026gt;[:\u0026lt;direction\u0026gt;]. A valid direction is asc (ascending) or desc (descending). |"},{"line_number":154,"context_line":"| limit (Optional)       | query | xsd:int      | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request. |"},{"line_number":155,"context_line":"|marker (Optional)\t   |query |xsd:string|\tSpecifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_d2aca737","line":153,"in_reply_to":"da85f559_fcb2e205","updated":"2015-11-13 10:58:14.000000000","message":"Done","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f34c7f3287d42e115460609a1faf4d85d5ac4d15","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"## Bank Plugin"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"### List available bank plugins"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"`GET` : `/v1/bank_plugins/`"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_1cd566b8","line":177,"updated":"2015-11-13 09:58:49.000000000","message":"Didn\u0027t understand why user need to know what bank plugins available. The api \"List available banks\" below isn\u0027t enough?","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"4ffdbf4e545b2562a380894823e170a0b648defb","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"## Bank Plugin"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"### List available bank plugins"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"`GET` : `/v1/bank_plugins/`"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":5,"id":"da85f559_6d4ddac3","line":177,"in_reply_to":"da85f559_1cd566b8","updated":"2015-11-13 10:58:14.000000000","message":"We first get a list of the Bank Plugins that the Admin configured, e.g swift ,s3 ...\n\nThis is global API with no multi tenancy, the second is  to configure a specific bank (more like an account for the tenant ) maybe we should rename it to bank_accounts","commit_id":"156d8c747caa3914c1c6228591c1cc7618c4e657"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"6275afcec00e8fdbdfae427c8ed7e42b0d96421d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"name\": \"My Plan\","},{"line_number":48,"context_line":"            \"id\": \"666\","},{"line_number":49,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":50,"context_line":"            \"bank_id\": \"12312412321\""},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"    ]"},{"line_number":53,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_0f8ba61f","line":50,"updated":"2015-11-16 06:14:39.000000000","message":"Is it necessary to show the parameter protection_defintions value here?","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"name\": \"My Plan\","},{"line_number":48,"context_line":"            \"id\": \"666\","},{"line_number":49,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":50,"context_line":"            \"bank_id\": \"12312412321\""},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"    ]"},{"line_number":53,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_ae05b7c2","line":50,"in_reply_to":"da85f559_0f8ba61f","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"6275afcec00e8fdbdfae427c8ed7e42b0d96421d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"    ]"},{"line_number":53,"context_line":"```"},{"line_number":54,"context_line":"### Show backup plan details"},{"line_number":55,"context_line":"`GET` : `/v1/plans/{plan_id}`"},{"line_number":56,"context_line":"#### Request parameters"},{"line_number":57,"context_line":"|Parameter|Style|Type|Description"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_4fd68ef2","line":54,"updated":"2015-11-16 06:14:39.000000000","message":"The plan is a protection plan, not only a backup plan.  backup-\u003eprotection","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":"    ]"},{"line_number":53,"context_line":"```"},{"line_number":54,"context_line":"### Show backup plan details"},{"line_number":55,"context_line":"`GET` : `/v1/plans/{plan_id}`"},{"line_number":56,"context_line":"#### Request parameters"},{"line_number":57,"context_line":"|Parameter|Style|Type|Description"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_4b73dde7","line":54,"in_reply_to":"da85f559_4fd68ef2","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"6275afcec00e8fdbdfae427c8ed7e42b0d96421d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"|Parameter|Style|Type|Description"},{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_cf3d9ede","line":79,"updated":"2015-11-16 06:14:39.000000000","message":"The description of the parameter name should be \u0027Friendly name for the protection definition.\u0027","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":76,"context_line":"|Parameter|Style|Type|Description"},{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_eee73f3e","line":79,"in_reply_to":"da85f559_cf3d9ede","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"6275afcec00e8fdbdfae427c8ed7e42b0d96421d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_8a3544dc","line":80,"updated":"2015-11-16 06:14:39.000000000","message":"The description. Plan-\u003eProtection definition.","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":77,"context_line":"|:-|:-|:-|:-"},{"line_number":78,"context_line":"|tenant_id|URI|csapi:UUID| The tenant ID in a multi-tenancy cloud."},{"line_number":79,"context_line":"|name|plain|xsd:string|Friendly name for the plan."},{"line_number":80,"context_line":"|description (optional)|plain|xsd:string|Plan description."},{"line_number":81,"context_line":"|resource| plain | xsd:dict| Resource instance id."},{"line_number":82,"context_line":"|plugin_id| plain | xsd:string | protection plugin id."},{"line_number":83,"context_line":"|parameters| plain | xsd:dict| parameters for the actions"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_0ee3a334","line":80,"in_reply_to":"da85f559_8a3544dc","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"41ebe55e3adc9c2c0d3790b18e3011ef8ecaee25","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":245,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":246,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":247,"context_line":"        }"},{"line_number":248,"context_line":"```"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"`GET` : `/v1/{tenant_id}/{plan_id}/operations/schedule`"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_74d1ebfa","line":247,"updated":"2015-11-16 02:00:17.000000000","message":"Lack a }.","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":245,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":246,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":247,"context_line":"        }"},{"line_number":248,"context_line":"```"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"`GET` : `/v1/{tenant_id}/{plan_id}/operations/schedule`"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_8ecd53b9","line":247,"in_reply_to":"da85f559_74d1ebfa","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"41ebe55e3adc9c2c0d3790b18e3011ef8ecaee25","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        },"},{"line_number":271,"context_line":"        {"},{"line_number":272,"context_line":"        }"},{"line_number":273,"context_line":"    ]"},{"line_number":274,"context_line":"```"},{"line_number":275,"context_line":"## Triggers"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_d40e978b","line":273,"updated":"2015-11-16 02:00:17.000000000","message":"Lack a }","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        },"},{"line_number":271,"context_line":"        {"},{"line_number":272,"context_line":"        }"},{"line_number":273,"context_line":"    ]"},{"line_number":274,"context_line":"```"},{"line_number":275,"context_line":"## Triggers"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_ce3a7b98","line":273,"in_reply_to":"da85f559_d40e978b","updated":"2015-11-16 07:41:57.000000000","message":"Done","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"41ebe55e3adc9c2c0d3790b18e3011ef8ecaee25","unresolved":false,"context_lines":[{"line_number":282,"context_line":"| :--------------------- | :---: | :----------: | :---------- |"},{"line_number":283,"context_line":"| name                   | plain | xsd:string   | The name of the storage pool. |"},{"line_number":284,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool. |"},{"line_number":285,"context_line":"| type                   | plain | xsd:string   | The type of the trigger. |"},{"line_number":286,"context_line":"##### Extra fields for `type\u003d\u003d\"timed_trigger\"`"},{"line_number":287,"context_line":"| Parameter      | Style | Type         | Description |"},{"line_number":288,"context_line":"| :------------- | :---: | :----------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_34e5a3a7","line":285,"updated":"2015-11-16 02:00:17.000000000","message":"The supported trigger type currently only is timed_trigger?","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d0550d36e55e49594634e252b2d1d0fedc977bed","unresolved":false,"context_lines":[{"line_number":282,"context_line":"| :--------------------- | :---: | :----------: | :---------- |"},{"line_number":283,"context_line":"| name                   | plain | xsd:string   | The name of the storage pool. |"},{"line_number":284,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool. |"},{"line_number":285,"context_line":"| type                   | plain | xsd:string   | The type of the trigger. |"},{"line_number":286,"context_line":"##### Extra fields for `type\u003d\u003d\"timed_trigger\"`"},{"line_number":287,"context_line":"| Parameter      | Style | Type         | Description |"},{"line_number":288,"context_line":"| :------------- | :---: | :----------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"da85f559_2e730782","line":285,"in_reply_to":"da85f559_34e5a3a7","updated":"2015-11-16 07:41:57.000000000","message":"Yes for V.1 only time trigger. Do you think we need to support other type for the first version of the API  ?","commit_id":"f9c65b3d8c7663a90e492a596b1cb4edb25b1fcf"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":48,"context_line":"            \"bank_id\": \"12312412321\""},{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":"    ]"},{"line_number":51,"context_line":"```"},{"line_number":52,"context_line":"### Show protection plan details"},{"line_number":53,"context_line":"`GET` : `/v1/plans/{plan_id}`"}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_39fa73be","line":50,"updated":"2015-11-16 08:40:41.000000000","message":"missing }","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":148,"context_line":"}"},{"line_number":149,"context_line":"```"},{"line_number":150,"context_line":"### Get  which resources can be protected by Protecteion Plugin"},{"line_number":151,"context_line":"`GET`:`/v1/{tenant_id}/protection_plugins/{plugin_id}/list`"},{"line_number":152,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":153,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":154,"context_line":"| tenant_id\t                           | URI   |csapi:UUID\t | The tenant ID in a multi-tenancy cloud."}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_f9f14bce","line":151,"updated":"2015-11-16 08:40:41.000000000","message":"change name to resources","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":157,"context_line":"|marker (Optional)\t   |query |xsd:string|\tSpecifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"## Get  which resources are dependent on a specific parent resource"},{"line_number":160,"context_line":"GET` : `/v1/{tenant_id}/protection_plugins/{plugin_id}/get_dependent_resources`"},{"line_number":161,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":162,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":163,"context_line":"| tenant_id| URI   |csapi:UUID\t | The tenant ID in a multi-tenancy cloud."}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_79b47bf1","line":160,"updated":"2015-11-16 08:40:41.000000000","message":"Change to dependent_resources","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":223,"context_line":"{"},{"line_number":224,"context_line":"    \"id\": \"123\","},{"line_number":225,"context_line":"    \"operation_type\": \"protect\","},{"line_number":226,"context_line":"    \"status\": \"in progress\""},{"line_number":227,"context_line":"}"},{"line_number":228,"context_line":"```"},{"line_number":229,"context_line":"###   Schedule operation"}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_59d97782","line":226,"updated":"2015-11-16 08:40:41.000000000","message":"Add transaction link","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"### Ledger Transactions information"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"`GET` : `/v1/{tenant_id}/{plan_id}/transaction/`"},{"line_number":310,"context_line":"##### Request parameters"},{"line_number":311,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":312,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_995b5ff6","line":309,"updated":"2015-11-16 08:40:41.000000000","message":"Change to bank API","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af2aa448e6c45368c580302ee9d61799cc5a671d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"}"},{"line_number":339,"context_line":"```"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"`GET` : `/v1/{tenant_id}/{plan_id}/transaction/{transaction_id}/{protection_definition_id}`/`"},{"line_number":342,"context_line":"##### Request parameters"},{"line_number":343,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":344,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":7,"id":"da85f559_596e5797","line":341,"updated":"2015-11-16 08:40:41.000000000","message":"Change to bank API","commit_id":"060a116d8542a3d819ff6a7c5dace6e97324bfd2"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"7876e33d60e1088a8e4304c0a41088b8947f6959","unresolved":false,"context_lines":[{"line_number":12,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":13,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":14,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the plan."},{"line_number":15,"context_line":"| comments (optional)                  | plain | xsd:string  | Plan comments."},{"line_number":16,"context_line":"| bank_id                              | plain | xsd:string  | Id of the bank."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_25cfd380","line":15,"updated":"2015-11-17 07:18:24.000000000","message":"Is \"comments\" different from \"description\"?","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"33ca6182a0900bc20e3a4f35c7e3fb74f881f6d6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":13,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":14,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the plan."},{"line_number":15,"context_line":"| comments (optional)                  | plain | xsd:string  | Plan comments."},{"line_number":16,"context_line":"| bank_id                              | plain | xsd:string  | Id of the bank."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_8a04867e","line":15,"in_reply_to":"ba8a016a_25cfd380","updated":"2015-11-17 14:28:31.000000000","message":"Only semantically.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"93abd9ca21466a9727941635d38e6e4d6218c175","unresolved":false,"context_lines":[{"line_number":16,"context_line":"| bank_id                              | plain | xsd:string  | Id of the bank."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"#### Response JSON"},{"line_number":19,"context_line":"```json"},{"line_number":20,"context_line":"{"},{"line_number":21,"context_line":"    \"plan\": {"},{"line_number":22,"context_line":"        \"id\": \"93df2f9b-5a67-1111-1518-d177ad4c02dc\","}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_7b881ae8","line":19,"updated":"2015-11-17 07:35:23.000000000","message":"The only real information that the plan holds is bank_id?  What is the use?","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"33ca6182a0900bc20e3a4f35c7e3fb74f881f6d6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"| bank_id                              | plain | xsd:string  | Id of the bank."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"#### Response JSON"},{"line_number":19,"context_line":"```json"},{"line_number":20,"context_line":"{"},{"line_number":21,"context_line":"    \"plan\": {"},{"line_number":22,"context_line":"        \"id\": \"93df2f9b-5a67-1111-1518-d177ad4c02dc\","}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_72c58d3a","line":19,"in_reply_to":"ba8a016a_7b881ae8","updated":"2015-11-17 14:28:31.000000000","message":"It\u0027s an aggregation of protection definitions.\n\nAll aggregated definition should logically belong to the same \"application\".\n\nYou protect whole plans and all it\u0027s metadata is saved in a single bank so that we don\u0027t have to manage metadata across multiple banks.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"### Show protection plan details"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"`GET` : `/v1/plans/{plan_id}`"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"#### Request parameters"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_5ea18f93","line":60,"updated":"2015-11-17 03:20:24.000000000","message":"Lack a tenant_id","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"3ffe45a91c29beb469b4057444231d437752720e","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":102,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":103,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":104,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the protection defintion."},{"line_number":105,"context_line":"| description (optional)               | plain | xsd:string  | protection defintion description."},{"line_number":106,"context_line":"| resource                             | plain | xsd:dict    | Resource instance id."}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_4fb470f1","line":103,"updated":"2015-11-17 09:20:07.000000000","message":"plan_id parameter needed.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"```json"},{"line_number":113,"context_line":"{"},{"line_number":114,"context_line":"    \"protection_defintions\": ["},{"line_number":115,"context_line":"        {"},{"line_number":116,"context_line":"            \"name\" : \"Frontend VM\","},{"line_number":117,"context_line":"            \"id\": \"45baf976-c20a-4894-3333-c94b7376bf55\","}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_613f16b5","line":114,"updated":"2015-11-17 03:20:24.000000000","message":"This API only creates one protection definition.\nNo need to return as a list.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"7876e33d60e1088a8e4304c0a41088b8947f6959","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""},{"line_number":122,"context_line":"            },"},{"line_number":123,"context_line":"            \"plugin_id\": \"93df2f9b-5a67-4155-1518-d177ad4c02dc\","},{"line_number":124,"context_line":"            \"parameters\": {"},{"line_number":125,"context_line":"                \"protect\":{"},{"line_number":126,"context_line":"                },"},{"line_number":127,"context_line":"                \"restore\":{"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_05c2cf33","line":124,"updated":"2015-11-17 07:18:24.000000000","message":"Are protect/restore/verify/delete keywords or can plugins define their own verbs?","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"33ca6182a0900bc20e3a4f35c7e3fb74f881f6d6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""},{"line_number":122,"context_line":"            },"},{"line_number":123,"context_line":"            \"plugin_id\": \"93df2f9b-5a67-4155-1518-d177ad4c02dc\","},{"line_number":124,"context_line":"            \"parameters\": {"},{"line_number":125,"context_line":"                \"protect\":{"},{"line_number":126,"context_line":"                },"},{"line_number":127,"context_line":"                \"restore\":{"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_94eeeb89","line":124,"in_reply_to":"ba8a016a_05c2cf33","updated":"2015-11-17 14:28:31.000000000","message":"They are the only actions available. But they are abstract concepts.\n\nA plugin can define a different name for what \"protect\" means in it\u0027s context. For example a plugin that does snapshots will call protect \"create snapshot\".\n\nThe idea is that:\n- protect will do something for *any* kind protection (backup, snapshot, set up replication)\n- restore will take protected data restore it somewhere else\n- delete would remove the protection (delete the backup\\ stop replication)\n- verify will try to make sure that restore is possible without actually restoring. (check that replication is withing parameters. backup exists and checksum is correct)\n\nWe believe that most DP schemes fit those 4 concepts.\nA plugin just need to name and describe how it perceives each concept.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cbf40bfd7587b7e1d30ab93937094d97abbe2dbe","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            },"},{"line_number":123,"context_line":"            \"plugin_id\": \"93df2f9b-5a67-4155-1518-d177ad4c02dc\","},{"line_number":124,"context_line":"            \"parameters\": {"},{"line_number":125,"context_line":"                \"protect\":{"},{"line_number":126,"context_line":"                },"},{"line_number":127,"context_line":"                \"restore\":{"},{"line_number":128,"context_line":"                },"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_e898e96c","line":125,"updated":"2015-11-16 14:57:31.000000000","message":"I think that we should add example of parameter schema and of result schema","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"33ca6182a0900bc20e3a4f35c7e3fb74f881f6d6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            },"},{"line_number":123,"context_line":"            \"plugin_id\": \"93df2f9b-5a67-4155-1518-d177ad4c02dc\","},{"line_number":124,"context_line":"            \"parameters\": {"},{"line_number":125,"context_line":"                \"protect\":{"},{"line_number":126,"context_line":"                },"},{"line_number":127,"context_line":"                \"restore\":{"},{"line_number":128,"context_line":"                },"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_85ed4df1","line":125,"in_reply_to":"ba8a016a_e898e96c","updated":"2015-11-17 14:28:31.000000000","message":"schema doesn\u0027t go here. It\u0027s a protection definition. The actual parameter values go here.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cbf40bfd7587b7e1d30ab93937094d97abbe2dbe","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"### Show information about an action"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"`GET` : `/v1/protection_plugins/{plugin_id}/actions/{protect,verify,delete,restore}`"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"#### Response JSON"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_48a6d5c2","line":169,"updated":"2015-11-16 14:57:31.000000000","message":"{protect,verify,delete,restore} is not consistent with response","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cbf40bfd7587b7e1d30ab93937094d97abbe2dbe","unresolved":false,"context_lines":[{"line_number":174,"context_line":"{"},{"line_number":175,"context_line":"    \"actions_info\": {"},{"line_number":176,"context_line":"        \"protect\" : {"},{"line_number":177,"context_line":"            \"name\": \"Start Backup\","},{"line_number":178,"context_line":"            \"description\": \"Backs up stuff\","},{"line_number":179,"context_line":"            \"parameters_schema\": {},"},{"line_number":180,"context_line":"            \"result_schema\": {}"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_e81f8959","line":177,"updated":"2015-11-16 14:57:31.000000000","message":"Protect Backup Action","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cbf40bfd7587b7e1d30ab93937094d97abbe2dbe","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    \"actions_info\": {"},{"line_number":176,"context_line":"        \"protect\" : {"},{"line_number":177,"context_line":"            \"name\": \"Start Backup\","},{"line_number":178,"context_line":"            \"description\": \"Backs up stuff\","},{"line_number":179,"context_line":"            \"parameters_schema\": {},"},{"line_number":180,"context_line":"            \"result_schema\": {}"},{"line_number":181,"context_line":"        },"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_2874b19a","line":178,"updated":"2015-11-16 14:57:31.000000000","message":"Backup Action for the Cinder volume using Swift to store the data","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cbf40bfd7587b7e1d30ab93937094d97abbe2dbe","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        \"protect\" : {"},{"line_number":177,"context_line":"            \"name\": \"Start Backup\","},{"line_number":178,"context_line":"            \"description\": \"Backs up stuff\","},{"line_number":179,"context_line":"            \"parameters_schema\": {},"},{"line_number":180,"context_line":"            \"result_schema\": {}"},{"line_number":181,"context_line":"        },"},{"line_number":182,"context_line":"        \"restore\":{"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_c8ac05f0","line":179,"updated":"2015-11-16 14:57:31.000000000","message":"Maybe we should add example here consistency Level ....","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":210,"context_line":"| resource_id                          | URI   | xsd:UUID    | Resource instance."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"```json"},{"line_number":213,"context_line":" \"depended_resources\": {}"},{"line_number":214,"context_line":"    \"resource\": {"},{"line_number":215,"context_line":"        \"resource_type\": \"...\","},{"line_number":216,"context_line":"        \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_61c2b687","line":213,"updated":"2015-11-17 03:20:24.000000000","message":"The format of this response example seems a little confusing.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"7876e33d60e1088a8e4304c0a41088b8947f6959","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"### Show information about a bank"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"`GET` : `/v1/{tenant_id}/banks/{bank_id}`"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"## Operations"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_1b978e91","line":242,"updated":"2015-11-17 07:18:24.000000000","message":"What do these bank methods return?  Is there no POST to create one?","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"```json"},{"line_number":270,"context_line":"{"},{"line_number":271,"context_line":"    \"id\": \"123\","},{"line_number":272,"context_line":"    \"operation_type\": \"protect\","},{"line_number":273,"context_line":"    \"status\": \"in progress\""},{"line_number":274,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_c4637019","line":271,"updated":"2015-11-17 03:20:24.000000000","message":"Should contain the plan_id.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"cfc438f4eccfa734447eb4a1e7c40f447108e90e","unresolved":false,"context_lines":[{"line_number":269,"context_line":"```json"},{"line_number":270,"context_line":"{"},{"line_number":271,"context_line":"    \"id\": \"123\","},{"line_number":272,"context_line":"    \"operation_type\": \"protect\","},{"line_number":273,"context_line":"    \"status\": \"in progress\""},{"line_number":274,"context_line":"}"},{"line_number":275,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_7eaa48d6","line":272,"updated":"2015-11-17 08:40:48.000000000","message":"Should contain transaction id","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"{"},{"line_number":289,"context_line":"    \"schedule\":"},{"line_number":290,"context_line":"        {"},{"line_number":291,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":292,"context_line":"            \"id\": \"666\","},{"line_number":293,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":294,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_04309800","line":291,"updated":"2015-11-17 03:20:24.000000000","message":"No parameter above for name.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        {"},{"line_number":291,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":292,"context_line":"            \"id\": \"666\","},{"line_number":293,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":294,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":295,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":296,"context_line":"        }"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_a4174c50","line":293,"updated":"2015-11-17 03:20:24.000000000","message":"plan-id -\u003e plan_id","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":292,"context_line":"            \"id\": \"666\","},{"line_number":293,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":294,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":295,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":296,"context_line":"        }"},{"line_number":297,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_a440ac57","line":294,"updated":"2015-11-17 03:20:24.000000000","message":"No parameter above for comments.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            \"id\": \"666\","},{"line_number":293,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":294,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":295,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":296,"context_line":"        }"},{"line_number":297,"context_line":"}"},{"line_number":298,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_c72612ba","line":295,"updated":"2015-11-17 03:20:24.000000000","message":"Should contain operation_type.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":308,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":309,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":310,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":311,"context_line":"| plan_id (Optional)                   | query | csapi:UUID  | Filter scheduler operations by plan"},{"line_number":312,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":313,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":314,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_27535ee3","line":311,"updated":"2015-11-17 03:20:24.000000000","message":"Suggest to add a filter by trigger_id as well.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"```json"},{"line_number":317,"context_line":"{"},{"line_number":318,"context_line":"    \"schedule\": ["},{"line_number":319,"context_line":"        {"},{"line_number":320,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":321,"context_line":"            \"id\": \"666\","}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_c7d05256","line":318,"updated":"2015-11-17 03:20:24.000000000","message":"schedule -\u003e schedules","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        {"},{"line_number":320,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":321,"context_line":"            \"id\": \"666\","},{"line_number":322,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":323,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":324,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":325,"context_line":"        },"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_e787965f","line":322,"updated":"2015-11-17 03:20:24.000000000","message":"plan-id -\u003e plan_id","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            \"id\": \"666\","},{"line_number":322,"context_line":"            \"plan-id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":323,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":324,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\""},{"line_number":325,"context_line":"        },"},{"line_number":326,"context_line":"        {"},{"line_number":327,"context_line":"        }"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_27327ef2","line":324,"updated":"2015-11-17 03:20:24.000000000","message":"Should contain operation_type.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"| Parameter              | Style | Type         | Description"},{"line_number":341,"context_line":"| :--------------------- | :---: | :----------: | :----------"},{"line_number":342,"context_line":"| name                   | plain | xsd:string   | The name of the storage pool."},{"line_number":343,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool."},{"line_number":344,"context_line":"| type                   | plain | xsd:string   | The type of the trigger."},{"line_number":345,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_e7d8f655","line":342,"updated":"2015-11-17 03:20:24.000000000","message":"Should be \u0027name of the trigger\u0027","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":340,"context_line":"| Parameter              | Style | Type         | Description"},{"line_number":341,"context_line":"| :--------------------- | :---: | :----------: | :----------"},{"line_number":342,"context_line":"| name                   | plain | xsd:string   | The name of the storage pool."},{"line_number":343,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool."},{"line_number":344,"context_line":"| type                   | plain | xsd:string   | The type of the trigger."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"##### Extra fields for `type\u003d\u003d\"timed_trigger\"`"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_c7ba92e1","line":343,"updated":"2015-11-17 03:20:24.000000000","message":"The same as above.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":343,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool."},{"line_number":344,"context_line":"| type                   | plain | xsd:string   | The type of the trigger."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"##### Extra fields for `type\u003d\u003d\"timed_trigger\"`"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"| Parameter      | Style | Type         | Description"},{"line_number":349,"context_line":"| :------------- | :---: | :----------: | :----------"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_a7118eae","line":346,"updated":"2015-11-17 03:20:24.000000000","message":"I think we could encounter the scenario that one resource\u0027s protection action depends on the finish event of another resource\u0027s proteciton action.\nSo maybe we need an event trigger type.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"33ca6182a0900bc20e3a4f35c7e3fb74f881f6d6","unresolved":false,"context_lines":[{"line_number":343,"context_line":"| description (optional) | plain | xsd:string   | The description of the storage pool."},{"line_number":344,"context_line":"| type                   | plain | xsd:string   | The type of the trigger."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"##### Extra fields for `type\u003d\u003d\"timed_trigger\"`"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"| Parameter      | Style | Type         | Description"},{"line_number":349,"context_line":"| :------------- | :---: | :----------: | :----------"}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_5464f147","line":346,"in_reply_to":"ba8a016a_a7118eae","updated":"2015-11-17 14:28:31.000000000","message":"We also agree that we need an event trigger type but I\u0027m not sure it\u0027s for version 1.0 as you would need to define a very delicate semantic for that.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1c0db75ae3cb8987b7527ab412ed9de3c0945a8","unresolved":false,"context_lines":[{"line_number":371,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":372,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":373,"context_line":"| bank_id                              | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":374,"context_line":"| plan_id                              | query | csapi:UUID  | Filter by plan"},{"line_number":375,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":376,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":377,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":9,"id":"ba8a016a_87124a61","line":374,"updated":"2015-11-17 03:20:24.000000000","message":"plan_id and bank_id doesn\u0027t need to specify together,\nbecause a plan only has one corresponding bank.\nSo maybe plan_id is optional.","commit_id":"b6a0fca796f9f24e9e23f4ace97442f856e354bb"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":15,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":16,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the plan."},{"line_number":17,"context_line":"| comments (optional)                  | plain | xsd:string  | Plan comments."},{"line_number":18,"context_line":"| bank_id                              | plain | xsd:string  | Id of the bank."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"#### Response JSON"},{"line_number":21,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_2947934c","line":18,"updated":"2015-11-17 16:01:14.000000000","message":"csapi:UUID","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        \"id\": \"93df2f9b-5a67-1111-1518-d177ad4c02dc\","},{"line_number":25,"context_line":"        \"name\": \"My Plan\","},{"line_number":26,"context_line":"        \"comments\": \"This protects everything that I love\","},{"line_number":27,"context_line":"        \"bank_id\": \"12312412321\","},{"line_number":28,"context_line":"    }"},{"line_number":29,"context_line":"}"},{"line_number":30,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_e9774b9d","line":27,"updated":"2015-11-17 16:01:14.000000000","message":"csapi:UUID","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            \"name\": \"My Plan\","},{"line_number":52,"context_line":"            \"id\": \"666\","},{"line_number":53,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":54,"context_line":"            \"bank_id\": \"12312412321\""},{"line_number":55,"context_line":"        }"},{"line_number":56,"context_line":"    ]"},{"line_number":57,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_89579f01","line":54,"updated":"2015-11-17 16:01:14.000000000","message":"UUID format","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":66,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":67,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":68,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":69,"context_line":"| plan_id                              | URI   | xsd:string  | The plan ID."},{"line_number":70,"context_line":"| full                                 | query | xsd:bool    | When value is `true` return the list of protection definitions as a sideloaded list"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_ce4a8d83","line":69,"updated":"2015-11-17 16:01:14.000000000","message":"change to csapi:UUID","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"id\": \"123\","},{"line_number":78,"context_line":"        \"name\": \"My Plan\","},{"line_number":79,"context_line":"        \"comments\": \"This protects everything that I love\","},{"line_number":80,"context_line":"        \"bank_id\": \"12312412321\","},{"line_number":81,"context_line":"        \"protection_defintions\": ["},{"line_number":82,"context_line":"            \"123412312\","},{"line_number":83,"context_line":"        ]"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_2930f3e7","line":80,"updated":"2015-11-17 16:01:14.000000000","message":"supposed to be UUID format","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":105,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":106,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":107,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the protection definition."},{"line_number":108,"context_line":"| description (optional)               | plain | xsd:string  | protection definition description."},{"line_number":109,"context_line":"| resource                             | plain | xsd:dict    | Resource instance id."}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_8e3b25eb","line":106,"updated":"2015-11-17 16:01:14.000000000","message":"Missing plan_is as  URI parameter","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"4c840b5d8a0ae20a17bd63df532a067864d956dc","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"#### Response JSON"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"***:grey_exclamation: example is for protect action but others are identical stracturally***"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"`GET` : `/v1/protection_plugins/{plugin_id}/actions/protect`"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_137df56d","line":182,"updated":"2015-11-18 09:57:44.000000000","message":"maybe it is structurally not stracturally","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"4c840b5d8a0ae20a17bd63df532a067864d956dc","unresolved":false,"context_lines":[{"line_number":241,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":242,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":243,"context_line":"| resource_id                          | URI   | xsd:UUID    | Resource instance."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"#### Response JSON"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_33459916","line":244,"updated":"2015-11-18 09:57:44.000000000","message":"parameter miss plugin_id?","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":360,"context_line":"}"},{"line_number":361,"context_line":"```"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"### Create a bank about a bank"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"`POST` : `/v1/{tenant_id}/banks/`"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_ee98b11d","line":363,"updated":"2015-11-17 16:01:14.000000000","message":"Create a bank for the tenant","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"4c840b5d8a0ae20a17bd63df532a067864d956dc","unresolved":false,"context_lines":[{"line_number":369,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":370,"context_line":"| name                                 | plain | xsd:string  | Bank name."},{"line_number":371,"context_line":"| comments                             | plain | xsd:string  | Coments about this instance."},{"line_number":372,"context_line":"| plugin_id                            | plain | csapi:UUID  | The ID of the plugin you want to use for this bank instance."},{"line_number":373,"context_line":"| options                              | plain | xsd:dict    | Options that match the schema declared by the selected plugin."},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_33391942","line":372,"updated":"2015-11-18 09:57:44.000000000","message":"is the plugin_id the id of BankPlugin?","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ad1724d997b5466ae3499a41560752ec2ee49574","unresolved":false,"context_lines":[{"line_number":454,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":455,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":456,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":457,"context_line":"| plan_id                              | plain | xsd:string  | ID of the plan you want to execute. |"},{"line_number":458,"context_line":"| trigger_id                           | plain | xsd:string  | ID of the trigger that will be used to schedule this operation"},{"line_number":459,"context_line":"| operation_type                       | plain | xsd:string  | Type of the operation. [protect, verify, delete, restore]"},{"line_number":460,"context_line":"| name                                 | plain | xsd:string  | The plan\u0027s friendly name."}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_2919d379","line":457,"updated":"2015-11-17 16:01:14.000000000","message":"Change to csapi:UUID","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"4c840b5d8a0ae20a17bd63df532a067864d956dc","unresolved":false,"context_lines":[{"line_number":554,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":555,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":556,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":557,"context_line":"| bank_id                              | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":558,"context_line":"| plan_id (Optional)                   | query | csapi:UUID  | Filter by plan"},{"line_number":559,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":560,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_c296b54b","line":557,"updated":"2015-11-18 09:57:44.000000000","message":"description is not corresponding to the bank_id, but to the tenant_id","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"83f76fece442671bfaf3f996fa252013f3a53bb1","unresolved":false,"context_lines":[{"line_number":588,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":589,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":590,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":591,"context_line":"| bank_id                              | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":592,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":593,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":594,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":10,"id":"ba8a016a_c0ec6ef5","line":591,"updated":"2015-11-18 10:05:10.000000000","message":"description is not corresponding to the bank_id, but to the tenant_id","commit_id":"c691ae263ab9a3877f050084ae8277a91d718802"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"| plan_id                              | URI   | csapi:UUID  | The plan_id to inspect."},{"line_number":108,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the protection definition."},{"line_number":109,"context_line":"| description (optional)               | plain | xsd:string  | protection definition description."},{"line_number":110,"context_line":"| resource                             | plain | xsd:dict    | Resource instance id."},{"line_number":111,"context_line":"| plugin_id                            | plain | xsd:string  | protection plugin id."},{"line_number":112,"context_line":"| parameters                           | plain | xsd:dict    | parameters for the actions"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_f1127456","line":110,"updated":"2015-11-19 07:07:48.000000000","message":"Is resource_id more explicit?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"81808fe0c68a1f1a8d55045c7b69f7c721d9bf32","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":243,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":244,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":245,"context_line":"| resource_id                          | URI   | xsd:UUID    | Resource instance."},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_ed9cdec1","line":244,"updated":"2015-11-19 01:40:26.000000000","message":"parameter miss plugin_id?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"### Show information about a bank plugin"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"`GET` : `/v1/bank_plugins/{bank_id}`"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":309,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_02100858","line":306,"updated":"2015-11-19 07:07:48.000000000","message":"Is bank_plugin_id more explicit?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":308,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":309,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":310,"context_line":"| bank_id                              | URI   | csapi:UUID  | Id of the bank"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"#### Response JSON"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_22474c78","line":311,"updated":"2015-11-19 07:07:48.000000000","message":"Is bank_plugin_id more explicit?\nDescription should be \"Id of the bank plugin\".","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        {"},{"line_number":353,"context_line":"            \"id\": \"33dd1c39-52ef-49a1-b330-7bcb0db56811\","},{"line_number":354,"context_line":"            \"name\": \"Cinder Bank 1\","},{"line_number":355,"context_line":"            \"plugin_id\": \"612596b3-7276-44f2-8ebd-7e6acf4e31e7\","},{"line_number":356,"context_line":"            \"options\": {"},{"line_number":357,"context_line":"                \"swift_url\": \"http://swift/\","},{"line_number":358,"context_line":"                \"catalog\": \"smaug_bank_1\""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_3debed14","line":355,"updated":"2015-11-19 07:07:48.000000000","message":"Is bank_plugin_id more explicit?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":371,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":372,"context_line":"| name                                 | plain | xsd:string  | Bank name."},{"line_number":373,"context_line":"| comments                             | plain | xsd:string  | Coments about this instance."},{"line_number":374,"context_line":"| bank_plugin_id                       | plain | csapi:UUID  | The ID of the bank plugin you want to use for this bank instance."},{"line_number":375,"context_line":"| options                              | plain | xsd:dict    | Options that match the schema declared by the selected plugin."},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_1d12a909","line":374,"updated":"2015-11-19 07:07:48.000000000","message":"Is more explicit by changing \"for this bank instance\" to \"to create this bank instance\"?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fc5d4c6fb71019f0f74e8d5885386726d8773d4a","unresolved":false,"context_lines":[{"line_number":449,"context_line":"}"},{"line_number":450,"context_line":"```"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"###   Schedule operation"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"`POST` : `/v1/{tenant_id}/scheduled_operations`"},{"line_number":455,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_5d9cb10e","line":452,"updated":"2015-11-19 07:07:48.000000000","message":"Is \"Create scheduled operation\" more explicit?","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"81808fe0c68a1f1a8d55045c7b69f7c721d9bf32","unresolved":false,"context_lines":[{"line_number":590,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":591,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":592,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":593,"context_line":"| bank_id                              | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":594,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":595,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":596,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_ed75be97","line":593,"updated":"2015-11-19 01:40:26.000000000","message":"description is not corresponding to the bank_id, but to the tenant_id","commit_id":"e6a2a4513fa76b094ba61849a20e41a92dbb50a5"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \"plans\": ["},{"line_number":50,"context_line":"        {"},{"line_number":51,"context_line":"            \"name\": \"My Plan\","},{"line_number":52,"context_line":"            \"id\": \"666\","},{"line_number":53,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":54,"context_line":"            \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed6\""},{"line_number":55,"context_line":"        }"}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_cad34b5e","line":52,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to be UUID format","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":74,"context_line":"```json"},{"line_number":75,"context_line":"{"},{"line_number":76,"context_line":"    \"plan\": {"},{"line_number":77,"context_line":"        \"id\": \"123\","},{"line_number":78,"context_line":"        \"name\": \"My Plan\","},{"line_number":79,"context_line":"        \"comments\": \"This protects everything that I love\","},{"line_number":80,"context_line":"        \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_6a41ff0a","line":77,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to be UUID format","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":140,"context_line":"## Protection Plugin"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"### List available plugins"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"`GET` : `/v1/protection_plugins/`"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"#### Request parameters"}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_8ab303e9","line":143,"updated":"2015-11-23 17:42:58.000000000","message":"Why not add parameter tenant_id here?","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":154,"context_line":"```json"},{"line_number":155,"context_line":"{"},{"line_number":156,"context_line":"    \"protection_plugins\": ["},{"line_number":157,"context_line":"        {"},{"line_number":158,"context_line":"            \"id\": \"123\","},{"line_number":159,"context_line":"            \"name\": \"Cinder Volume S3 Backup\","},{"line_number":160,"context_line":"            \"description\": \"Backs up cinder volumes to S3\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_6a6d7f03","line":157,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to be UUID format","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"### Show information about an action"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"`GET` : `/v1/protection_plugins/{plugin_id}/actions/{protect,verify,delete,restore}`"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"#### Response JSON"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_cd2fe53c","line":179,"updated":"2015-11-23 17:42:58.000000000","message":"/v1/{tenant_id}/protection_plugins/{plugin_id}/actions/{operation_type}\nIs this more reasonable?","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":177,"context_line":"### Show information about an action"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"`GET` : `/v1/protection_plugins/{plugin_id}/actions/{protect,verify,delete,restore}`"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"#### Response JSON"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"***:grey_exclamation: example is for protect action but others are identical structurally***"}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_cd77e59d","line":180,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to add request parameters here.","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":234,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending). |"},{"line_number":235,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request. |"},{"line_number":236,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"## Get which resources are dependent on a specific parent resource"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"`GET` : `/v1/{tenant_id}/protection_plugins/{plugin_id}/resources/{resource_id}/dependent_resources`"}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_4d73f5e7","line":237,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to add response JSON here.","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":469,"context_line":"{"},{"line_number":470,"context_line":"    \"schedule\":"},{"line_number":471,"context_line":"        {"},{"line_number":472,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":473,"context_line":"            \"id\": \"666\","},{"line_number":474,"context_line":"            \"plan_id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":475,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_d8bd61d8","line":472,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to be UUID format","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":502,"context_line":"{"},{"line_number":503,"context_line":"    \"scheduled_operations\": ["},{"line_number":504,"context_line":"        {"},{"line_number":505,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":506,"context_line":"            \"id\": \"666\","},{"line_number":507,"context_line":"            \"plan_id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":508,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_58cad16f","line":505,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to be UUID format","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"##### Request parameters"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"| Parameter              | Style | Type         | Description"},{"line_number":528,"context_line":"| :--------------------- | :---: | :----------: | :----------"},{"line_number":529,"context_line":"| name                   | plain | xsd:string   | The name of the trigger."},{"line_number":530,"context_line":"| description (optional) | plain | xsd:string   | The description of the trigger."}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_9838393f","line":527,"updated":"2015-11-23 17:42:58.000000000","message":"Missing tenant_id parameter here.","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"da833d299876307a4b5ded6eb52d3ee7b2747e54","unresolved":false,"context_lines":[{"line_number":591,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":592,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":593,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":594,"context_line":"| bank_id                              | URI   | csapi:UUID  | The bank ID."},{"line_number":595,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of \u003ckey\u003e[:\u003cdirection\u003e]. A valid direction is asc (ascending) or desc (descending)."},{"line_number":596,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":597,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."}],"source_content_type":"text/x-markdown","patch_set":12,"id":"ba8a016a_f89385f8","line":594,"updated":"2015-11-23 17:42:58.000000000","message":"supposed to add parameters transaction_id protection_definition_id here.","commit_id":"75217a4dd5dbfd508a3ffb8a9a0998a5bef5a118"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7c0c0fddb365d7c266b891c1d0b1e5f23f600b82","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \"id\": \"93df2f9b-5a67-1111-1518-d177ad4c02dc\","},{"line_number":23,"context_line":"    \"name\": \"My Plan\","},{"line_number":24,"context_line":"    \"comments\": \"This protects everything that I love\","},{"line_number":25,"context_line":"    \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed6\","},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":"```"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_63db9c7d","line":25,"updated":"2015-11-25 04:35:39.000000000","message":"Cause bank_id is removed from parameters, this should also be removed.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9dce6ae71d0db4feba28587d5754c982e1f7e765","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \"name\": \"My Plan\","},{"line_number":49,"context_line":"            \"id\": \"46b3cbec-18f7-4d9e-98f9-a028846739f8\","},{"line_number":50,"context_line":"            \"comments\": \"This protects everything that I love\","},{"line_number":51,"context_line":"            \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed6\""},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":"    ]"},{"line_number":54,"context_line":"}"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_08d30d61","line":51,"updated":"2015-11-30 10:06:40.000000000","message":"should also be removed.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9dce6ae71d0db4feba28587d5754c982e1f7e765","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"id\": \"b6c07875-cf54-4abf-a12d-b9597547eebb\","},{"line_number":75,"context_line":"        \"name\": \"My Plan\","},{"line_number":76,"context_line":"        \"comments\": \"This protects everything that I love\","},{"line_number":77,"context_line":"        \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed\","},{"line_number":78,"context_line":"        \"protection_defintions\": ["},{"line_number":79,"context_line":"            \"f006d103-1786-4ec1-9cb3-355d7eef6cb9\","},{"line_number":80,"context_line":"        ]"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_28d6114f","line":77,"updated":"2015-11-30 10:06:40.000000000","message":"should also be removed.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9dce6ae71d0db4feba28587d5754c982e1f7e765","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"### Create a protection definition"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"`POST` : `/v1/{tenant_id}/plans/\u003cplan_id\u003e/protection_defintions/`"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"#### Request parameters"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_d4b7dc82","line":97,"updated":"2015-11-30 10:06:40.000000000","message":"protection_defintions-\u003eprotection_definitions","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9dce6ae71d0db4feba28587d5754c982e1f7e765","unresolved":false,"context_lines":[{"line_number":152,"context_line":"{"},{"line_number":153,"context_line":"    \"protection_plugins\": ["},{"line_number":154,"context_line":"        {"},{"line_number":155,"context_line":"            \"id\": \"b6c07875-cf54-4abf-a12d-b9597547eebb\","},{"line_number":156,"context_line":"            \"name\": \"Cinder Volume S3 Backup\","},{"line_number":157,"context_line":"            \"description\": \"Backs up cinder volumes to S3\","},{"line_number":158,"context_line":"            \"managed_type\": \"OS::Cinder::Volume\","}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_34a98824","line":155,"updated":"2015-11-30 10:06:40.000000000","message":"Should we consider storing plugin data to database,defining a database table protection_plugins?\n\nYou know , we need a uniqueness plugin id when we define a protection definition. We should consider\nthe generation of the plugin id. And the plugin id of a Protection Plugin is uniqueness and unchangeable.\n\nI do not think that storing the data to database is a must. We just need consider and solve the problem of the id.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7c0c0fddb365d7c266b891c1d0b1e5f23f600b82","unresolved":false,"context_lines":[{"line_number":178,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":179,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":180,"context_line":"| plugin_id                            | URL   | csapi:UUID  | The plugin id."},{"line_number":181,"context_line":"| oeperation_type                      | URL   | xsd:string  | One of {enable, disable, protect, verify, delete, restore}."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_835800fc","line":181,"updated":"2015-11-25 04:35:39.000000000","message":"oeperation_type -\u003e operation_type.\nAnd what\u0027s the purpose of new added \"enable, disable\" operations?","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ff3cc4151e993b585bc8382b2a5facb3b58672a1","unresolved":false,"context_lines":[{"line_number":178,"context_line":"| Parameter                            | Style | Type        | Description"},{"line_number":179,"context_line":"| :----------------------------------- | :---: | :---------: | :----------"},{"line_number":180,"context_line":"| plugin_id                            | URL   | csapi:UUID  | The plugin id."},{"line_number":181,"context_line":"| oeperation_type                      | URL   | xsd:string  | One of {enable, disable, protect, verify, delete, restore}."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"7a740942_be4e456d","line":181,"in_reply_to":"9a8ffd7b_835800fc","updated":"2015-12-06 08:57:39.000000000","message":"Enable Disable are used to Activate the protection \n\nFor on going protection like replication it will start and stop the replication \n\nFor trigger base protection like backup driver it will mean that if we get an operation on this plan we will return plan is disable error \n\nFor on going protection like replication the protect will usually means to do snapshot on the target replica","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17192,"name":"xiangxinyong","email":"xiangxinyong@huawei.com","username":"xianxinyong"},"change_message_id":"5b9a9113970bb9a0f50bb998a3b833508bc1588b","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"```json"},{"line_number":273,"context_line":"{"},{"line_number":274,"context_line":"    \"depended_resources\": ["},{"line_number":275,"context_line":"        {"},{"line_number":276,"context_line":"            \"resource_type\": \"...\","},{"line_number":277,"context_line":"            \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_7edf580d","line":274,"updated":"2015-11-26 12:31:12.000000000","message":"Hi saggi, \nIf the depended_resources type is different from the parent resource. For example, the parent resource type is vm and the depended_resources type is volume.\nHow to configure which protection plugin to the depeneded_resources by API?","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17192,"name":"xiangxinyong","email":"xiangxinyong@huawei.com","username":"xianxinyong"},"change_message_id":"8beb1a33a745f17ed0fc71c435474a23a2f0a4e5","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"```json"},{"line_number":273,"context_line":"{"},{"line_number":274,"context_line":"    \"depended_resources\": ["},{"line_number":275,"context_line":"        {"},{"line_number":276,"context_line":"            \"resource_type\": \"...\","},{"line_number":277,"context_line":"            \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_71d29436","line":274,"in_reply_to":"9a8ffd7b_23e4e2aa","updated":"2015-12-01 00:37:38.000000000","message":"Understood.Thanks Saggi.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"1a6bf57984ac1fb359829edcbdf4c89898123cd7","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"```json"},{"line_number":273,"context_line":"{"},{"line_number":274,"context_line":"    \"depended_resources\": ["},{"line_number":275,"context_line":"        {"},{"line_number":276,"context_line":"            \"resource_type\": \"...\","},{"line_number":277,"context_line":"            \"resource_id\": \"93df2f9b-5a67-4155-a518-d177ad4c02dc\""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"9a8ffd7b_23e4e2aa","line":274,"in_reply_to":"9a8ffd7b_7edf580d","updated":"2015-11-30 14:09:53.000000000","message":"The user would have to select the plugin for any dependent resources.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"ff3cc4151e993b585bc8382b2a5facb3b58672a1","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"### Create a scheduled operation"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"`POST` : `/v1/{tenant_id}/protection_invokers`"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":481,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"7a740942_9e0d8939","line":478,"updated":"2015-12-06 08:57:39.000000000","message":"It should be protection_invokers or scheduled_operations for all the commands below, i would go with scheduled_operations\n\nI do not feel that protection_invokers is more understandable, i think that scheduled_operations is a good description of what the API actually doing","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"2f8bddad32fe8aadcd538c12c53aa206a45a80b6","unresolved":false,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"### Create a scheduled operation"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"`POST` : `/v1/{tenant_id}/protection_invokers`"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":481,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"7a740942_a707061b","line":478,"in_reply_to":"7a740942_9e0d8939","updated":"2015-12-07 08:32:50.000000000","message":"+1 I think it should be scheduled_operations.","commit_id":"0f72673175501c33316432c9b02969ed6453574b"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"56fd4add657a921787e2f6acdf4ff13ae3075685","unresolved":false,"context_lines":[{"line_number":38,"context_line":"| name (Optional)                      | query | regexp      | Name of the plan as a string. Can be queried with regular expressions."},{"line_number":39,"context_line":"| sort (Optional)                      | query | xsd:string  | Comma-separated list of sort keys and optional sort directions in the form of `\u003ckey\u003e[:\u003cdirection\u003e]`. A valid direction is asc (ascending) or desc (descending)."},{"line_number":40,"context_line":"| limit (Optional)                     | query | xsd:int     | Requests a specified page size of returned items from the query. Returns a number of items up to the specified limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":41,"context_line":"| marker (Optional)                    | query | xsd:string  | Specifies the ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"#### Response JSON"},{"line_number":44,"context_line":"```json"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_60794c2f","line":41,"updated":"2015-12-10 05:12:12.000000000","message":"is it necessary to support index? when we considering to get from 20th and get 10 items, it\u0027s difficult to use marker and limit, it\u0027s easy to use index and limit.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"name\": \"My Plan\","},{"line_number":76,"context_line":"        \"comments\": \"This protects everything that I love\","},{"line_number":77,"context_line":"        \"bank_id\": \"274cee15-d0b2-4100-b5a0-b0defc929ed\","},{"line_number":78,"context_line":"        \"protection_defintions\": ["},{"line_number":79,"context_line":"            \"f006d103-1786-4ec1-9cb3-355d7eef6cb9\","},{"line_number":80,"context_line":"        ]"},{"line_number":81,"context_line":"    },"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_9bd71b23","line":78,"updated":"2015-12-09 22:12:09.000000000","message":"s/defintions/definitions/","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        ]"},{"line_number":81,"context_line":"    },"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"protection_defintions\" : ["},{"line_number":84,"context_line":"        {"},{"line_number":85,"context_line":"            \"name\" :\"Frontend VM\","},{"line_number":86,"context_line":"            \"id\": \"f006d103-1786-4ec1-9cb3-355d7eef6cb9\","}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_1b1d6b0f","line":83,"updated":"2015-12-09 22:12:09.000000000","message":"s/defintions/definitions/","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"eea8dc68e1b43eb41f122b615cbb9cc6c143e0a8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the protection definition."},{"line_number":106,"context_line":"| description (optional)               | plain | xsd:string  | protection definition description."},{"line_number":107,"context_line":"| resource                             | plain | xsd:dict    | Resource instance id."},{"line_number":108,"context_line":"| plugin_id                            | plain | xsd:string  | protection plugin id."},{"line_number":109,"context_line":"| parameters                           | plain | xsd:dict    | parameters for the actions"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_3002f90a","line":108,"updated":"2015-12-09 02:40:52.000000000","message":"one plugin_id (same as bank_id) means one instance of plug_in or one type of plugin?","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"c8d72ce59694573f386f97949be2e7f4d64d3831","unresolved":false,"context_lines":[{"line_number":105,"context_line":"| name                                 | plain | xsd:string  | Friendly name for the protection definition."},{"line_number":106,"context_line":"| description (optional)               | plain | xsd:string  | protection definition description."},{"line_number":107,"context_line":"| resource                             | plain | xsd:dict    | Resource instance id."},{"line_number":108,"context_line":"| plugin_id                            | plain | xsd:string  | protection plugin id."},{"line_number":109,"context_line":"| parameters                           | plain | xsd:dict    | parameters for the actions"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"#### Response JSON"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_cd1b53c9","line":108,"in_reply_to":"7a740942_3002f90a","updated":"2015-12-11 07:10:16.000000000","message":"only bank_id means one instance of bank(every bank instance has different datasoure url). plugin_id here means one type of plugin, it is a class or module.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"ffba31ff5115d6e84e2c9ab9e286ed864d15310a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"```"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"### Get which resource types can be protected by Protection Plugin"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"`GET` : `/v1/{tenant_id}/protection_plugins/{plugin_id}/possible_dependent_types`"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"| Parameter                            | Style | Type        | Description"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_2253cfe3","line":261,"updated":"2015-12-08 03:21:17.000000000","message":"I am confused. Does this api mean that a protection plugin can protect several resource types? This api gets all the resource types protected by a  protection plugin?\n\nOr just get possible dependent types, these types can not been\nprotected by this protection plugin. They are dependent types.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17192,"name":"xiangxinyong","email":"xiangxinyong@huawei.com","username":"xianxinyong"},"change_message_id":"05f1f81ac476f477ce11873d1f0b6049ce4fce8b","unresolved":false,"context_lines":[{"line_number":395,"context_line":"{"},{"line_number":396,"context_line":"    \"resource_types\" : ["},{"line_number":397,"context_line":"        {"},{"line_number":398,"context_line":"            \"name\": \"OS::Nova::VM\","},{"line_number":399,"context_line":"            \"available_plugins\": [\"7dd39c05-fea1-48d7-bfc0-ef0ea596d696\"],"},{"line_number":400,"context_line":"            \"possible_dependent_types\": [\"OS::Cinder::Volume\"]"},{"line_number":401,"context_line":"        },"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_ff956432","line":398,"updated":"2015-12-08 02:36:35.000000000","message":"[OS::Nova::VM]\n[OS::Cinder::Volume]\nWhere are these globle resource types defined?\nAre they defined in the Smaug DB or Smaug Conf?","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"23d18b6c4d97ee262fb8287985c20cc1dfb9fe34","unresolved":false,"context_lines":[{"line_number":521,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":522,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":523,"context_line":"| plan_id (optional)                   | plain | csapi:UUID  | ID of the plan you want to execute (for protect, enable, disable)."},{"line_number":524,"context_line":"| transaction_id (optional)            | plain | csapi:UUID  | ID of the transaction you want to execute (for restore, delete)."},{"line_number":525,"context_line":"| operation_type                       | plain | xsd:string  | Type of the operation. [protect, verify, delete, restore]"},{"line_number":526,"context_line":"| bank_id                              | plain | csapi:UUID  | Id of the bank."},{"line_number":527,"context_line":"| parameters_override                  | plain | xsd:dict    | Parameters override map with the protection definition id as key"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_183e468c","line":524,"updated":"2015-12-08 03:57:53.000000000","message":"use checkpoint_id instead of transaction_id","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"23d18b6c4d97ee262fb8287985c20cc1dfb9fe34","unresolved":false,"context_lines":[{"line_number":538,"context_line":"    \"operation_type\": \"protect\","},{"line_number":539,"context_line":"    \"status\": \"in progress\","},{"line_number":540,"context_line":"    \"plan_id\": \"33dd1c39-52ef-49a1-b330-7bcb0db56811\","},{"line_number":541,"context_line":"    \"transaction_id\": \"4db36cf4-28a9-4505-bb40-2c353b38ecf2\","},{"line_number":542,"context_line":"    \"patameters_override\": {"},{"line_number":543,"context_line":"        \"ee602eb0-ef09-40ac-98a9-2255aaf65d28\": {"},{"line_number":544,"context_line":"            \"some_parameter\": \"some value\""}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_784d0a3d","line":541,"updated":"2015-12-08 03:57:53.000000000","message":"use checkpoint_id instead of transaction_id","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    \"status\": \"in progress\","},{"line_number":540,"context_line":"    \"plan_id\": \"33dd1c39-52ef-49a1-b330-7bcb0db56811\","},{"line_number":541,"context_line":"    \"transaction_id\": \"4db36cf4-28a9-4505-bb40-2c353b38ecf2\","},{"line_number":542,"context_line":"    \"patameters_override\": {"},{"line_number":543,"context_line":"        \"ee602eb0-ef09-40ac-98a9-2255aaf65d28\": {"},{"line_number":544,"context_line":"            \"some_parameter\": \"some value\""},{"line_number":545,"context_line":"        }"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_fbf73f8a","line":542,"updated":"2015-12-09 22:12:09.000000000","message":"s/patameters/parameters/","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"717d7bed674717ee347f001fa4e2554301363369","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"### Create a scheduled operation"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"`POST` : `/v1/{tenant_id}/protection_invokers`"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":555,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_9d629a15","line":552,"updated":"2015-12-10 09:36:23.000000000","message":"shoud be scheduled_operations","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"717d7bed674717ee347f001fa4e2554301363369","unresolved":false,"context_lines":[{"line_number":554,"context_line":"| Parameter                            | Style | Type        | Description |"},{"line_number":555,"context_line":"| :----------------------------------- | :---: | :---------: | :---------- |"},{"line_number":556,"context_line":"| tenant_id                            | URI   | csapi:UUID  | The tenant ID in a multi-tenancy cloud."},{"line_number":557,"context_line":"| plan_id                              | plain | csapi:UUID  | ID of the plan you want to execute. |"},{"line_number":558,"context_line":"| trigger_id                           | plain | xsd:string  | ID of the trigger that will be used to schedule this operation"},{"line_number":559,"context_line":"| operation_type                       | plain | xsd:string  | Type of the operation. [protect, verify, delete, restore]"},{"line_number":560,"context_line":"| name                                 | plain | xsd:string  | The plan\u0027s friendly name."}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_0a1dfebc","line":557,"updated":"2015-12-10 09:36:23.000000000","message":"plan_id should be romved. add operation_id.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"717d7bed674717ee347f001fa4e2554301363369","unresolved":false,"context_lines":[{"line_number":569,"context_line":"        {"},{"line_number":570,"context_line":"            \"name\": \"Daily run of my app backup\","},{"line_number":571,"context_line":"            \"id\": \"612596b3-7276-44f2-8ebd-7e6acf4e31e7\","},{"line_number":572,"context_line":"            \"plan_id\": \"45baf976-c20a-4894-a7c3-c94b7376bf3bb\","},{"line_number":573,"context_line":"            \"comments\": \"Backup my App every day at 06:00\","},{"line_number":574,"context_line":"            \"trigger_id\": \"45baf976-c20a-4894-a7c3-c94b7376bffff\","},{"line_number":575,"context_line":"            \"operation_type\": \"protect\""}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_aa786af9","line":572,"updated":"2015-12-10 09:36:23.000000000","message":"plan_id should be romved. add operation_id.","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6cda121368b021b6da80c39b522bfb51732ea05c","unresolved":false,"context_lines":[{"line_number":684,"context_line":"}"},{"line_number":685,"context_line":"```"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"`GET` : `/v1/{tenant_id}/{bank_id}/checkppoints/{checkpoint_id}/{protection_definition_id}/`"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"##### Request parameters"},{"line_number":690,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":14,"id":"7a740942_bb48d7cd","line":687,"updated":"2015-12-09 22:12:09.000000000","message":"s/checkppoints/checkpoints/","commit_id":"48826446cd8e40c616b0851e7540c5caa677405c"}],"doc/source/api/smaug_api.v1.yaml":[{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"6a1918db5cf039294488c4f1fa096f613216cd64","unresolved":false,"context_lines":[{"line_number":16,"context_line":"      description: |"},{"line_number":17,"context_line":"        The Providers endpoint returns information about the providers"},{"line_number":18,"context_line":"        offered at a given service. All providers need to be configuered"},{"line_number":19,"context_line":"        first by the admin."},{"line_number":20,"context_line":"      parameters:"},{"line_number":21,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"},{"line_number":22,"context_line":"        - $ref: \u0027#/parameters/sortParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_945f9de4","line":19,"updated":"2015-12-18 06:21:28.000000000","message":"Does provider mean an endpoint of some storage service where we could write our checkpoints/metadata?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"      description: |"},{"line_number":17,"context_line":"        The Providers endpoint returns information about the providers"},{"line_number":18,"context_line":"        offered at a given service. All providers need to be configuered"},{"line_number":19,"context_line":"        first by the admin."},{"line_number":20,"context_line":"      parameters:"},{"line_number":21,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"},{"line_number":22,"context_line":"        - $ref: \u0027#/parameters/sortParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_e37c11b7","line":19,"in_reply_to":"3a7e1126_945f9de4","updated":"2015-12-18 14:51:28.000000000","message":"The provider is the abstraction exposed to the user only the admin could configure the Bank","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"6a1918db5cf039294488c4f1fa096f613216cd64","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                        \"type\": \"boolean\","},{"line_number":46,"context_line":"                        \"title\": \"Use CBT\","},{"line_number":47,"context_line":"                        \"description\": \"Use Changed Block Tracking when backin up this volume\""},{"line_number":48,"context_line":"                      }"},{"line_number":49,"context_line":"                    }"},{"line_number":50,"context_line":"                  }"},{"line_number":51,"context_line":"                }"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_14740d66","line":48,"updated":"2015-12-18 06:21:28.000000000","message":"missing any field to describe the endpoint?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2e03d03f8e0673e2003e23767c74066b9e19ab7a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                        \"type\": \"boolean\","},{"line_number":46,"context_line":"                        \"title\": \"Use CBT\","},{"line_number":47,"context_line":"                        \"description\": \"Use Changed Block Tracking when backin up this volume\""},{"line_number":48,"context_line":"                      }"},{"line_number":49,"context_line":"                    }"},{"line_number":50,"context_line":"                  }"},{"line_number":51,"context_line":"                }"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_2cc2e434","line":48,"in_reply_to":"3a7e1126_14740d66","updated":"2015-12-20 15:30:06.000000000","message":"Endpoints are not exposed to user.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4c7c14a67abee74410c27ca041697ea71ce1333","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                        \"type\": \"boolean\","},{"line_number":46,"context_line":"                        \"title\": \"Use CBT\","},{"line_number":47,"context_line":"                        \"description\": \"Use Changed Block Tracking when backin up this volume\""},{"line_number":48,"context_line":"                      }"},{"line_number":49,"context_line":"                    }"},{"line_number":50,"context_line":"                  }"},{"line_number":51,"context_line":"                }"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_8104fa17","line":48,"in_reply_to":"3a7e1126_2cc2e434","updated":"2015-12-21 02:25:58.000000000","message":"ProtectionService needs to get provider endpoint to store checkpoint.  \nAs we talked before, ProtectionService won\u0027t access db directly but will use API to get information in DB. So the question is, if user has no access to endpoint, neither ProtectionService.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"98819487b0c8dcb83ee1257a75866fcea9763de5","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        - Protectable"},{"line_number":258,"context_line":"      responses:"},{"line_number":259,"context_line":"        \u0027200\u0027:"},{"line_number":260,"context_line":"          description: The available protectable types"},{"line_number":261,"context_line":"          schema:"},{"line_number":262,"context_line":"            type: array"},{"line_number":263,"context_line":"            items:"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_83ce89b2","line":260,"updated":"2015-12-18 04:06:17.000000000","message":"How do we define protectable types? Does it look like plugin types: volume-backup, volume-replication, vm-backup, vm-replication etc ?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        - Protectable"},{"line_number":258,"context_line":"      responses:"},{"line_number":259,"context_line":"        \u0027200\u0027:"},{"line_number":260,"context_line":"          description: The available protectable types"},{"line_number":261,"context_line":"          schema:"},{"line_number":262,"context_line":"            type: array"},{"line_number":263,"context_line":"            items:"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_a67b778b","line":260,"in_reply_to":"3a7e1126_83ce89b2","updated":"2015-12-18 14:51:28.000000000","message":"No the type are the Resources we can protect project, Networking, Image VM, Volume","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"98819487b0c8dcb83ee1257a75866fcea9763de5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        \u0027200\u0027:"},{"line_number":280,"context_line":"          description: The protectable information"},{"line_number":281,"context_line":"          schema:"},{"line_number":282,"context_line":"            $ref: \u0027#/definitions/ProtectableInfo\u0027"},{"line_number":283,"context_line":"        default:"},{"line_number":284,"context_line":"          description: Unexpected error"},{"line_number":285,"context_line":"          schema:"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_e3566dd1","line":282,"updated":"2015-12-18 04:06:17.000000000","message":"does this mean under each protectable_type, like volume_backup, we have multiple implemented plugins? say, for volume_backup, we have incremental backup or full copy? Or this is an abstraction of a different level?","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4c7c14a67abee74410c27ca041697ea71ce1333","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        \u0027200\u0027:"},{"line_number":280,"context_line":"          description: The protectable information"},{"line_number":281,"context_line":"          schema:"},{"line_number":282,"context_line":"            $ref: \u0027#/definitions/ProtectableInfo\u0027"},{"line_number":283,"context_line":"        default:"},{"line_number":284,"context_line":"          description: Unexpected error"},{"line_number":285,"context_line":"          schema:"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_ccc6b999","line":282,"in_reply_to":"3a7e1126_2c4c24c7","updated":"2015-12-21 02:25:58.000000000","message":"OK, got what does protectable_type mean. But what does ProtectableInfo mean? We need some example of ProtectableInfo under each protectable_type.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2e03d03f8e0673e2003e23767c74066b9e19ab7a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        \u0027200\u0027:"},{"line_number":280,"context_line":"          description: The protectable information"},{"line_number":281,"context_line":"          schema:"},{"line_number":282,"context_line":"            $ref: \u0027#/definitions/ProtectableInfo\u0027"},{"line_number":283,"context_line":"        default:"},{"line_number":284,"context_line":"          description: Unexpected error"},{"line_number":285,"context_line":"          schema:"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_2c4c24c7","line":282,"in_reply_to":"3a7e1126_e3566dd1","updated":"2015-12-20 15:30:06.000000000","message":"I\u0027m not sure what you mean here.\nProtectable is only relevant to resource type, such as VM, volume and image, not protect operations.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"98819487b0c8dcb83ee1257a75866fcea9763de5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"          description: Unexpected error"},{"line_number":285,"context_line":"          schema:"},{"line_number":286,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":287,"context_line":"  /protectables/{protectable_type}/instances:"},{"line_number":288,"context_line":"    get:"},{"line_number":289,"context_line":"      summary: Resource Instances"},{"line_number":290,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_e3042dc1","line":287,"updated":"2015-12-18 04:06:17.000000000","message":"Better give some protectable_type examples, or define a enum in class. Otherwise, it\u0027s hard to self-explained.","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9377192adbfba276fd984a1d38091caa6d622db4","unresolved":false,"context_lines":[{"line_number":284,"context_line":"          description: Unexpected error"},{"line_number":285,"context_line":"          schema:"},{"line_number":286,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":287,"context_line":"  /protectables/{protectable_type}/instances:"},{"line_number":288,"context_line":"    get:"},{"line_number":289,"context_line":"      summary: Resource Instances"},{"line_number":290,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a7e1126_869d1bbe","line":287,"in_reply_to":"3a7e1126_e3042dc1","updated":"2015-12-18 14:51:28.000000000","message":"will do","commit_id":"99bf8c194c5e99aa5db7a7f3e67adbaffa2a5c16"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9b65befb9f7f6f181ab4d660b6fbe4b4be33de2a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1a7b0d38_185bd688","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":12},"updated":"2015-12-26 07:56:56.000000000","message":"As we discussed last time,  All providers need to be configured first by the admin.\n\nDoes it mean that we need a api: configuring a provider,  POST action of resource providers? Admin need this api to configure a provider.","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9e7f8230ea5474af682b39c7a57dfbd6ac32b8b0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1a7b0d38_7bf21471","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":12},"in_reply_to":"1a7b0d38_185bd688","updated":"2015-12-26 08:53:17.000000000","message":"In API v1, we won\u0027t provide the configure API for provider, just let admin configure providers by conf file.","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"9b65befb9f7f6f181ab4d660b6fbe4b4be33de2a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"},{"line_number":17,"context_line":"        The Providers endpoint returns information about the providers"},{"line_number":18,"context_line":"        offered at a given service. All providers need to be configuered"},{"line_number":19,"context_line":"        first by the admin."},{"line_number":20,"context_line":"      parameters:"},{"line_number":21,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1a7b0d38_984fc6bc","line":18,"range":{"start_line":18,"start_character":61,"end_line":18,"end_character":72},"updated":"2015-12-26 07:56:56.000000000","message":"s/configuered/configured/","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04e9087e92bd5395e526a95d43b669e55a82d0fe","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"},{"line_number":17,"context_line":"        The Providers endpoint returns information about the providers"},{"line_number":18,"context_line":"        offered at a given service. All providers need to be configuered"},{"line_number":19,"context_line":"        first by the admin."},{"line_number":20,"context_line":"      parameters:"},{"line_number":21,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"1a7b0d38_4f5bcdf6","line":18,"range":{"start_line":18,"start_character":61,"end_line":18,"end_character":72},"in_reply_to":"1a7b0d38_984fc6bc","updated":"2015-12-27 09:14:29.000000000","message":"will do","commit_id":"d192b3e1a8b323e22f379c90c7f6052747d2c273"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":150,"context_line":"      description: |"},{"line_number":151,"context_line":"        Execute the protect operation for the specified plan and create a"},{"line_number":152,"context_line":"        checkpoint at a given provider."},{"line_number":153,"context_line":"      parameters:"},{"line_number":154,"context_line":"        - $ref: \u0027#/parameters/provider_idParam\u0027"},{"line_number":155,"context_line":"        - name: checkpoint"},{"line_number":156,"context_line":"          in: body"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"fa69d971_985e5744","line":153,"range":{"start_line":153,"start_character":6,"end_line":153,"end_character":16},"updated":"2015-12-30 09:55:28.000000000","message":"we are missing the paln_id","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"835a206936eb7ec7ec6d04a25ff667fc5d5cbd4e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"      description: |"},{"line_number":151,"context_line":"        Execute the protect operation for the specified plan and create a"},{"line_number":152,"context_line":"        checkpoint at a given provider."},{"line_number":153,"context_line":"      parameters:"},{"line_number":154,"context_line":"        - $ref: \u0027#/parameters/provider_idParam\u0027"},{"line_number":155,"context_line":"        - name: checkpoint"},{"line_number":156,"context_line":"          in: body"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"fa69d971_c5ab221c","line":153,"range":{"start_line":153,"start_character":6,"end_line":153,"end_character":16},"in_reply_to":"fa69d971_985e5744","updated":"2016-01-05 16:17:30.000000000","message":"The plan id (or quoted plan) is in the Checkpoint model","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":221,"context_line":"                \"name\": \"My 3 tier application\","},{"line_number":222,"context_line":"                \"resources\": ["},{"line_number":223,"context_line":"                  {"},{"line_number":224,"context_line":"                    \"id\": \"64e51e85-4f31-441f-9a5d-6e93e3196628\","},{"line_number":225,"context_line":"                    \"type\": \"OS::Nova::Server\""},{"line_number":226,"context_line":"                  },"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"fa69d971_d83a8fe7","line":223,"range":{"start_line":223,"start_character":18,"end_line":223,"end_character":19},"updated":"2015-12-30 09:55:28.000000000","message":"we are missing the sextended_info for each resource","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8f4aa3d3888c088e9ebf72df4e9e0be8e90a53ed","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            type: array"},{"line_number":281,"context_line":"            items:"},{"line_number":282,"context_line":"              $ref: \u0027#/definitions/ProtectionPlan\u0027"},{"line_number":283,"context_line":"          examples:"},{"line_number":284,"context_line":"            application/json: ["},{"line_number":285,"context_line":"              {"},{"line_number":286,"context_line":"                \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","}],"source_content_type":"text/x-yaml","patch_set":22,"id":"fa69d971_782cc3ab","line":283,"range":{"start_line":283,"start_character":10,"end_line":283,"end_character":18},"updated":"2015-12-30 09:55:28.000000000","message":"missing parameters","commit_id":"8e2536f2a2cb55fd9f3141d3824106f45ef48f5e"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"711123c61e02a3eea00fadabe17b586d0da26347","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"da6ed579_d01c6d15","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"updated":"2016-01-13 03:03:48.000000000","message":"IMO, every API should have a parameter project_id in the URL even it is a admin API.\nA API is for user or admin. Its role-based access policy is defined in the service\u0027s policy.json file. It determine which user can access which objects in which way.","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"7fb4bb4705e99186903ae65424bbc102ceb6731b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9a68dd71_b178b2f3","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"in_reply_to":"da6ed579_54fc6d6f","updated":"2016-01-22 07:32:57.000000000","message":"@chenying I agree that we should a parameter project_id in the URL for consistency.","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d206affe2e93f0c51207fafafe699cbe57cfd389","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"da6ed579_fba4cda6","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"in_reply_to":"da6ed579_d01c6d15","updated":"2016-01-13 16:22:17.000000000","message":"Could you elaborate on that point? Cinder doesn\u0027t do it for it\u0027s storage backends. How are we different?","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"97672b49d6818b20c50370d8f5df87dd229fcaf5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"produces:"},{"line_number":11,"context_line":"  - application/json"},{"line_number":12,"context_line":"paths:"},{"line_number":13,"context_line":"  /providers:"},{"line_number":14,"context_line":"    get:"},{"line_number":15,"context_line":"      summary: Providers"},{"line_number":16,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"da6ed579_54fc6d6f","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":13},"in_reply_to":"da6ed579_fba4cda6","updated":"2016-01-15 01:58:13.000000000","message":"Hi saggi IMO, A API is for a user or a admin. Its policy or permission can be configured in \nthe policy.json. We don\u0027t need identify permission by whether or not having a parameter \nproject_id in the URL. \n\nTake for example cinder project (or nova;manila)\nEvery API[1] in cinder have a parameter tenant_id in the URL even it is a API for only admin[2]. \nYou can find that many API is only for a admin in the file policy.json[2], such as \n\"volume:get_volume_admin_metadata\": \"rule:admin_api\".\n[1]http://developer.openstack.org/api-ref-blockstorage-v2.html\n[2]https://github.com/openstack/cinder/blob/master/etc/cinder/policy.json\n\n\nI also note neutron project. Every API don\u0027t have a parameter project_id in the URL, but many API\nhave the parameter tenant_id in the request parameters[3].\nThere are also many API is only for a admin[4].\n\n[3]http://developer.openstack.org/api-ref-networking-v2.html\n[4]https://github.com/openstack/neutron/blob/master/etc/policy.json\n\nWhat I want to explain is that having parameter project_id in the URL or not is not\nthe key for a admin API. But we should retain consistency.(like cinder or neutron)\nI have discussed with Eran. If we have some API URL with parameter tenant_id,some don\u0027t \nin smaug. It make our wsgi resource controller complex and difficult to implement.\nWe must consider handle API URL with parameter tenant_id or not in one basic resource controller class.\n\nSo In smaug, I suggest every API should have a parameter project_id in the URL to retain consistency.","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"1eb051ec2f02c15d21f03a98fe8e97c56da24de1","unresolved":false,"context_lines":[{"line_number":363,"context_line":"          description: Unexpected error"},{"line_number":364,"context_line":"          schema:"},{"line_number":365,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":366,"context_line":"  /{project_id}/plans/{plan_id}:"},{"line_number":367,"context_line":"    get:"},{"line_number":368,"context_line":"      summary: Protection Plan"},{"line_number":369,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"fa69d971_69d40ceb","line":366,"updated":"2016-01-07 07:26:52.000000000","message":"Lack a put method, to update the plan.","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f7780290d52fb989dc6c8a60e2d4a3906709e38d","unresolved":false,"context_lines":[{"line_number":363,"context_line":"          description: Unexpected error"},{"line_number":364,"context_line":"          schema:"},{"line_number":365,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":366,"context_line":"  /{project_id}/plans/{plan_id}:"},{"line_number":367,"context_line":"    get:"},{"line_number":368,"context_line":"      summary: Protection Plan"},{"line_number":369,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"fa69d971_e9271110","line":366,"in_reply_to":"fa69d971_69d40ceb","updated":"2016-01-09 10:13:34.000000000","message":"Yes we need it for all the entities that are writable\nTrigger , scheduled_operations ..","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f7780290d52fb989dc6c8a60e2d4a3906709e38d","unresolved":false,"context_lines":[{"line_number":904,"context_line":"      id:"},{"line_number":905,"context_line":"        readOnly: true"},{"line_number":906,"context_line":"        type: string"},{"line_number":907,"context_line":"  ProtectionPlan:"},{"line_number":908,"context_line":"    type: object"},{"line_number":909,"context_line":"    required: [ name, protection_provider_id, resources ]"},{"line_number":910,"context_line":"    properties:"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"fa69d971_4985fdcc","line":907,"range":{"start_line":907,"start_character":2,"end_line":907,"end_character":16},"updated":"2016-01-09 10:13:34.000000000","message":"Missing status Running/Suspended","commit_id":"c114a7c345585876dbdfd06ce35bca27ea21162e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                      \"use_cbt\": {"},{"line_number":83,"context_line":"                        \"type\": \"boolean\","},{"line_number":84,"context_line":"                        \"title\": \"Use CBT\","},{"line_number":85,"context_line":"                        \"description\": \"Use Changed Block Tracking when backin up this volume\""},{"line_number":86,"context_line":"                      }"},{"line_number":87,"context_line":"                    }"},{"line_number":88,"context_line":"                  }"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_a3a68351","line":85,"range":{"start_line":85,"start_character":72,"end_line":85,"end_character":78},"updated":"2016-01-16 16:55:07.000000000","message":"/backin/backing/","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                      \"use_cbt\": {"},{"line_number":83,"context_line":"                        \"type\": \"boolean\","},{"line_number":84,"context_line":"                        \"title\": \"Use CBT\","},{"line_number":85,"context_line":"                        \"description\": \"Use Changed Block Tracking when backin up this volume\""},{"line_number":86,"context_line":"                      }"},{"line_number":87,"context_line":"                    }"},{"line_number":88,"context_line":"                  }"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_c216f6a6","line":85,"range":{"start_line":85,"start_character":72,"end_line":85,"end_character":78},"in_reply_to":"da6ed579_a3a68351","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f744989c07f70fb50a5db2d41b40309a472ff2fb","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        - $ref: \u0027#/parameters/limitParam\u0027"},{"line_number":285,"context_line":"        - $ref: \u0027#/parameters/markerParam\u0027"},{"line_number":286,"context_line":"      tags:"},{"line_number":287,"context_line":"        - Project API"},{"line_number":288,"context_line":"        - Protection Plan"},{"line_number":289,"context_line":"      responses:"},{"line_number":290,"context_line":"        \u0027200\u0027:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_ec7fec14","line":287,"range":{"start_line":287,"start_character":10,"end_line":287,"end_character":17},"updated":"2016-01-14 17:02:57.000000000","message":"I think that the Protect API tag is confusing","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        - $ref: \u0027#/parameters/limitParam\u0027"},{"line_number":285,"context_line":"        - $ref: \u0027#/parameters/markerParam\u0027"},{"line_number":286,"context_line":"      tags:"},{"line_number":287,"context_line":"        - Project API"},{"line_number":288,"context_line":"        - Protection Plan"},{"line_number":289,"context_line":"      responses:"},{"line_number":290,"context_line":"        \u0027200\u0027:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_426a061c","line":287,"range":{"start_line":287,"start_character":10,"end_line":287,"end_character":17},"in_reply_to":"da6ed579_ec7fec14","updated":"2016-01-18 09:21:40.000000000","message":"Do you mean the project API? It used to be tagged as tenant API but I got comments that tenant is deprecated terminology and we should use project instead.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        - $ref: \u0027#/parameters/projectParam\u0027"},{"line_number":373,"context_line":"        - $ref: \u0027#/parameters/plan_idParam\u0027"},{"line_number":374,"context_line":"      tags:"},{"line_number":375,"context_line":"        - Project API"},{"line_number":376,"context_line":"        - Protection Plan"},{"line_number":377,"context_line":"      responses:"},{"line_number":378,"context_line":"        \u0027200\u0027:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_033aefe7","line":375,"range":{"start_line":375,"start_character":10,"end_line":375,"end_character":17},"updated":"2016-01-16 16:55:07.000000000","message":"Project or Protect?","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        - $ref: \u0027#/parameters/projectParam\u0027"},{"line_number":373,"context_line":"        - $ref: \u0027#/parameters/plan_idParam\u0027"},{"line_number":374,"context_line":"      tags:"},{"line_number":375,"context_line":"        - Project API"},{"line_number":376,"context_line":"        - Protection Plan"},{"line_number":377,"context_line":"      responses:"},{"line_number":378,"context_line":"        \u0027200\u0027:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_c264b64a","line":375,"range":{"start_line":375,"start_character":10,"end_line":375,"end_character":17},"in_reply_to":"da6ed579_033aefe7","updated":"2016-01-18 09:21:40.000000000","message":"Project API. All API endpoints that are namespaced by a project (tenant) are tagged with Project API.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a03785808e0380e00745dfb13f4ac10f9d3aeb6d","unresolved":false,"context_lines":[{"line_number":564,"context_line":"          in: body"},{"line_number":565,"context_line":"          required: true"},{"line_number":566,"context_line":"          schema:"},{"line_number":567,"context_line":"            $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":568,"context_line":"      responses:"},{"line_number":569,"context_line":"        \u0027200\u0027:"},{"line_number":570,"context_line":"          description: The new scheduled operation"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_c30b772a","line":567,"range":{"start_line":567,"start_character":33,"end_line":567,"end_character":51},"updated":"2016-01-16 16:55:07.000000000","message":"Is this actually supposed to be ScheduledOperation?","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":564,"context_line":"          in: body"},{"line_number":565,"context_line":"          required: true"},{"line_number":566,"context_line":"          schema:"},{"line_number":567,"context_line":"            $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":568,"context_line":"      responses:"},{"line_number":569,"context_line":"        \u0027200\u0027:"},{"line_number":570,"context_line":"          description: The new scheduled operation"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_a29422e8","line":567,"range":{"start_line":567,"start_character":33,"end_line":567,"end_character":51},"in_reply_to":"da6ed579_c30b772a","updated":"2016-01-18 09:21:40.000000000","message":"This is a more generic case of scheduled operation. Scheduled operations a have a specific explicit trigger. We already got requests for some complex automatic operations where the triggers (when operations are executed and what they do) are more complex.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af8d072977b6f729ee610c5afc9ed6d2401db9b0","unresolved":false,"context_lines":[{"line_number":852,"context_line":"      tags:"},{"line_number":853,"context_line":"        - Project API"},{"line_number":854,"context_line":"        - Trigger"},{"line_number":855,"context_line":"      responses:"},{"line_number":856,"context_line":"        \u0027200\u0027:"},{"line_number":857,"context_line":"          description: Trigger deleted"},{"line_number":858,"context_line":"        default:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_78e3bba4","line":855,"range":{"start_line":855,"start_character":6,"end_line":855,"end_character":15},"updated":"2016-01-14 17:00:13.000000000","message":"Should return an error if this trigger is actively used in one of the scheduled operation","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":852,"context_line":"      tags:"},{"line_number":853,"context_line":"        - Project API"},{"line_number":854,"context_line":"        - Trigger"},{"line_number":855,"context_line":"      responses:"},{"line_number":856,"context_line":"        \u0027200\u0027:"},{"line_number":857,"context_line":"          description: Trigger deleted"},{"line_number":858,"context_line":"        default:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_a2bbc274","line":855,"range":{"start_line":855,"start_character":6,"end_line":855,"end_character":15},"in_reply_to":"da6ed579_78e3bba4","updated":"2016-01-18 09:21:40.000000000","message":"I don\u0027t understand the question.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"d2ee6d9acc736ee39664d982fb13ba2661ff123f","unresolved":false,"context_lines":[{"line_number":852,"context_line":"      tags:"},{"line_number":853,"context_line":"        - Project API"},{"line_number":854,"context_line":"        - Trigger"},{"line_number":855,"context_line":"      responses:"},{"line_number":856,"context_line":"        \u0027200\u0027:"},{"line_number":857,"context_line":"          description: Trigger deleted"},{"line_number":858,"context_line":"        default:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"7a5de9d1_741c98c1","line":855,"range":{"start_line":855,"start_character":6,"end_line":855,"end_character":15},"in_reply_to":"da6ed579_a2bbc274","updated":"2016-01-28 12:17:25.000000000","message":"We need to add an error code 4XX that this trigger can not be deleted because it is being used by a scheduled operation","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af8d072977b6f729ee610c5afc9ed6d2401db9b0","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"      properties:"},{"line_number":1105,"context_line":"        start_time:"},{"line_number":1106,"context_line":"          type: string"},{"line_number":1107,"context_line":"          format: date-time"},{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_8c2f5087","line":1107,"range":{"start_line":1107,"start_character":10,"end_line":1107,"end_character":16},"updated":"2016-01-14 17:00:13.000000000","message":"xsd:datetime","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":1104,"context_line":"      properties:"},{"line_number":1105,"context_line":"        start_time:"},{"line_number":1106,"context_line":"          type: string"},{"line_number":1107,"context_line":"          format: date-time"},{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_c803750c","line":1107,"range":{"start_line":1107,"start_character":10,"end_line":1107,"end_character":16},"in_reply_to":"da6ed579_8c2f5087","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af8d072977b6f729ee610c5afc9ed6d2401db9b0","unresolved":false,"context_lines":[{"line_number":1106,"context_line":"          type: string"},{"line_number":1107,"context_line":"          format: date-time"},{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"},{"line_number":1111,"context_line":"        recurrence:"},{"line_number":1112,"context_line":"          type: string"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_2c28a485","line":1109,"range":{"start_line":1109,"start_character":10,"end_line":1109,"end_character":14},"updated":"2016-01-14 17:00:13.000000000","message":"Should be defined as xsd:duration","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":1106,"context_line":"          type: string"},{"line_number":1107,"context_line":"          format: date-time"},{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"},{"line_number":1111,"context_line":"        recurrence:"},{"line_number":1112,"context_line":"          type: string"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_2d0ca341","line":1109,"range":{"start_line":1109,"start_character":10,"end_line":1109,"end_character":14},"in_reply_to":"da6ed579_2c28a485","updated":"2016-01-18 09:21:40.000000000","message":"Done","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"af8d072977b6f729ee610c5afc9ed6d2401db9b0","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"},{"line_number":1111,"context_line":"        recurrence:"},{"line_number":1112,"context_line":"          type: string"},{"line_number":1113,"context_line":"      required: [ start_time, trigger_window, recurrence ]"},{"line_number":1114,"context_line":"  Restoration:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_586a77ef","line":1111,"range":{"start_line":1111,"start_character":8,"end_line":1111,"end_character":18},"updated":"2016-01-14 17:00:13.000000000","message":"should be defined as  iCalendar\tRFC 2445","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9162bfbe4e2a18f0c64832623475f6975acd5c4f","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"        trigger_window:"},{"line_number":1109,"context_line":"          type: integer"},{"line_number":1110,"context_line":"          format: int32"},{"line_number":1111,"context_line":"        recurrence:"},{"line_number":1112,"context_line":"          type: string"},{"line_number":1113,"context_line":"      required: [ start_time, trigger_window, recurrence ]"},{"line_number":1114,"context_line":"  Restoration:"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"da6ed579_a2174253","line":1111,"range":{"start_line":1111,"start_character":8,"end_line":1111,"end_character":18},"in_reply_to":"da6ed579_586a77ef","updated":"2016-01-18 09:21:40.000000000","message":"We decided in the meeting to start with cron format and give the ability to extend to RPC 2445 in version 2. I will reflect these decisions in the document.","commit_id":"f1a5b21e80e92a2a36b015a938ea4274d0994237"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"094e3419cd93bf05bd44d03b418fd8b33af8e13c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"      description: |"},{"line_number":99,"context_line":"        The checkpoints endpoint returns information about the checkpoints"},{"line_number":100,"context_line":"        offered at a given provider."},{"line_number":101,"context_line":"      parameters:"},{"line_number":102,"context_line":"        - $ref: \u0027#/parameters/provider_idParam\u0027"},{"line_number":103,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"},{"line_number":104,"context_line":"        - $ref: \u0027#/parameters/sortParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"7a5de9d1_ae125b55","line":101,"range":{"start_line":101,"start_character":6,"end_line":101,"end_character":17},"updated":"2016-01-30 02:50:49.000000000","message":"As I discuss with yinwei, I think we should add two parameters:\n- $ref: \u0027#/parameters/tenant_idParam\u0027\n- $ref: \u0027#/parameters/plan_idParam\u0027\nA tenant can only query the checkpoints which he created. \nOnly providing provider_id to query the checkpoints, there are maybe \nreturn too many checkpoints returned. \nProviding plan_idParam, tenant can just query the checkpoints of a plan.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"9dbc009d18362f563a1f226a6683bf5787103c32","unresolved":false,"context_lines":[{"line_number":98,"context_line":"      description: |"},{"line_number":99,"context_line":"        The checkpoints endpoint returns information about the checkpoints"},{"line_number":100,"context_line":"        offered at a given provider."},{"line_number":101,"context_line":"      parameters:"},{"line_number":102,"context_line":"        - $ref: \u0027#/parameters/provider_idParam\u0027"},{"line_number":103,"context_line":"        - $ref: \u0027#/parameters/nameFilterParam\u0027"},{"line_number":104,"context_line":"        - $ref: \u0027#/parameters/sortParam\u0027"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"5a5ae5dd_880e17e4","line":101,"range":{"start_line":101,"start_character":6,"end_line":101,"end_character":17},"in_reply_to":"7a5de9d1_ae125b55","updated":"2016-02-02 23:47:48.000000000","message":"I added the project id but other filtering will be done in the query and not as part of the path.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"3a870b2facf627f5af1128c56c22123e1c418e43","unresolved":false,"context_lines":[{"line_number":420,"context_line":"          description: Unexpected error"},{"line_number":421,"context_line":"          schema:"},{"line_number":422,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":423,"context_line":"  /protectables:"},{"line_number":424,"context_line":"    get:"},{"line_number":425,"context_line":"      summary: Protectables"},{"line_number":426,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_775f8ae5","line":423,"range":{"start_line":423,"start_character":3,"end_line":423,"end_character":15},"updated":"2016-01-22 08:22:38.000000000","message":"We need to add /{project_id}/ to the admin API as well for consistency","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"3a870b2facf627f5af1128c56c22123e1c418e43","unresolved":false,"context_lines":[{"line_number":448,"context_line":"          description: Unexpected error"},{"line_number":449,"context_line":"          schema:"},{"line_number":450,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":451,"context_line":"  /protectables/{protectable_type}:"},{"line_number":452,"context_line":"    get:"},{"line_number":453,"context_line":"      summary: Protectables"},{"line_number":454,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_5713660d","line":451,"range":{"start_line":451,"start_character":3,"end_line":451,"end_character":15},"updated":"2016-01-22 08:22:38.000000000","message":"ditto","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"0b76c3c3253d98607546062ab0c0d86e46d5848b","unresolved":false,"context_lines":[{"line_number":577,"context_line":"              \"project_id\": \"23902b02-5666-4ee6-8dfe-962ac09c3994\","},{"line_number":578,"context_line":"              \"operation_type\": \"protect\","},{"line_number":579,"context_line":"              \"operation_definition\": {"},{"line_number":580,"context_line":"                \"trigger_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":581,"context_line":"                \"plan_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\""},{"line_number":582,"context_line":"              }"},{"line_number":583,"context_line":"            }"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_3cf7605a","line":580,"range":{"start_line":580,"start_character":17,"end_line":580,"end_character":27},"updated":"2016-01-25 08:44:12.000000000","message":"it is better to remove the trigger_id out of operation_definition. because scheduled operation is composed of trigger and operation, trigger does not belong to operation, but belongs to scheduled operation.","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        - $ref: \u0027#/parameters/markerParam\u0027"},{"line_number":647,"context_line":"      tags:"},{"line_number":648,"context_line":"        - Project API"},{"line_number":649,"context_line":"        - Restoration"},{"line_number":650,"context_line":"      responses:"},{"line_number":651,"context_line":"        \u0027200\u0027:"},{"line_number":652,"context_line":"          description: An array of restorations"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_0de79541","line":649,"range":{"start_line":649,"start_character":10,"end_line":649,"end_character":21},"updated":"2016-01-20 12:51:03.000000000","message":"As we discussed we should change this to \"Restore\" from \"restoration\"","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":894,"context_line":"        $ref: \u0027#/definitions/ProtectionPlan\u0027"},{"line_number":895,"context_line":"      status:"},{"line_number":896,"context_line":"        readOnly: true"},{"line_number":897,"context_line":"        type: string"},{"line_number":898,"context_line":"  Resource:"},{"line_number":899,"context_line":"    type: object"},{"line_number":900,"context_line":"    properties:"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_90b39a0a","line":897,"range":{"start_line":897,"start_character":8,"end_line":897,"end_character":12},"updated":"2016-01-20 12:51:03.000000000","message":"Missing possible values for status \nMaybe we need a progress for each of the plugins","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7b26b4221e54bf919655b07b2b4cbe487f2490a","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"      parameters:"},{"line_number":1135,"context_line":"        type: object"},{"line_number":1136,"context_line":"        format: dict"},{"line_number":1137,"context_line":"      status:"},{"line_number":1138,"context_line":"        type: string"},{"line_number":1139,"context_line":"  Error:"},{"line_number":1140,"context_line":"    type: object"}],"source_content_type":"text/x-yaml","patch_set":26,"id":"9a68dd71_ed16c1a6","line":1137,"range":{"start_line":1137,"start_character":6,"end_line":1137,"end_character":12},"updated":"2016-01-20 12:51:03.000000000","message":"Missing possible status values \nand maybe progress status for the plugins","commit_id":"6ede1e7e8cc65356f271dc3446586f100b700243"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e7de14dc5b74c4badc9456fad5c32a9b2e51556b","unresolved":false,"context_lines":[{"line_number":858,"context_line":"      tags:"},{"line_number":859,"context_line":"        - Project API"},{"line_number":860,"context_line":"        - Trigger"},{"line_number":861,"context_line":"      responses:"},{"line_number":862,"context_line":"        \u0027200\u0027:"},{"line_number":863,"context_line":"          description: Trigger deleted"},{"line_number":864,"context_line":"        default:"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"dae33548_87f5ef84","line":861,"range":{"start_line":861,"start_character":6,"end_line":861,"end_character":15},"updated":"2016-02-15 10:30:58.000000000","message":"Please see comment on patch 25 \n\nPlease define an error code for \nwhen we get delete on trigger that is used by one of the scheduled operations  \n\nWe could use HTTP error 424 (Failed Dependency)","commit_id":"f063c6b36bb301c150ab638bc48e09147a71f7e6"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"916d54b02ce086d224cbecf03437b259e70f0270","unresolved":false,"context_lines":[{"line_number":679,"context_line":"          schema:"},{"line_number":680,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":681,"context_line":"    post:"},{"line_number":682,"context_line":"      summary: Restorations"},{"line_number":683,"context_line":"      description: |"},{"line_number":684,"context_line":"        Start a restoration."},{"line_number":685,"context_line":"      tags:"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9aed3d3a_8a010108","line":682,"range":{"start_line":682,"start_character":15,"end_line":682,"end_character":27},"updated":"2016-02-29 16:29:23.000000000","message":"Restore","commit_id":"b64c1d0eb319bab333821c6f72c13a4de90b2805"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"916d54b02ce086d224cbecf03437b259e70f0270","unresolved":false,"context_lines":[{"line_number":681,"context_line":"    post:"},{"line_number":682,"context_line":"      summary: Restorations"},{"line_number":683,"context_line":"      description: |"},{"line_number":684,"context_line":"        Start a restoration."},{"line_number":685,"context_line":"      tags:"},{"line_number":686,"context_line":"        - Project API"},{"line_number":687,"context_line":"        - Restoration"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9aed3d3a_3bdac517","line":684,"range":{"start_line":684,"start_character":16,"end_line":684,"end_character":27},"updated":"2016-02-29 16:29:23.000000000","message":"Restore","commit_id":"b64c1d0eb319bab333821c6f72c13a4de90b2805"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"916d54b02ce086d224cbecf03437b259e70f0270","unresolved":false,"context_lines":[{"line_number":691,"context_line":"          in: body"},{"line_number":692,"context_line":"          required: true"},{"line_number":693,"context_line":"          schema:"},{"line_number":694,"context_line":"            $ref: \u0027#/definitions/Restoration\u0027"},{"line_number":695,"context_line":"      responses:"},{"line_number":696,"context_line":"        \u0027200\u0027:"},{"line_number":697,"context_line":"          description: The new started restoration information"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9aed3d3a_20b28406","line":694,"range":{"start_line":694,"start_character":33,"end_line":694,"end_character":44},"updated":"2016-02-29 16:29:23.000000000","message":"same","commit_id":"b64c1d0eb319bab333821c6f72c13a4de90b2805"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"916d54b02ce086d224cbecf03437b259e70f0270","unresolved":false,"context_lines":[{"line_number":694,"context_line":"            $ref: \u0027#/definitions/Restoration\u0027"},{"line_number":695,"context_line":"      responses:"},{"line_number":696,"context_line":"        \u0027200\u0027:"},{"line_number":697,"context_line":"          description: The new started restoration information"},{"line_number":698,"context_line":"          schema:"},{"line_number":699,"context_line":"            $ref: \u0027#/definitions/Restoration\u0027"},{"line_number":700,"context_line":"          examples:"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9aed3d3a_c0a758bb","line":697,"range":{"start_line":697,"start_character":39,"end_line":697,"end_character":50},"updated":"2016-02-29 16:29:23.000000000","message":"ditto","commit_id":"b64c1d0eb319bab333821c6f72c13a4de90b2805"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"efb541c9d83094bb8eed7a6c803f0b21b33f6ce8","unresolved":false,"context_lines":[{"line_number":639,"context_line":"          description: Unexpected error"},{"line_number":640,"context_line":"          schema:"},{"line_number":641,"context_line":"            $ref: \u0027#/definitions/Error\u0027"},{"line_number":642,"context_line":"  /{project_id}/restorations:"},{"line_number":643,"context_line":"    get:"},{"line_number":644,"context_line":"      summary: Restorations"},{"line_number":645,"context_line":"      description: |"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"7af24918_467078dc","line":642,"range":{"start_line":642,"start_character":15,"end_line":642,"end_character":28},"updated":"2016-03-03 14:45:32.000000000","message":"Please change to restore\ns/restoration/restore/a","commit_id":"18525d0892d5309c646e2bb951e59996f022fef3"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"008a9b9fadff2574126ffee92591f924d6f06423","unresolved":false,"context_lines":[{"line_number":539,"context_line":"          schema:"},{"line_number":540,"context_line":"            type: array"},{"line_number":541,"context_line":"            items:"},{"line_number":542,"context_line":"              $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":543,"context_line":"          examples:"},{"line_number":544,"context_line":"            application/json: ["},{"line_number":545,"context_line":"              {"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1af94dfe_887ddb1e","line":542,"range":{"start_line":542,"start_character":0,"end_line":542,"end_character":54},"updated":"2016-03-16 14:19:07.000000000","message":"Should be ScheduledOperation","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"45989df48c8b6e453665b81630207dcfdc7b42f1","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                \"project_id\": \"23902b02-5666-4ee6-8dfe-962ac09c3994\","},{"line_number":549,"context_line":"                \"operation_type\": \"protect\","},{"line_number":550,"context_line":"                \"operation_definition\": {"},{"line_number":551,"context_line":"                  \"trigger_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":552,"context_line":"                  \"plan_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\""},{"line_number":553,"context_line":"                }"},{"line_number":554,"context_line":"              },"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"5aef4532_c545536f","line":551,"range":{"start_line":551,"start_character":29,"end_line":551,"end_character":31},"updated":"2016-03-11 03:55:28.000000000","message":"please, move the \u0027trigger_id\u0027 out of \u0027operation_definition\u0027. thanks.","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"008a9b9fadff2574126ffee92591f924d6f06423","unresolved":false,"context_lines":[{"line_number":570,"context_line":"          in: body"},{"line_number":571,"context_line":"          required: true"},{"line_number":572,"context_line":"          schema:"},{"line_number":573,"context_line":"            $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":574,"context_line":"      responses:"},{"line_number":575,"context_line":"        \u0027200\u0027:"},{"line_number":576,"context_line":"          description: The new scheduled operation"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1af94dfe_486e3302","line":573,"range":{"start_line":573,"start_character":0,"end_line":573,"end_character":52},"updated":"2016-03-16 14:19:07.000000000","message":"Should be ScheduledOperation","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"008a9b9fadff2574126ffee92591f924d6f06423","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        \u0027200\u0027:"},{"line_number":576,"context_line":"          description: The new scheduled operation"},{"line_number":577,"context_line":"          schema:"},{"line_number":578,"context_line":"            $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":579,"context_line":"          examples:"},{"line_number":580,"context_line":"            application/json: {"},{"line_number":581,"context_line":"              \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\","}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1af94dfe_287127e1","line":578,"range":{"start_line":578,"start_character":0,"end_line":578,"end_character":52},"updated":"2016-03-16 14:19:07.000000000","message":"Should be ScheduledOperation","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"45989df48c8b6e453665b81630207dcfdc7b42f1","unresolved":false,"context_lines":[{"line_number":583,"context_line":"              \"project_id\": \"23902b02-5666-4ee6-8dfe-962ac09c3994\","},{"line_number":584,"context_line":"              \"operation_type\": \"protect\","},{"line_number":585,"context_line":"              \"operation_definition\": {"},{"line_number":586,"context_line":"                \"trigger_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":587,"context_line":"                \"plan_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\""},{"line_number":588,"context_line":"              }"},{"line_number":589,"context_line":"            }"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"5aef4532_25619705","line":586,"range":{"start_line":586,"start_character":17,"end_line":586,"end_character":27},"updated":"2016-03-11 03:55:28.000000000","message":"ditto","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"008a9b9fadff2574126ffee92591f924d6f06423","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        \u0027200\u0027:"},{"line_number":607,"context_line":"          description: A scheduled operation"},{"line_number":608,"context_line":"          schema:"},{"line_number":609,"context_line":"            $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":610,"context_line":"          examples:"},{"line_number":611,"context_line":"            application/json: {"},{"line_number":612,"context_line":"              \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\","}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1af94dfe_c8824394","line":609,"range":{"start_line":609,"start_character":0,"end_line":609,"end_character":52},"updated":"2016-03-16 14:19:07.000000000","message":"Should be ScheduledOperation","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"45989df48c8b6e453665b81630207dcfdc7b42f1","unresolved":false,"context_lines":[{"line_number":614,"context_line":"              \"project_id\": \"23902b02-5666-4ee6-8dfe-962ac09c3994\","},{"line_number":615,"context_line":"              \"operation_type\": \"protect\","},{"line_number":616,"context_line":"              \"operation_definition\": {"},{"line_number":617,"context_line":"                \"trigger_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":618,"context_line":"                \"plan_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\""},{"line_number":619,"context_line":"              }"},{"line_number":620,"context_line":"            }"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"5aef4532_a533e712","line":617,"range":{"start_line":617,"start_character":17,"end_line":617,"end_character":27},"updated":"2016-03-11 03:55:28.000000000","message":"ditto","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"45989df48c8b6e453665b81630207dcfdc7b42f1","unresolved":false,"context_lines":[{"line_number":771,"context_line":"              {"},{"line_number":772,"context_line":"                \"id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\","},{"line_number":773,"context_line":"                \"name\": \"My backup trigger\","},{"line_number":774,"context_line":"                \"type\": \"TimeTrigger\","},{"line_number":775,"context_line":"                \"properties\": {"},{"line_number":776,"context_line":"                  \"start_time\": \"2015-12-17\","},{"line_number":777,"context_line":"                  \"trigger_window\": \"60\","}],"source_content_type":"text/x-yaml","patch_set":30,"id":"5aef4532_dd5a4b2a","line":774,"range":{"start_line":774,"start_character":25,"end_line":774,"end_character":36},"updated":"2016-03-11 03:55:28.000000000","message":"can we change the type to \u0027time\u0027? we should specify the value of trigger type, like \u0027time\u0027, \u0027event\u0027. thanks.","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"008a9b9fadff2574126ffee92591f924d6f06423","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"        trigger_id:"},{"line_number":1098,"context_line":"          type: string"},{"line_number":1099,"context_line":"          format: UUID"},{"line_number":1100,"context_line":"    - $ref: \u0027#/definitions/OperationDefinition\u0027"},{"line_number":1101,"context_line":"  OperationStatus:"},{"line_number":1102,"context_line":"    type: object"},{"line_number":1103,"context_line":"    properties:"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1af94dfe_dcc5e43c","line":1100,"range":{"start_line":1100,"start_character":0,"end_line":1100,"end_character":47},"updated":"2016-03-16 14:19:07.000000000","message":"Should be inside the above object, inside \u0027properties\u0027. I.E:\noperation_definition:\n  $ref: \u0027#/definitions/OperationDefinition\u0027","commit_id":"ab50b8cb74f35075e9746c489771b598bb8e4beb"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"8514ec10d29b9e290514f7f42b58a80e7f1bce3f","unresolved":false,"context_lines":[{"line_number":541,"context_line":"            items:"},{"line_number":542,"context_line":"              $ref: \u0027#/definitions/AutomaticOperation\u0027"},{"line_number":543,"context_line":"          examples:"},{"line_number":544,"context_line":"            application/json: ["},{"line_number":545,"context_line":"              {"},{"line_number":546,"context_line":"                \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\","},{"line_number":547,"context_line":"                \"name\": \"My scheduled operation\","}],"source_content_type":"text/x-yaml","patch_set":31,"id":"fa0719c6_06808945","line":544,"range":{"start_line":544,"start_character":24,"end_line":544,"end_character":28},"updated":"2016-03-22 14:31:06.000000000","message":"i think the data structure should be like this:\n{\n                \"id\": \"1a2c0c3d-f402-4cd8-b5db-82e85cb51fad\",\n                \"name\": \"My scheduled operation\",\n                \"project_id\": \"23902b02-5666-4ee6-8dfe-962ac09c3994\",\n                \"operation_type\": \"protect\",\n                \"trigger_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\",\n                \"operation_definition\": {\n                  \"plan_id\": \"2a9ce1f3-cc1a-4516-9435-0ebb13caa398\"\n                }\n              },\n\nbecause user can extend operation definition to create any kind of operation, and it is match with the db table \u0027ScheduledOperation\u0027","commit_id":"f02f1a2f76d47c191bbd7589f8ecc1b3476fc6c6"}]}
