)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2107e72d18df1bd24e8cc68a609d66646f9baf92","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yinwei \u003cyinweiishere@icloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-28 14:54:21 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"design document for protection service which includes the high level"},{"line_number":8,"context_line":"architecture of protection service, the class-diagram and some sequence"},{"line_number":9,"context_line":"diagrams for several typical scenarios."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a7b0d38_f3f05693","line":7,"updated":"2015-12-28 11:32:37.000000000","message":"Need a title here.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yinwei \u003cyinweiishere@icloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-28 14:54:21 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"design document for protection service which includes the high level"},{"line_number":8,"context_line":"architecture of protection service, the class-diagram and some sequence"},{"line_number":9,"context_line":"diagrams for several typical scenarios."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa69d971_c540690a","line":7,"in_reply_to":"1a7b0d38_f3f05693","updated":"2015-12-30 02:24:53.000000000","message":"Thanks for reminder!\nWill correct in next patch set.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"}],"doc/source/protection-service/class-diagram.pu":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_76297289","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":17},"updated":"2016-01-06 13:14:31.000000000","message":"CheckpointCollection","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_d13d0890","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":17},"in_reply_to":"fa69d971_76297289","updated":"2016-01-11 03:29:36.000000000","message":"ok, will do.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"},{"line_number":28,"context_line":"  +delete_checkpoint(provider_id:String, checkpoint_id:String):void"},{"line_number":29,"context_line":"  +create_checkpoint(plan:ProtectionPlan): Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_d62e1e8b","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":20},"updated":"2016-01-06 13:14:31.000000000","message":"No need to specify checkpoints in every call. It\u0027s implied from the class context.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"},{"line_number":28,"context_line":"  +delete_checkpoint(provider_id:String, checkpoint_id:String):void"},{"line_number":29,"context_line":"  +create_checkpoint(plan:ProtectionPlan): Checkpoint"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_314d843e","line":26,"range":{"start_line":26,"start_character":8,"end_line":26,"end_character":20},"in_reply_to":"fa69d971_d62e1e8b","updated":"2016-01-11 03:29:36.000000000","message":"ok, will do","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"},{"line_number":28,"context_line":"  +delete_checkpoint(provider_id:String, checkpoint_id:String):void"},{"line_number":29,"context_line":"  +create_checkpoint(plan:ProtectionPlan): Checkpoint"},{"line_number":30,"context_line":"  +update_checkpoint(checkpoint:Checkpoint, kwargs:{}): void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_7085fa57","line":27,"range":{"start_line":27,"start_character":59,"end_line":27,"end_character":60},"updated":"2016-01-06 13:14:31.000000000","message":"s/}/)/","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class Checkpoints {"},{"line_number":25,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":26,"context_line":"  +list_checkpoints(list_options:{}): []Checkpoints"},{"line_number":27,"context_line":"  +show_checkpoint(provider_id:String, checkpoint_id:String}: Checkpoint"},{"line_number":28,"context_line":"  +delete_checkpoint(provider_id:String, checkpoint_id:String):void"},{"line_number":29,"context_line":"  +create_checkpoint(plan:ProtectionPlan): Checkpoint"},{"line_number":30,"context_line":"  +update_checkpoint(checkpoint:Checkpoint, kwargs:{}): void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_514a7827","line":27,"range":{"start_line":27,"start_character":59,"end_line":27,"end_character":60},"in_reply_to":"fa69d971_7085fa57","updated":"2016-01-11 03:29:36.000000000","message":"ok, will do","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ResourceProtectTask extends Task{"},{"line_number":52,"context_line":"  -protect_resource: Resource"},{"line_number":53,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":54,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_565a2ef3","line":51,"range":{"start_line":51,"start_character":34,"end_line":51,"end_character":38},"updated":"2016-01-06 13:14:31.000000000","message":"I think tasks are internal entities and shouldn\u0027t be exposed to the API user. You get progression from the entities themselves.\n\nAlso the Task class is implicitly generated in the image instead of explicit in the file so it\u0027s hard to comment on it. Please add it.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ResourceProtectTask extends Task{"},{"line_number":52,"context_line":"  -protect_resource: Resource"},{"line_number":53,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":54,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_31226453","line":51,"range":{"start_line":51,"start_character":34,"end_line":51,"end_character":38},"in_reply_to":"fa69d971_565a2ef3","updated":"2016-01-11 03:29:36.000000000","message":"Yes, they are internal entities, so I didn\u0027t expose them in  RPC calls. In the class diagram, it\u0027s ProtectionManager will create a flow and load one engine to run. \nHmm, I will change the class of Task as the taskflow.task.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"af5afb2402e88376c7d9a5c78b468ee14563c9d2","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ResourceProtectTask extends Task{"},{"line_number":52,"context_line":"  -protect_resource: Resource"},{"line_number":53,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":54,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_6c52e536","line":51,"range":{"start_line":51,"start_character":34,"end_line":51,"end_character":38},"in_reply_to":"fa69d971_565a2ef3","updated":"2016-01-07 01:44:20.000000000","message":"You mean task is internal for ProtectionPlugin?\nIf it is, I think a new interface run_task(task: Task) should be added to ProtectionPlugin.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ResourceProtectTask extends Task{"},{"line_number":52,"context_line":"  -protect_resource: Resource"},{"line_number":53,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":54,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_11ec00f2","line":51,"range":{"start_line":51,"start_character":34,"end_line":51,"end_character":38},"in_reply_to":"fa69d971_6c52e536","updated":"2016-01-11 03:29:36.000000000","message":"Yingzhe, I think Saggi\u0027s design of pluggable provider is to generate all of the task (subflows) to be executed through ProtectionPlugin. I don\u0027t think ProtectionPlugin is a good place to executed the tasks.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"GraphFlow \"1\"*-up-\u003e\"many\" ResourceProtectTask:has"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class SyncCheckpointStatusTask extends Task{"},{"line_number":61,"context_line":"  -checkpoint:Checkpoint"},{"line_number":62,"context_line":"  +execute(): void"},{"line_number":63,"context_line":"  +revert():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_b3a93c26","line":60,"range":{"start_line":60,"start_character":6,"end_line":60,"end_character":30},"updated":"2016-01-06 13:14:31.000000000","message":"What is this class?","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"GraphFlow \"1\"*-up-\u003e\"many\" ResourceProtectTask:has"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class SyncCheckpointStatusTask extends Task{"},{"line_number":61,"context_line":"  -checkpoint:Checkpoint"},{"line_number":62,"context_line":"  +execute(): void"},{"line_number":63,"context_line":"  +revert():void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_9c27a7b5","line":60,"range":{"start_line":60,"start_character":6,"end_line":60,"end_character":30},"in_reply_to":"fa69d971_b3a93c26","updated":"2016-01-11 03:29:36.000000000","message":"This task is dependent of the finish of all previous ResourceProtectTask (which could be the output of your PluggableProvider).  It will schedule an event one hour (configurable) later, which will check each protection status and thus update checkpoint status.\nPls. check the rst file committed for review together","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" SyncCheckpointStatusTask :has"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Class CheckpointSerializer {"},{"line_number":69,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":70,"context_line":"  +deserialize([]Byte, encoding_format:String):Checkpoint"},{"line_number":71,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_56a78e0a","line":68,"range":{"start_line":68,"start_character":6,"end_line":68,"end_character":26},"updated":"2016-01-06 13:14:31.000000000","message":"OpenStack has a standard way of managing serialization in oslo. Please use that interface for RPC serialization.\nWe also need serializers for all entities not just Checkpoints.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" SyncCheckpointStatusTask :has"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Class CheckpointSerializer {"},{"line_number":69,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":70,"context_line":"  +deserialize([]Byte, encoding_format:String):Checkpoint"},{"line_number":71,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_1c43b743","line":68,"range":{"start_line":68,"start_character":6,"end_line":68,"end_character":26},"in_reply_to":"fa69d971_56a78e0a","updated":"2016-01-11 03:29:36.000000000","message":"this serialization is not for RPC. For RPC, we will use standard olso json way to se/deserialize objects.\nThis serialization is for persist checkpoint to bank. \nNot sure if default json is still the best way, since proto like GPB would compress the serialization info and thus save the space to persist in bank.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Class CheckpointSerializer {"},{"line_number":69,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":70,"context_line":"  +deserialize([]Byte, encoding_format:String):Checkpoint"},{"line_number":71,"context_line":" }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_930af888","line":70,"range":{"start_line":70,"start_character":15,"end_line":70,"end_character":21},"updated":"2016-01-06 13:14:31.000000000","message":"missing parameter name","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Class CheckpointSerializer {"},{"line_number":69,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":70,"context_line":"  +deserialize([]Byte, encoding_format:String):Checkpoint"},{"line_number":71,"context_line":" }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_fc458342","line":70,"range":{"start_line":70,"start_character":15,"end_line":70,"end_character":21},"in_reply_to":"fa69d971_930af888","updated":"2016-01-11 03:29:36.000000000","message":"will do","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"f3c3d3a693ca6ea84c208e92c4ccd07723fb10fa","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class Providers{"},{"line_number":76,"context_line":"  +list_providers(list_options:{}):[]Providers"},{"line_number":77,"context_line":"  +show_provider(provider_id:String):Provider"},{"line_number":78,"context_line":"  -load_providers(cfg_file:String):void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_f029eae6","line":75,"range":{"start_line":75,"start_character":6,"end_line":75,"end_character":15},"updated":"2016-01-06 13:14:31.000000000","message":"ProviderRegistry","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"7f489e8dabac5a707b271663509e0d40f16ea529","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class Providers{"},{"line_number":76,"context_line":"  +list_providers(list_options:{}):[]Providers"},{"line_number":77,"context_line":"  +show_provider(provider_id:String):Provider"},{"line_number":78,"context_line":"  -load_providers(cfg_file:String):void"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"fa69d971_1cb17747","line":75,"range":{"start_line":75,"start_character":6,"end_line":75,"end_character":15},"in_reply_to":"fa69d971_f029eae6","updated":"2016-01-11 03:29:36.000000000","message":"Hmm, yes, I think we should unify your PluggableProvider design and this Protection Service design together.\nLet\u0027s have a talk on IRC first.","commit_id":"2499783fb11fb6b1ad449dfa0cf0d976189b767c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04f407ef63ebf9761efb39795688ba7c02bd19ae","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  -restore_operation(backup_plan:BackupPlan):void"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class CheckpointCollection {"},{"line_number":24,"context_line":"  -checkpoint_serializer: CheckpointSerializer"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_5eb9e3ca","line":21,"range":{"start_line":21,"start_character":36,"end_line":21,"end_character":55},"updated":"2016-01-15 06:32:48.000000000","message":"I am not sure what you mean by one endpoint we want to support multi protection services in the design","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3ced18995c36de1292468a4273ab5eba43688d05","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  -restore_operation(backup_plan:BackupPlan):void"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class CheckpointCollection {"},{"line_number":24,"context_line":"  -checkpoint_serializer: CheckpointSerializer"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"ba63e191_5fb668dd","line":21,"range":{"start_line":21,"start_character":36,"end_line":21,"end_character":55},"in_reply_to":"da6ed579_5eb9e3ca","updated":"2016-01-19 11:16:36.000000000","message":"Yes, there would be multiple protection service instances.  Multiple protection service instances would listen on the same message queue and will be dispatched with events. I will change this phrase to \u0027has many as endpoints\u0027.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"4d08b394c93a5d8ff83468b3566485a108c970a5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class CheckpointCollection {"},{"line_number":24,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":25,"context_line":"  +list(list_options:{}): []Checkpoints"},{"line_number":26,"context_line":"  +show(provider_id:String, checkpoint_id:String): Checkpoint"},{"line_number":27,"context_line":"  +delete(provider_id:String, checkpoint_id:String):void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a68dd71_59db011c","line":24,"range":{"start_line":24,"start_character":26,"end_line":24,"end_character":46},"updated":"2016-01-20 16:08:48.000000000","message":"I think the serialization needs to be part of the bank and not specific for checkpoints as they are just another object in the bank. No need for a specialized serializer.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"0ddb912633a3a6a69c91af8403d79c6454b522e1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class CheckpointCollection {"},{"line_number":24,"context_line":"  -checkpoint_serializer: CheckpointSerializer"},{"line_number":25,"context_line":"  +list(list_options:{}): []Checkpoints"},{"line_number":26,"context_line":"  +show(provider_id:String, checkpoint_id:String): Checkpoint"},{"line_number":27,"context_line":"  +delete(provider_id:String, checkpoint_id:String):void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a68dd71_05dd0542","line":24,"range":{"start_line":24,"start_character":26,"end_line":24,"end_character":46},"in_reply_to":"9a68dd71_59db011c","updated":"2016-01-21 01:13:52.000000000","message":"In my mind, what bankplugin takes as input should be serialized value: bytes or strings. It doesn\u0027t care the key format or the original object of the value.\nWhile for the checkpointsCollection, it takes checkpoint object as input.\nAs told before, the serialization here instead of default json is to leave more flexibility to persist our data in bank (or other storage).  We can introduce some serialization way which provides compression feature here.\n\nIf we look at one implementation of such kind of serializer, say, GPB, you can specify the definition of each class in one proto file.  Having compiled it, GPB will automatically generate one serializer class for each original classes. \n\nThat\u0027s the background I put the serializer class here.  \nPls. let me know your comments.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"636acab5776cd19e1ef6ecb7afa841e4167f45c8","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"taskflow.patterns.graph_flow.Flow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class ResourceProtectTask extends taskflow.task.Task{"},{"line_number":74,"context_line":"  -protect_resource: Resource"},{"line_number":75,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":76,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_5ae533a6","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":25},"updated":"2016-01-12 08:27:16.000000000","message":"Maybe changing a name would be better, \nsuch as ResourceOperationTask, \nbecause there are other operation types like restore.\nOr will you design individual task type for restore, like ResourceRestoreTask?","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"ab7476a76e6e3544c29b2e9df8dec226da14b5b1","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"taskflow.patterns.graph_flow.Flow \"1\"*-up-\u003e\"1\" CreateCheckpointTask:has"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class ResourceProtectTask extends taskflow.task.Task{"},{"line_number":74,"context_line":"  -protect_resource: Resource"},{"line_number":75,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":76,"context_line":"  +execute():void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_f6eda0b7","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":25},"in_reply_to":"da6ed579_5ae533a6","updated":"2016-01-14 07:50:31.000000000","message":"Yes, I supposed so.  Otherwise, you need another parameter like action:Enum  to tell what\u0027s action to be executed in this task.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"636acab5776cd19e1ef6ecb7afa841e4167f45c8","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class ResourceProtectTask extends taskflow.task.Task{"},{"line_number":74,"context_line":"  -protect_resource: Resource"},{"line_number":75,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":76,"context_line":"  +execute():void"},{"line_number":77,"context_line":"  +revert():void"},{"line_number":78,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_fd0d0138","line":75,"updated":"2016-01-12 08:27:16.000000000","message":"I think the context parameter passed to get_(pre/post)_task\nshould be included here.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"ab7476a76e6e3544c29b2e9df8dec226da14b5b1","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class ResourceProtectTask extends taskflow.task.Task{"},{"line_number":74,"context_line":"  -protect_resource: Resource"},{"line_number":75,"context_line":"  -plugin: ProtectionPlugin"},{"line_number":76,"context_line":"  +execute():void"},{"line_number":77,"context_line":"  +revert():void"},{"line_number":78,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_b667284c","line":75,"in_reply_to":"da6ed579_fd0d0138","updated":"2016-01-14 07:50:31.000000000","message":"If we take Saggi\u0027s PluggableProvider into consideration, we don\u0027t need generate ResourceProtectTask at all. Provider should give an interface to build graph flow, ProtectionManager will just compose CreateCheckpointTask and SyncCheckpointTask together with this flow. And ProtectionManager will have engine to execute this final flow.\n\nI\u0027m still communicating the interface with Saggi.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04f407ef63ebf9761efb39795688ba7c02bd19ae","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"ProviderRegistry \"1\"*-down-\u003e\"many\" Provider:manage"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class ProtectionPlugin {"},{"line_number":116,"context_line":"  -protectable_type:String"},{"line_number":117,"context_line":"  -schema:[]String"},{"line_number":118,"context_line":"  +get_protecatble_type(): Protectable_type"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_1efdab6d","line":115,"range":{"start_line":115,"start_character":6,"end_line":115,"end_character":22},"updated":"2016-01-15 06:32:48.000000000","message":"This definition is conflicting with protection Plugin spec","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04f407ef63ebf9761efb39795688ba7c02bd19ae","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"ProviderRegistry \"1\"*-down-\u003e\"many\" Provider:manage"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class ProtectionPlugin {"},{"line_number":116,"context_line":"  -protectable_type:String"},{"line_number":117,"context_line":"  -schema:[]String"},{"line_number":118,"context_line":"  +get_protecatble_type(): Protectable_type"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_9edafb15","line":115,"range":{"start_line":115,"start_character":6,"end_line":115,"end_character":22},"updated":"2016-01-15 06:32:48.000000000","message":"we are missing delete , start , suspend","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3ced18995c36de1292468a4273ab5eba43688d05","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"ProviderRegistry \"1\"*-down-\u003e\"many\" Provider:manage"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class ProtectionPlugin {"},{"line_number":116,"context_line":"  -protectable_type:String"},{"line_number":117,"context_line":"  -schema:[]String"},{"line_number":118,"context_line":"  +get_protecatble_type(): Protectable_type"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"ba63e191_df77b8d2","line":115,"range":{"start_line":115,"start_character":6,"end_line":115,"end_character":22},"in_reply_to":"da6ed579_1efdab6d","updated":"2016-01-19 11:16:36.000000000","message":"Will align it with that doc.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3ced18995c36de1292468a4273ab5eba43688d05","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"ProviderRegistry \"1\"*-down-\u003e\"many\" Provider:manage"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class ProtectionPlugin {"},{"line_number":116,"context_line":"  -protectable_type:String"},{"line_number":117,"context_line":"  -schema:[]String"},{"line_number":118,"context_line":"  +get_protecatble_type(): Protectable_type"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"ba63e191_bfa7644e","line":115,"range":{"start_line":115,"start_character":6,"end_line":115,"end_character":22},"in_reply_to":"da6ed579_9edafb15","updated":"2016-01-19 11:16:36.000000000","message":"will complement it.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04f407ef63ebf9761efb39795688ba7c02bd19ae","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Provider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class BankPlugin {"},{"line_number":128,"context_line":"  -endpoint: URL"},{"line_number":129,"context_line":"  +grant_lease(owner_id:String): void"},{"line_number":130,"context_line":"  +check_lease(owner_id:String): void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_5e156399","line":127,"range":{"start_line":127,"start_character":6,"end_line":127,"end_character":16},"updated":"2016-01-15 06:32:48.000000000","message":"we need to enable support of directories/namespaces \nBe able to create the checkpoint namespace and the sub namespaces for the protection plugins under the","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"28a736027b1a1582a19eea1bc92ed5a49c31a6ba","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Provider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class BankPlugin {"},{"line_number":128,"context_line":"  -endpoint: URL"},{"line_number":129,"context_line":"  +grant_lease(owner_id:String): void"},{"line_number":130,"context_line":"  +check_lease(owner_id:String): void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a68dd71_a8ec772a","line":127,"range":{"start_line":127,"start_character":6,"end_line":127,"end_character":16},"in_reply_to":"9a68dd71_f1faaabc","updated":"2016-01-25 01:16:28.000000000","message":"OK, I got your point.\nI used to create the default container which in fact is the same put request as object, the difference is only the delimiter \u0027/\u0027 in the key. \nIf we want to use more complicated container features,yes, we need some specific interfaces for container.\nLet\u0027s add additional options for both container and object interfaces to support more advanced bank features.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"237b9c117cf4ccc0da33303c8dac64eb02a779aa","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Provider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class BankPlugin {"},{"line_number":128,"context_line":"  -endpoint: URL"},{"line_number":129,"context_line":"  +grant_lease(owner_id:String): void"},{"line_number":130,"context_line":"  +check_lease(owner_id:String): void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a68dd71_f1faaabc","line":127,"range":{"start_line":127,"start_character":6,"end_line":127,"end_character":16},"in_reply_to":"ba63e191_9f586058","updated":"2016-01-22 07:18:51.000000000","message":"I am not sure I understand how will you create directory namespace if the bank interface does not support it.  \n\nFor example in swift we have a container that aggregate multiple object","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3ced18995c36de1292468a4273ab5eba43688d05","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Provider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class BankPlugin {"},{"line_number":128,"context_line":"  -endpoint: URL"},{"line_number":129,"context_line":"  +grant_lease(owner_id:String): void"},{"line_number":130,"context_line":"  +check_lease(owner_id:String): void"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"ba63e191_9f586058","line":127,"range":{"start_line":127,"start_character":6,"end_line":127,"end_character":16},"in_reply_to":"da6ed579_5e156399","updated":"2016-01-19 11:16:36.000000000","message":"CheckpointCollection (or I\u0027d like to call it CheckpointMgr or CheckpointOperator) will encapsulate this part of logic.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"90ca7a485cef6d746c686a6ae4703acb561bf2c8","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"PluggableProtectionProvider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class BankPlugin {"},{"line_number":136,"context_line":"  -endpoint: URL"},{"line_number":137,"context_line":"  +grant_lease(owner_id:String): void"},{"line_number":138,"context_line":"  +check_lease(owner_id:String): void"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_b1a0b2a0","line":135,"range":{"start_line":135,"start_character":6,"end_line":135,"end_character":16},"updated":"2016-01-22 07:27:03.000000000","message":"Please see my comment in the previous patch.\n\nI think we missing a namespace creation","commit_id":"bdb3ba1f60e0b5b6a3c8127b823e30fbf4ae8cbc"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d8f9907152a54d3285e4ebc71dc677615016bac6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"  +get_protecatble_type(): Protectable_type"},{"line_number":117,"context_line":"  ..protect action functions.."},{"line_number":118,"context_line":"  +get_protection_status(protection_id:String):Enum"},{"line_number":119,"context_line":"  +protect(protectable:Protectable):ProtectionData"},{"line_number":120,"context_line":"  +restore(checkpoint:Checkpoint, restoreTarget:RestoreTarget,...):void"},{"line_number":121,"context_line":"  +start(resource:Resource):void"},{"line_number":122,"context_line":"  +suspend(resource:Resource):void"},{"line_number":123,"context_line":"  +delete(resource:Resource):void"},{"line_number":124,"context_line":"  ..graph walk functions.."},{"line_number":125,"context_line":"  +get_pre_task(context: Context): TaskFlow::Atom?"},{"line_number":126,"context_line":"  +get_post_task(context: Context): TaskFlow::Atom?"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"9a68dd71_8f16e753","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":33},"updated":"2016-01-27 01:41:26.000000000","message":"IMO these interfaces needn\u0027t be exposed here. They are used for generating task.","commit_id":"72ca7678ab52bcc44bd78a2feaea850caa343e65"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"abcb7e48da8b6da567688db57d0ad1fe125e5687","unresolved":false,"context_lines":[{"line_number":116,"context_line":"  +get_protecatble_type(): Protectable_type"},{"line_number":117,"context_line":"  ..protect action functions.."},{"line_number":118,"context_line":"  +get_protection_status(protection_id:String):Enum"},{"line_number":119,"context_line":"  +protect(protectable:Protectable):ProtectionData"},{"line_number":120,"context_line":"  +restore(checkpoint:Checkpoint, restoreTarget:RestoreTarget,...):void"},{"line_number":121,"context_line":"  +start(resource:Resource):void"},{"line_number":122,"context_line":"  +suspend(resource:Resource):void"},{"line_number":123,"context_line":"  +delete(resource:Resource):void"},{"line_number":124,"context_line":"  ..graph walk functions.."},{"line_number":125,"context_line":"  +get_pre_task(context: Context): TaskFlow::Atom?"},{"line_number":126,"context_line":"  +get_post_task(context: Context): TaskFlow::Atom?"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"9a68dd71_2ae7a913","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":33},"in_reply_to":"9a68dd71_8f16e753","updated":"2016-01-27 01:56:08.000000000","message":"It depends on where shall we build tasks. IMHO, I don\u0027t prefer to have plugin to build tasks. We will discuss this issue in meeting.","commit_id":"72ca7678ab52bcc44bd78a2feaea850caa343e65"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fb70694de7952eed78dabf3852bcb14651a55783","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  +revert(): void"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class SyncCheckpointStatusTask extends taskflow.task.Task{"},{"line_number":58,"context_line":"  -checkpoint:Checkpoint"},{"line_number":59,"context_line":"  -checkpoint_collection:CheckpoinCollection"},{"line_number":60,"context_line":"  +execute(): void"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_d5d783bd","line":57,"range":{"start_line":57,"start_character":6,"end_line":57,"end_character":57},"updated":"2016-01-28 13:58:28.000000000","message":"What are all those classes extending tasks?","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"df36d56878d3d4c58f2acb4033135fa5cf71b874","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  +revert(): void"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class SyncCheckpointStatusTask extends taskflow.task.Task{"},{"line_number":58,"context_line":"  -checkpoint:Checkpoint"},{"line_number":59,"context_line":"  -checkpoint_collection:CheckpoinCollection"},{"line_number":60,"context_line":"  +execute(): void"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_83452d18","line":57,"range":{"start_line":57,"start_character":6,"end_line":57,"end_character":57},"in_reply_to":"7a5de9d1_d5d783bd","updated":"2016-01-29 01:59:37.000000000","message":"sorry, do you mean the base class or the concrete class?","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fb70694de7952eed78dabf3852bcb14651a55783","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CheckpointCollection*-right-\u003eBankPlugin:has one"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Class CheckpointSerializer {"},{"line_number":79,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":80,"context_line":"  +deserialize(value:[]Byte, encoding_format:String):Checkpoint"},{"line_number":81,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_f5b4fff2","line":78,"range":{"start_line":78,"start_character":6,"end_line":78,"end_character":26},"updated":"2016-01-28 13:58:28.000000000","message":"Serialization is the responsibility of the bank.","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"645b37c03d747f7fe2e3abae3c2c86fad30df4b1","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CheckpointCollection*-right-\u003eBankPlugin:has one"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Class CheckpointSerializer {"},{"line_number":79,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":80,"context_line":"  +deserialize(value:[]Byte, encoding_format:String):Checkpoint"},{"line_number":81,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_9ad7cb22","line":78,"range":{"start_line":78,"start_character":6,"end_line":78,"end_character":26},"in_reply_to":"7a5de9d1_2860d800","updated":"2016-01-29 07:34:44.000000000","message":"This serialization is not clear to me can you please provide a simple example to check that we are on the same page.\n\nIs it the checkpoint view to the User of the Provider metadata ?","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"df36d56878d3d4c58f2acb4033135fa5cf71b874","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CheckpointCollection*-right-\u003eBankPlugin:has one"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Class CheckpointSerializer {"},{"line_number":79,"context_line":"  +serialize(encoding_format:String, checkpoint:Checkpoint):[]Byte"},{"line_number":80,"context_line":"  +deserialize(value:[]Byte, encoding_format:String):Checkpoint"},{"line_number":81,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_2860d800","line":78,"range":{"start_line":78,"start_character":6,"end_line":78,"end_character":26},"in_reply_to":"7a5de9d1_f5b4fff2","updated":"2016-01-29 01:59:37.000000000","message":"the params of interface of bank are just (key, value), which doesn\u0027t care the format of the value.","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fb70694de7952eed78dabf3852bcb14651a55783","unresolved":false,"context_lines":[{"line_number":138,"context_line":"}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"PluggableProtectionProvider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Interface BankPluginInterface {"},{"line_number":143,"context_line":"  ..accounts funcitons.."},{"line_number":144,"context_line":"  +update_account(opitons:dict):void"},{"line_number":145,"context_line":"  +delete_account(opitons:dict):void"},{"line_number":146,"context_line":"  +show_account(options:dict):dict"},{"line_number":147,"context_line":"  ..container functions.."},{"line_number":148,"context_line":"  +create_container(container:String, options:dict):void"},{"line_number":149,"context_line":"  +update_container(container:String, options:dict):void"},{"line_number":150,"context_line":"  +show_container(container:String, options:dict):dict"},{"line_number":151,"context_line":"  +delete_container(container:String, optons:dict):void"},{"line_number":152,"context_line":"  +list_containers(options:dict):dict"},{"line_number":153,"context_line":"  ..object functions.."},{"line_number":154,"context_line":"  +chroot(container:String):void"},{"line_number":155,"context_line":"  +create_object(key:String, value:[]Byte):void"},{"line_number":156,"context_line":"  +update_object(key:String, options:dict):void"},{"line_number":157,"context_line":"  +show_object(key:String):dict"},{"line_number":158,"context_line":"  +get_object(key:String):dict"},{"line_number":159,"context_line":"  +delete_object(key:String):void"},{"line_number":160,"context_line":"  +list_objects(options:dict):void"},{"line_number":161,"context_line":"}"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class BankPlugin implements BankPluginInterface {"},{"line_number":164,"context_line":"  -stroage_url:URL"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_155c3bec","line":161,"range":{"start_line":141,"start_character":0,"end_line":161,"end_character":1},"updated":"2016-01-28 13:58:28.000000000","message":"This interface is way more complex than what is described in the design doc. What is the purpose of all of these?","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"df36d56878d3d4c58f2acb4033135fa5cf71b874","unresolved":false,"context_lines":[{"line_number":138,"context_line":"}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"PluggableProtectionProvider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Interface BankPluginInterface {"},{"line_number":143,"context_line":"  ..accounts funcitons.."},{"line_number":144,"context_line":"  +update_account(opitons:dict):void"},{"line_number":145,"context_line":"  +delete_account(opitons:dict):void"},{"line_number":146,"context_line":"  +show_account(options:dict):dict"},{"line_number":147,"context_line":"  ..container functions.."},{"line_number":148,"context_line":"  +create_container(container:String, options:dict):void"},{"line_number":149,"context_line":"  +update_container(container:String, options:dict):void"},{"line_number":150,"context_line":"  +show_container(container:String, options:dict):dict"},{"line_number":151,"context_line":"  +delete_container(container:String, optons:dict):void"},{"line_number":152,"context_line":"  +list_containers(options:dict):dict"},{"line_number":153,"context_line":"  ..object functions.."},{"line_number":154,"context_line":"  +chroot(container:String):void"},{"line_number":155,"context_line":"  +create_object(key:String, value:[]Byte):void"},{"line_number":156,"context_line":"  +update_object(key:String, options:dict):void"},{"line_number":157,"context_line":"  +show_object(key:String):dict"},{"line_number":158,"context_line":"  +get_object(key:String):dict"},{"line_number":159,"context_line":"  +delete_object(key:String):void"},{"line_number":160,"context_line":"  +list_objects(options:dict):void"},{"line_number":161,"context_line":"}"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class BankPlugin implements BankPluginInterface {"},{"line_number":164,"context_line":"  -stroage_url:URL"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_a34e296d","line":161,"range":{"start_line":141,"start_character":0,"end_line":161,"end_character":1},"in_reply_to":"7a5de9d1_155c3bec","updated":"2016-01-29 01:59:37.000000000","message":"accounts functions and container functions are just kept for potential more complex operations from the callers.\nIf we don\u0027t want such flexibility to bank caller, I can keep object functions only.\nBTW, this interface is overlapped with the MetadataStore in your design.","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"645b37c03d747f7fe2e3abae3c2c86fad30df4b1","unresolved":false,"context_lines":[{"line_number":138,"context_line":"}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"PluggableProtectionProvider \"1\" *-left-\u003e\"many\" ProtectionPlugin:aggregates"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Interface BankPluginInterface {"},{"line_number":143,"context_line":"  ..accounts funcitons.."},{"line_number":144,"context_line":"  +update_account(opitons:dict):void"},{"line_number":145,"context_line":"  +delete_account(opitons:dict):void"},{"line_number":146,"context_line":"  +show_account(options:dict):dict"},{"line_number":147,"context_line":"  ..container functions.."},{"line_number":148,"context_line":"  +create_container(container:String, options:dict):void"},{"line_number":149,"context_line":"  +update_container(container:String, options:dict):void"},{"line_number":150,"context_line":"  +show_container(container:String, options:dict):dict"},{"line_number":151,"context_line":"  +delete_container(container:String, optons:dict):void"},{"line_number":152,"context_line":"  +list_containers(options:dict):dict"},{"line_number":153,"context_line":"  ..object functions.."},{"line_number":154,"context_line":"  +chroot(container:String):void"},{"line_number":155,"context_line":"  +create_object(key:String, value:[]Byte):void"},{"line_number":156,"context_line":"  +update_object(key:String, options:dict):void"},{"line_number":157,"context_line":"  +show_object(key:String):dict"},{"line_number":158,"context_line":"  +get_object(key:String):dict"},{"line_number":159,"context_line":"  +delete_object(key:String):void"},{"line_number":160,"context_line":"  +list_objects(options:dict):void"},{"line_number":161,"context_line":"}"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class BankPlugin implements BankPluginInterface {"},{"line_number":164,"context_line":"  -stroage_url:URL"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_7a90cf43","line":161,"range":{"start_line":141,"start_character":0,"end_line":161,"end_character":1},"in_reply_to":"7a5de9d1_a34e296d","updated":"2016-01-29 07:34:44.000000000","message":"It is not overlapping the MetadataStore in Saggi design is an abstraction for the plugin, it will not be able to create container or go out of its namespace only write and read in protect and I think that only read in all the other ceases and of course delete in delete operation   \n\nI agree with saggi that there are many internal methods that you exposed n the API lest try to keep it simple first phase","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fb70694de7952eed78dabf3852bcb14651a55783","unresolved":false,"context_lines":[{"line_number":171,"context_line":"  ..."},{"line_number":172,"context_line":"}"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Interface LeaseClientInterface {"},{"line_number":175,"context_line":"  +acquire_lease(owner_id:String): void"},{"line_number":176,"context_line":"  +renew_lease(owner_id:String): void"},{"line_number":177,"context_line":"  +check_lease_validity(owner_id:String):bool"},{"line_number":178,"context_line":"  +check_lease_existence(owner_id:String):bool"},{"line_number":179,"context_line":"}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"class BankLeaseClient implements LeaseClientInterface {"},{"line_number":182,"context_line":"  -bank_plugin:BankPluginInterface"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_1513db0e","line":179,"range":{"start_line":174,"start_character":0,"end_line":179,"end_character":1},"updated":"2016-01-28 13:58:28.000000000","message":"Leases should be a part of the bank interface since it\u0027s tied to it\u0027s implementation.","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"df36d56878d3d4c58f2acb4033135fa5cf71b874","unresolved":false,"context_lines":[{"line_number":171,"context_line":"  ..."},{"line_number":172,"context_line":"}"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Interface LeaseClientInterface {"},{"line_number":175,"context_line":"  +acquire_lease(owner_id:String): void"},{"line_number":176,"context_line":"  +renew_lease(owner_id:String): void"},{"line_number":177,"context_line":"  +check_lease_validity(owner_id:String):bool"},{"line_number":178,"context_line":"  +check_lease_existence(owner_id:String):bool"},{"line_number":179,"context_line":"}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"class BankLeaseClient implements LeaseClientInterface {"},{"line_number":182,"context_line":"  -bank_plugin:BankPluginInterface"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_83ce8db2","line":179,"range":{"start_line":174,"start_character":0,"end_line":179,"end_character":1},"in_reply_to":"7a5de9d1_1513db0e","updated":"2016-01-29 01:59:37.000000000","message":"Lease is not necessarily implemented on bank.\nThat\u0027s why we have BankLeaseClient to implement the lease interface.","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"645b37c03d747f7fe2e3abae3c2c86fad30df4b1","unresolved":false,"context_lines":[{"line_number":171,"context_line":"  ..."},{"line_number":172,"context_line":"}"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Interface LeaseClientInterface {"},{"line_number":175,"context_line":"  +acquire_lease(owner_id:String): void"},{"line_number":176,"context_line":"  +renew_lease(owner_id:String): void"},{"line_number":177,"context_line":"  +check_lease_validity(owner_id:String):bool"},{"line_number":178,"context_line":"  +check_lease_existence(owner_id:String):bool"},{"line_number":179,"context_line":"}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"class BankLeaseClient implements LeaseClientInterface {"},{"line_number":182,"context_line":"  -bank_plugin:BankPluginInterface"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_3ae817b4","line":179,"range":{"start_line":174,"start_character":0,"end_line":179,"end_character":1},"in_reply_to":"7a5de9d1_83ce8db2","updated":"2016-01-29 07:34:44.000000000","message":"I am not sure I understand the use case of implementing a lease not in the bank, can you please elaborate","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f118b9e241be781a9e6fe76b560eb95895c89aaa","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  -lease_client:LeaseCientInterface"},{"line_number":68,"context_line":"  +init(bank_plugin:BankPlugin, checkpoint_serializer:CheckpointSerializer):void"},{"line_number":69,"context_line":"  +list(list_options:dict): []Checkpoints"},{"line_number":70,"context_line":"  +show(provider_id:String, checkpoint_id:String): Checkpoint"},{"line_number":71,"context_line":"  +delete(provider_id:String, checkpoint_id:String):void"},{"line_number":72,"context_line":"  +create(plan:ProtectionPlan): Checkpoint"},{"line_number":73,"context_line":"  +update(checkpoint:Checkpoint, kwargs:{}): void"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_2f32e55f","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":19},"updated":"2016-01-30 08:46:53.000000000","message":"This class already possesses a bank_plugin, what is the provider_id here used for?","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":19720,"name":"wangliuan","email":"wangliuan2016@163.com","username":"wangliuan"},"change_message_id":"948c482b18775a978ab39238b07534fa37eab98b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  -lease_client:LeaseCientInterface"},{"line_number":68,"context_line":"  +init(bank_plugin:BankPlugin, checkpoint_serializer:CheckpointSerializer):void"},{"line_number":69,"context_line":"  +list(list_options:dict): []Checkpoints"},{"line_number":70,"context_line":"  +show(provider_id:String, checkpoint_id:String): Checkpoint"},{"line_number":71,"context_line":"  +delete(provider_id:String, checkpoint_id:String):void"},{"line_number":72,"context_line":"  +create(plan:ProtectionPlan): Checkpoint"},{"line_number":73,"context_line":"  +update(checkpoint:Checkpoint, kwargs:{}): void"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_109b3719","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":19},"in_reply_to":"7a5de9d1_2f32e55f","updated":"2016-02-02 07:18:30.000000000","message":"Yes,I think that it\u0027s not necessary","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f118b9e241be781a9e6fe76b560eb95895c89aaa","unresolved":false,"context_lines":[{"line_number":119,"context_line":"  +on_resource_end(context: Context)"},{"line_number":120,"context_line":"  ..schema functions.."},{"line_number":121,"context_line":"  +get_options_schema(resource_type: ResourceType)"},{"line_number":122,"context_line":"  +get_extendend_info_schema(resource_type: ResourceType)"},{"line_number":123,"context_line":"  +get_restore_schema(resource_type: ResourceType)"},{"line_number":124,"context_line":"  +get_extended_info(resource: Resource)"},{"line_number":125,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_2fc18554","line":122,"range":{"start_line":122,"start_character":3,"end_line":122,"end_character":28},"updated":"2016-01-30 08:46:53.000000000","message":"The method name isn\u0027t in accordance with Saggi\u0027s Pluggable protection provider design.","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":19720,"name":"wangliuan","email":"wangliuan2016@163.com","username":"wangliuan"},"change_message_id":"948c482b18775a978ab39238b07534fa37eab98b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"  +on_resource_end(context: Context)"},{"line_number":120,"context_line":"  ..schema functions.."},{"line_number":121,"context_line":"  +get_options_schema(resource_type: ResourceType)"},{"line_number":122,"context_line":"  +get_extendend_info_schema(resource_type: ResourceType)"},{"line_number":123,"context_line":"  +get_restore_schema(resource_type: ResourceType)"},{"line_number":124,"context_line":"  +get_extended_info(resource: Resource)"},{"line_number":125,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_301f53b8","line":122,"range":{"start_line":122,"start_character":3,"end_line":122,"end_character":28},"in_reply_to":"7a5de9d1_2fc18554","updated":"2016-02-02 07:18:30.000000000","message":"Will update","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f118b9e241be781a9e6fe76b560eb95895c89aaa","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  +chroot(context:dict):void"},{"line_number":144,"context_line":"  +create_object(key:String, value:[]Byte):void"},{"line_number":145,"context_line":"  +update_object(key:String, options:dict, value:[]):void"},{"line_number":146,"context_line":"  +show_object(key:String):dict"},{"line_number":147,"context_line":"  +get_object(key:String):dict"},{"line_number":148,"context_line":"  +delete_object(key:String):void"},{"line_number":149,"context_line":"  +list_objects(options:dict):void"},{"line_number":150,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_8f22f950","line":147,"range":{"start_line":146,"start_character":0,"end_line":147,"end_character":30},"updated":"2016-01-30 08:46:53.000000000","message":"what\u0027s the difference between show_object and get_object?","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":19720,"name":"wangliuan","email":"wangliuan2016@163.com","username":"wangliuan"},"change_message_id":"948c482b18775a978ab39238b07534fa37eab98b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  +chroot(context:dict):void"},{"line_number":144,"context_line":"  +create_object(key:String, value:[]Byte):void"},{"line_number":145,"context_line":"  +update_object(key:String, options:dict, value:[]):void"},{"line_number":146,"context_line":"  +show_object(key:String):dict"},{"line_number":147,"context_line":"  +get_object(key:String):dict"},{"line_number":148,"context_line":"  +delete_object(key:String):void"},{"line_number":149,"context_line":"  +list_objects(options:dict):void"},{"line_number":150,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_0d7fa0e0","line":147,"range":{"start_line":146,"start_character":0,"end_line":147,"end_character":30},"in_reply_to":"7a5de9d1_8f22f950","updated":"2016-02-02 07:18:30.000000000","message":"show_object return metadata\nget_object return value","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f118b9e241be781a9e6fe76b560eb95895c89aaa","unresolved":false,"context_lines":[{"line_number":170,"context_line":"class BankLeaseClient implements LeaseClientInterface{"},{"line_number":171,"context_line":"  -bank_plugin:BankPluginInterface"},{"line_number":172,"context_line":"  -owner_id:String"},{"line_number":173,"context_line":"  -expired_time:Long"},{"line_number":174,"context_line":"  +init(bank_plugin:BankPluginInterface)"},{"line_number":175,"context_line":"  +acquire_lease(): void"},{"line_number":176,"context_line":"  +renew_lease(): void"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_8fcc396b","line":173,"updated":"2016-01-30 08:46:53.000000000","message":"missing renew time?","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":19720,"name":"wangliuan","email":"wangliuan2016@163.com","username":"wangliuan"},"change_message_id":"948c482b18775a978ab39238b07534fa37eab98b","unresolved":false,"context_lines":[{"line_number":170,"context_line":"class BankLeaseClient implements LeaseClientInterface{"},{"line_number":171,"context_line":"  -bank_plugin:BankPluginInterface"},{"line_number":172,"context_line":"  -owner_id:String"},{"line_number":173,"context_line":"  -expired_time:Long"},{"line_number":174,"context_line":"  +init(bank_plugin:BankPluginInterface)"},{"line_number":175,"context_line":"  +acquire_lease(): void"},{"line_number":176,"context_line":"  +renew_lease(): void"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"7a5de9d1_4d7b58be","line":173,"in_reply_to":"7a5de9d1_8fcc396b","updated":"2016-02-02 07:18:30.000000000","message":"Done","commit_id":"3a2d6ee98189c3b4c5f8da27f7bdd4a5611e300b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"859cd9a78b3ea62ec278877bd7a382c1025aa078","unresolved":false,"context_lines":[{"line_number":74,"context_line":"  ..checkpoint functions.."},{"line_number":75,"context_line":"  ..."},{"line_number":76,"context_line":"  }"},{"line_number":77,"context_line":"  "},{"line_number":78,"context_line":"CheckpointCollection*-down-\u003eBankPlugin:has one"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class ProviderRegistry{"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"fa0719c6_8f81a592","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":2},"updated":"2016-03-20 22:35:05.000000000","message":"rogue whitespace","commit_id":"92a346e6334ea360a5051d9a19494115d1fe3579"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"859cd9a78b3ea62ec278877bd7a382c1025aa078","unresolved":false,"context_lines":[{"line_number":86,"context_line":"ProtectionManager*-down-\u003eProviderRegistry:has a"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"interface ProtectionProvider {"},{"line_number":89,"context_line":"  +build_task_flow(backup_plan:BackupPlan):taskflow.patterns.graph_flow.Flow"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"ProviderRegistry \"1\"*-down-\u003e\"many\" ProtectionProvider:manage"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"fa0719c6_8f588558","line":89,"range":{"start_line":89,"start_character":19,"end_line":89,"end_character":41},"updated":"2016-03-20 22:35:05.000000000","message":"Aren\u0027t we missing the action argument?","commit_id":"92a346e6334ea360a5051d9a19494115d1fe3579"}],"doc/source/protection-service/class_diagram.pu":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_093db8c3","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":19},"updated":"2015-12-28 07:53:33.000000000","message":"I think that the RPC should reflect the manual API  call to do protect that is \n\nPOST /provider/\u003cuuid\u003echeckpoint \n\nso it should be something like Provider_create_checkpoint (provider id , plan id/info)","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_2afcb43d","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":19},"in_reply_to":"1a7b0d38_093db8c3","updated":"2015-12-30 02:06:23.000000000","message":"I didn\u0027t expose the create_checkpoint to API here intentionally. \nPer my understanding, checkpoint is the persisted record of once execution of a backup plan. User will only schedule a plan or trigger a plan by event, then protect(backup_plan) will be called.  \nThere will be several steps of protect(backup_plan):create checkpoint, call plugins, persist protection resource(eg. backup id) into bank, check all protection status (eg. backup available), update checkpoint status.\nIf we expose one of the internal step out to rpc caller(API service), does this mean rpc caller (API service) will call all steps of protect(backup_plan) one by one?\nOr, is there any specific scenario that user would like only create one checkpoint?\nPls. correct me if I misunderstood the design.","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_4e10a659","line":15,"range":{"start_line":15,"start_character":3,"end_line":15,"end_character":24},"updated":"2015-12-28 07:53:33.000000000","message":"I do not think we need to expose this to the API in first phase","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_e5a9ede0","line":15,"range":{"start_line":15,"start_character":3,"end_line":15,"end_character":24},"in_reply_to":"1a7b0d38_4e10a659","updated":"2015-12-30 02:06:23.000000000","message":"Per my understanding, when admin creates a provider, it will first list plugins by protectable_type. While protection service will load all available plugins from config file (as the first step), protection service should expose this to API service. Then admin could pick up plugins and compose a provider. \nPls. correct me if I\u0027m wrong with the scenario.","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_2e5e7a44","line":21,"range":{"start_line":21,"start_character":3,"end_line":21,"end_character":27},"updated":"2015-12-28 07:53:33.000000000","message":"Bank is currently internal to the provider no need to pass this info on the RPC, this info is not exposed to the user.\nThe admin can create a frendly name for the provider that reflect the bank","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_45b9d92d","line":21,"range":{"start_line":21,"start_character":3,"end_line":21,"end_character":27},"in_reply_to":"1a7b0d38_2e5e7a44","updated":"2015-12-30 02:06:23.000000000","message":"Same as the plugin calls, bank plugin calls are also exposed to API because Admin has to list/show bank plugin to compose a provider.","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_ce7fb6a9","line":22,"range":{"start_line":22,"start_character":3,"end_line":22,"end_character":27},"updated":"2015-12-28 07:53:33.000000000","message":"This is Admin API in the first version we will not need  RPC as our plan is to configure this in the configuration file","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_85dd9172","line":22,"range":{"start_line":22,"start_character":3,"end_line":22,"end_character":27},"in_reply_to":"1a7b0d38_ce7fb6a9","updated":"2015-12-30 02:06:23.000000000","message":"I put provider calls here only in case we want to persist the provider info into bank. So the provider info could be replicated to other openstack/AZ by bank.\nIt seems that I have some misunderstanding on the provider creation procedure. Isn\u0027t it looks like this:\n1.sys admin configure all available plugins into config file\n2.protection_service load config file \n3.cloud admin call trying to create provider, first it call API service to list available plugins by protectable_type\n4. API service call protection service to list available plugins by protectable_type\n5. cloud admin call API service to create provider\n6. API service persist provider (plugin composition) into DB\n7. API service call rpc call to protection service to persist provider into bank (optional)\n\nPls. correct me if there\u0027s any misunderstanding of the procedure.","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_4e3986f1","line":23,"range":{"start_line":23,"start_character":3,"end_line":23,"end_character":27},"updated":"2015-12-28 07:53:33.000000000","message":"Admin currently configuration","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_a5da1577","line":23,"range":{"start_line":23,"start_character":3,"end_line":23,"end_character":27},"in_reply_to":"1a7b0d38_4e3986f1","updated":"2015-12-30 02:06:23.000000000","message":"similar answer as above","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"},{"line_number":27,"context_line":"  -flow_engine: WorkFlow_Engine"},{"line_number":28,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_2e251ac0","line":25,"range":{"start_line":25,"start_character":3,"end_line":25,"end_character":27},"updated":"2015-12-28 07:53:33.000000000","message":"again not exposed to the API in v1 in next phase should be Admin","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"},{"line_number":27,"context_line":"  -flow_engine: WorkFlow_Engine"},{"line_number":28,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_45e79940","line":25,"range":{"start_line":25,"start_character":3,"end_line":25,"end_character":27},"in_reply_to":"1a7b0d38_2e251ac0","updated":"2015-12-30 02:06:23.000000000","message":"similar answer as above","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"5c1ad3054c8433a48b25d76527bf1c397f777713","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  +create_checkpoint(): Checkpoint {plan}"},{"line_number":47,"context_line":"  +update_checkpoint(): void {checkpoint, **kwargs}"},{"line_number":48,"context_line":"  +update_protection_definition() :void {checkpoint, resource, **kwargs}"},{"line_number":49,"context_line":"  "},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ProtectionManager*-right-\u003eCheckpoints:has a"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a7b0d38_ce91f6f2","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":2},"updated":"2015-12-28 07:53:33.000000000","message":"please remove the white spaces","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"f4aa6446c1afe4da242e83a0057e7cac4dd57c6e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  +create_checkpoint(): Checkpoint {plan}"},{"line_number":47,"context_line":"  +update_checkpoint(): void {checkpoint, **kwargs}"},{"line_number":48,"context_line":"  +update_protection_definition() :void {checkpoint, resource, **kwargs}"},{"line_number":49,"context_line":"  "},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ProtectionManager*-right-\u003eCheckpoints:has a"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"fa69d971_65e41d3b","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":2},"in_reply_to":"1a7b0d38_ce91f6f2","updated":"2015-12-30 02:06:23.000000000","message":"will do","commit_id":"e6453811d9c0b2964329f1c340b95e0da515e72d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":9,"context_line":"}"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_5054c051","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":51},"updated":"2015-12-28 15:29:00.000000000","message":"Why is this a singleton? Other managers in OpenStack are just plain instances.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"}"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_a56f7591","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":51},"in_reply_to":"1a7b0d38_5054c051","updated":"2015-12-30 02:24:53.000000000","message":"Ok, will remove this mark. It seems safe to make it as plain instance in side internal services.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_506da02f","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":42},"updated":"2015-12-28 15:29:00.000000000","message":"* parameters go inside the ().\n* stereotypes should be marked as stereotypes. unless you actually mean to make the methods names that way.\n\nExample:\n + \u003c\u003crpc call\u003e\u003e protection(backup_lan: BackupPlan): void","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_65697d8b","line":13,"range":{"start_line":13,"start_character":3,"end_line":13,"end_character":42},"in_reply_to":"1a7b0d38_506da02f","updated":"2015-12-30 02:24:53.000000000","message":"hmm, about the parameter, I just followed one style as planttext sample.\nSure, will correct the stereotypes.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_d4064e1b","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":19},"updated":"2015-12-29 03:02:42.000000000","message":"IMO, I do not think we need to add a function-prefix \u0027rpc_call_\u0027.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_050521c1","line":14,"range":{"start_line":14,"start_character":3,"end_line":14,"end_character":19},"in_reply_to":"1a7b0d38_d4064e1b","updated":"2015-12-30 02:24:53.000000000","message":"will follow Saggi\u0027s suggestion.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2107e72d18df1bd24e8cc68a609d66646f9baf92","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_fc46e34d","line":16,"range":{"start_line":15,"start_character":2,"end_line":16,"end_character":44},"updated":"2015-12-28 11:32:37.000000000","message":"I think these interfaces are not needed anymore.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"class ProtectionManager \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":13,"context_line":"  +rpc_call_protect(): void { backup_plan}"},{"line_number":14,"context_line":"  +rpc_call_restore(): void { checkpoint, restore_target, ...}"},{"line_number":15,"context_line":"  +rpc_call_list_plugins(): []Plugin {list_options}"},{"line_number":16,"context_line":"  +rpc_call_show_plugin():Plugin {plugin_id}"},{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_85f911cb","line":16,"range":{"start_line":15,"start_character":2,"end_line":16,"end_character":44},"in_reply_to":"1a7b0d38_fc46e34d","updated":"2015-12-30 02:24:53.000000000","message":"hmm, I understand you guys idea. So for the first step, admin won\u0027t compose a provider but protection service will load provider from config file.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2107e72d18df1bd24e8cc68a609d66646f9baf92","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_5cc857a8","line":21,"range":{"start_line":20,"start_character":2,"end_line":21,"end_character":57},"updated":"2015-12-28 11:32:37.000000000","message":"As well.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  +rpc_call_list_checkpoints(): []Checkpoints {list_options}"},{"line_number":18,"context_line":"  +rpc_call_show_checkpoint(): Checkpoint {provider_id, checkpoint_id}"},{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_450319b9","line":21,"range":{"start_line":20,"start_character":2,"end_line":21,"end_character":57},"in_reply_to":"1a7b0d38_5cc857a8","updated":"2015-12-30 02:24:53.000000000","message":"same answer above","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2107e72d18df1bd24e8cc68a609d66646f9baf92","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_3cceab82","line":23,"range":{"start_line":22,"start_character":2,"end_line":23,"end_character":58},"updated":"2015-12-28 11:32:37.000000000","message":"In v1, we don\u0027t provide API to admin to configure provider. Admin configures providers by config file.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  +rpc_call_delete_checkpoint():void {provider_id, checkpoint_id}"},{"line_number":20,"context_line":"  +rpc_call_list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":21,"context_line":"  +rpc_call_get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_052c4149","line":23,"range":{"start_line":22,"start_character":2,"end_line":23,"end_character":58},"in_reply_to":"1a7b0d38_3cceab82","updated":"2015-12-30 02:24:53.000000000","message":"got it","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2107e72d18df1bd24e8cc68a609d66646f9baf92","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"},{"line_number":27,"context_line":"  -flow_engine: WorkFlow_Engine"},{"line_number":28,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_1c988f77","line":25,"range":{"start_line":25,"start_character":2,"end_line":25,"end_character":48},"updated":"2015-12-28 11:32:37.000000000","message":"As well.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  +rpc_call_create_provider(): String {plugins, bank_plugin}"},{"line_number":23,"context_line":"  +rpc_call_update_provider():void {provider_id, **kwargs}"},{"line_number":24,"context_line":"  +rpc_call_list_providers():[]Providers {list_options}"},{"line_number":25,"context_line":"  +rpc_call_delete_provider():void {provider_id}"},{"line_number":26,"context_line":"  +rpc_call_get_provider():Provider {provider_id}"},{"line_number":27,"context_line":"  -flow_engine: WorkFlow_Engine"},{"line_number":28,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_253145a3","line":25,"range":{"start_line":25,"start_character":2,"end_line":25,"end_character":48},"in_reply_to":"1a7b0d38_1c988f77","updated":"2015-12-30 02:24:53.000000000","message":"same answer above.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":29,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ProtectionPlugins \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":33,"context_line":"  +list_plugins(): []Plugin {list_options}"},{"line_number":34,"context_line":"  +show_plugin():Plugin {plugin_id}"},{"line_number":35,"context_line":"  -init():void {conf_file}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_508920c8","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":51},"updated":"2015-12-28 15:29:00.000000000","message":"What is this for? The user never queries about the available plugins.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"RpcServer*-right-\u003eProtectionManager:has one as endpoint"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ProtectionPlugins \u003c\u003c (S,#FF7700) Singleton \u003e\u003e{"},{"line_number":33,"context_line":"  +list_plugins(): []Plugin {list_options}"},{"line_number":34,"context_line":"  +show_plugin():Plugin {plugin_id}"},{"line_number":35,"context_line":"  -init():void {conf_file}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_05d3e139","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":51},"in_reply_to":"1a7b0d38_508920c8","updated":"2015-12-30 02:24:53.000000000","message":"hmm, I understand you guys idea. So for the first step, admin won\u0027t compose a provider but protection service will load provider from config file.\nIn my mind, cloud admin would compose the provider from plugins.\nIs this the decision for v1?","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  +create_checkpoint(): Checkpoint {plan}"},{"line_number":47,"context_line":"  +update_checkpoint(): void {checkpoint, **kwargs}"},{"line_number":48,"context_line":"  +update_protection_definition() :void {checkpoint, resource, **kwargs}"},{"line_number":49,"context_line":"  "},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ProtectionManager*-right-\u003eCheckpoints:has a"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_d096703e","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":2},"updated":"2015-12-28 15:29:00.000000000","message":"rouge space","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  +create_checkpoint(): Checkpoint {plan}"},{"line_number":47,"context_line":"  +update_checkpoint(): void {checkpoint, **kwargs}"},{"line_number":48,"context_line":"  +update_protection_definition() :void {checkpoint, resource, **kwargs}"},{"line_number":49,"context_line":"  "},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ProtectionManager*-right-\u003eCheckpoints:has a"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_25d86553","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":2},"in_reply_to":"1a7b0d38_d096703e","updated":"2015-12-30 02:24:53.000000000","message":"will remove it","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CheckpointStatusCheckTask :has"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Class CheckpointSerializer {"},{"line_number":83,"context_line":"  +serialize():[]String {encoding_format, checkpoint}"},{"line_number":84,"context_line":"  +deserialize():Checkpoint {[]String {encoding_format}}"},{"line_number":85,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_9428c6e3","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":26},"updated":"2015-12-29 03:02:42.000000000","message":"What is this for? why do we need a serialize method for checkpoint?","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"GraphFlow \"1\"*-up-\u003e\"1\" CheckpointStatusCheckTask :has"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Class CheckpointSerializer {"},{"line_number":83,"context_line":"  +serialize():[]String {encoding_format, checkpoint}"},{"line_number":84,"context_line":"  +deserialize():Checkpoint {[]String {encoding_format}}"},{"line_number":85,"context_line":" }"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_256385b3","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":26},"in_reply_to":"1a7b0d38_9428c6e3","updated":"2015-12-30 02:24:53.000000000","message":"we need serialize checkpoint to persist it as a value into object storage (bank).","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  +serialize():[]String {encoding_format, checkpoint}"},{"line_number":84,"context_line":"  +deserialize():Checkpoint {[]String {encoding_format}}"},{"line_number":85,"context_line":" }"},{"line_number":86,"context_line":" "},{"line_number":87,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":88,"context_line":" "},{"line_number":89,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_70977c3a","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":1},"updated":"2015-12-28 15:29:00.000000000","message":"rouge space","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  +serialize():[]String {encoding_format, checkpoint}"},{"line_number":84,"context_line":"  +deserialize():Checkpoint {[]String {encoding_format}}"},{"line_number":85,"context_line":" }"},{"line_number":86,"context_line":" "},{"line_number":87,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":88,"context_line":" "},{"line_number":89,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_c5dce948","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":1},"in_reply_to":"1a7b0d38_70977c3a","updated":"2015-12-30 02:24:53.000000000","message":"will remove it","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"68133c6daeef9995d9102e1764ccb73173e72b21","unresolved":false,"context_lines":[{"line_number":85,"context_line":" }"},{"line_number":86,"context_line":" "},{"line_number":87,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":88,"context_line":" "},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class ProtectionPlugin {"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_909c685e","line":88,"range":{"start_line":88,"start_character":0,"end_line":88,"end_character":1},"updated":"2015-12-28 15:29:00.000000000","message":"rouge space","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":85,"context_line":" }"},{"line_number":86,"context_line":" "},{"line_number":87,"context_line":" Checkpoints*-up-\u003eCheckpointSerializer:has a"},{"line_number":88,"context_line":" "},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class ProtectionPlugin {"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_e5e1edff","line":88,"range":{"start_line":88,"start_character":0,"end_line":88,"end_character":1},"in_reply_to":"1a7b0d38_909c685e","updated":"2015-12-30 02:24:53.000000000","message":"will remove it","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":100,"context_line":"ProtectionPlugins\"1\" *-down-\u003e\"many\" ProtectionPlugin:has"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class BankPlugins {"},{"line_number":103,"context_line":"  +list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":104,"context_line":"  +get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":105,"context_line":"  -init(): void {conf_file}"},{"line_number":106,"context_line":"  bank_plugins:[]BankPlugin"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_b4dce273","line":103,"range":{"start_line":103,"start_character":3,"end_line":103,"end_character":20},"updated":"2015-12-29 03:02:42.000000000","message":"If we don\u0027t need to expose this to users.Do we need a list_bank api now?","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"ProtectionPlugins\"1\" *-down-\u003e\"many\" ProtectionPlugin:has"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class BankPlugins {"},{"line_number":103,"context_line":"  +list_bank_plugins():[]BankPlugins {list_options}"},{"line_number":104,"context_line":"  +get_bank_plugin():BankPlugin {bank_plugin_id}"},{"line_number":105,"context_line":"  -init(): void {conf_file}"},{"line_number":106,"context_line":"  bank_plugins:[]BankPlugin"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_85e7d111","line":103,"range":{"start_line":103,"start_character":3,"end_line":103,"end_character":20},"in_reply_to":"1a7b0d38_b4dce273","updated":"2015-12-30 02:24:53.000000000","message":"hmm, I understand you guys idea. So for the first step, admin won\u0027t compose a provider but protection service will load provider from config file.\nIn my mind, cloud admin would compose the provider from plugins.\nIs this the decision for v1?","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":121,"context_line":"BankPlugins\"1\"*-down-\u003e\"many\"BankPlugin:has"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class Providers{"},{"line_number":124,"context_line":"  +create_provider(): String {plugins, bank_plugin}"},{"line_number":125,"context_line":"  +update_provider():void {provider_id, **kwargs}"},{"line_number":126,"context_line":"  +list_providers():[]Providers {list_options}"},{"line_number":127,"context_line":"  +delete_provider():void {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_143936a4","line":124,"range":{"start_line":124,"start_character":3,"end_line":124,"end_character":18},"updated":"2015-12-29 03:02:42.000000000","message":"If provider is configured from the configuration file. I think we do not need create/update/delete method. we need add a init_provider(CONF conf):void method.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"37a588248b6799487a18137e6635e1985a5137d4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"BankPlugins\"1\"*-down-\u003e\"many\"BankPlugin:has"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class Providers{"},{"line_number":124,"context_line":"  +create_provider(): String {plugins, bank_plugin}"},{"line_number":125,"context_line":"  +update_provider():void {provider_id, **kwargs}"},{"line_number":126,"context_line":"  +list_providers():[]Providers {list_options}"},{"line_number":127,"context_line":"  +delete_provider():void {provider_id}"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"fa69d971_a5e4550d","line":124,"range":{"start_line":124,"start_character":3,"end_line":124,"end_character":18},"in_reply_to":"1a7b0d38_143936a4","updated":"2015-12-30 02:24:53.000000000","message":"hmm, I understand you guys idea. So for the first step, admin won\u0027t compose a provider but protection service will load provider from config file.\nIn my mind, cloud admin would compose the provider from plugins.\nIs this the decision for v1?","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"}],"doc/source/protection-service/create-provider-seq-diagram.pu":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":1,"context_line":"@startuml"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Create Provider - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Admin -\u003e Smaug_API : List protection plugins and bank plugins"},{"line_number":6,"context_line":"Smaug_API -\u003e ProtectionService : RPC call"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_f45caa7e","line":3,"range":{"start_line":3,"start_character":6,"end_line":3,"end_character":12},"updated":"2015-12-29 03:02:42.000000000","message":"We do not exposed the API to users in v1.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"}],"doc/source/protection-service/protect-rpc-call-seq-diagram.pu":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"615d890fa1c90528f3f53c65274ba24442b2a961","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Smaug_API -\u003e\u003e ProtectionService : Protect RPC call"},{"line_number":6,"context_line":"ProtectionService -\u003e Checkpoints : create_checkpoint()"},{"line_number":7,"context_line":"Checkpoints -\\ BankPlugin : put(checkpoint_key, value)"},{"line_number":8,"context_line":"ProtectionService -\\ ProtectionPlugin : for each protectable, according to provider, protect(protectable)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1a7b0d38_14f05666","line":5,"range":{"start_line":5,"start_character":18,"end_line":5,"end_character":50},"updated":"2015-12-29 03:02:42.000000000","message":"Protect RPC should be called by Smaug scheduler service.","commit_id":"4d00e9075b28f25a58dc81d00f3e2d55a529e178"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"04f407ef63ebf9761efb39795688ba7c02bd19ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"@startuml"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_fe521766","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":32},"updated":"2016-01-15 06:32:48.000000000","message":"If we wnat to have an end to end seq please include what is the type of communication RSET , RPC in process for each of the links","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9a18c1823ef29b9b11db654d49ee3fa8ccffb2c6","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_5d3ee98c","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":20},"updated":"2016-01-14 16:39:31.000000000","message":"The Smaug Operation engine will call the North bound API of smaug  \nPost on Checkpoint (Create a CheckPoint )\n\nIt it is done this way so we could add high level logic operation into the operation engine \nIn the case of schedule operation it will just call post on checkpoint but if we take for example the use case of retention operation it will have to call multiple North bond API in order to do fo example a task clean all my tasks from a specific plan that are older then a week \nOr tiring operation and so on","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"636acab5776cd19e1ef6ecb7afa841e4167f45c8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"},{"line_number":9,"context_line":"CreateCheckpointTask -\u003e Checkpoints : create_checkpoint()"},{"line_number":10,"context_line":"Checkpoints -\\ BankPlugin : grant lease(owner_id)"},{"line_number":11,"context_line":"Checkpoints -\\ BankPlugin : put(checkpoint_key, value)"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_fdaf4192","line":8,"updated":"2016-01-12 08:27:16.000000000","message":"So creating checkpoint is a task returned by a plugin as well?\nFor instance, returned by get_pre_task interface of project plugin.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"09ea0561121921651db671f3b7b123fa2a339a19","unresolved":false,"context_lines":[{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"},{"line_number":9,"context_line":"CreateCheckpointTask -\u003e Checkpoints : create_checkpoint()"},{"line_number":10,"context_line":"Checkpoints -\\ BankPlugin : grant lease(owner_id)"},{"line_number":11,"context_line":"Checkpoints -\\ BankPlugin : put(checkpoint_key, value)"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_e6dac94b","line":8,"in_reply_to":"da6ed579_fdaf4192","updated":"2016-01-14 09:24:26.000000000","message":"No,this task is not per provider, but per operation, so it\u0027s created by ProtectionManager.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"636acab5776cd19e1ef6ecb7afa841e4167f45c8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"},{"line_number":9,"context_line":"CreateCheckpointTask -\u003e Checkpoints : create_checkpoint()"},{"line_number":10,"context_line":"Checkpoints -\\ BankPlugin : grant lease(owner_id)"},{"line_number":11,"context_line":"Checkpoints -\\ BankPlugin : put(checkpoint_key, value)"},{"line_number":12,"context_line":"Checkpoints -\\ BankPlugin : build indexes, put(index_key, value)"},{"line_number":13,"context_line":"WorkflowEngine -\u003e ResourceProtectTask:execute()"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_5a76933f","line":10,"updated":"2016-01-12 08:27:16.000000000","message":"Why no explicitly release_lease? Just let lease timeout?","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"09ea0561121921651db671f3b7b123fa2a339a19","unresolved":false,"context_lines":[{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"},{"line_number":9,"context_line":"CreateCheckpointTask -\u003e Checkpoints : create_checkpoint()"},{"line_number":10,"context_line":"Checkpoints -\\ BankPlugin : grant lease(owner_id)"},{"line_number":11,"context_line":"Checkpoints -\\ BankPlugin : put(checkpoint_key, value)"},{"line_number":12,"context_line":"Checkpoints -\\ BankPlugin : build indexes, put(index_key, value)"},{"line_number":13,"context_line":"WorkflowEngine -\u003e ResourceProtectTask:execute()"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"da6ed579_a6b7f1f3","line":10,"in_reply_to":"da6ed579_5a76933f","updated":"2016-01-14 09:24:26.000000000","message":"Later, Luobin will commit a design doc for lease.","commit_id":"cb677504f144a607d8483cbeadba640f4a602120"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"90ca7a485cef6d746c686a6ae4703acb561bf2c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"@startuml"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_b1c9927a","line":3,"range":{"start_line":3,"start_character":16,"end_line":3,"end_character":24},"updated":"2016-01-22 07:27:03.000000000","message":"Please see my comment in the previous patch.\n\nPlease include what is the communication method RPC.. REST ..","commit_id":"bdb3ba1f60e0b5b6a3c8127b823e30fbf4ae8cbc"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"e556964e44a1db548f39efc18d9266e299a4582c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"@startuml"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_0867c3b7","line":3,"range":{"start_line":3,"start_character":16,"end_line":3,"end_character":24},"in_reply_to":"9a68dd71_b1c9927a","updated":"2016-01-25 01:19:45.000000000","message":"ok, will do","commit_id":"bdb3ba1f60e0b5b6a3c8127b823e30fbf4ae8cbc"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"90ca7a485cef6d746c686a6ae4703acb561bf2c8","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_b1f2f2d0","line":5,"range":{"start_line":5,"start_character":21,"end_line":5,"end_character":24},"updated":"2016-01-22 07:27:03.000000000","message":"Please see my comment in the previous patch.\n\nSmaugOperationEngine call --\u003e\u003e Smaug API Post /provider/Checkpoint","commit_id":"bdb3ba1f60e0b5b6a3c8127b823e30fbf4ae8cbc"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"e556964e44a1db548f39efc18d9266e299a4582c","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"title Protect - Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"SmaugOperationEngine -\u003e\u003e ProtectionManager :execute_operation(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e ProtectionManager:create work flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute work flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"9a68dd71_48713b75","line":5,"range":{"start_line":5,"start_character":21,"end_line":5,"end_character":24},"in_reply_to":"9a68dd71_b1f2f2d0","updated":"2016-01-25 01:19:45.000000000","message":"Sorry, we have changed the operation execution RPC call from OperationEngine to API service?","commit_id":"bdb3ba1f60e0b5b6a3c8127b823e30fbf4ae8cbc"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"645b37c03d747f7fe2e3abae3c2c86fad30df4b1","unresolved":false,"context_lines":[{"line_number":3,"context_line":"title create_checkpoint - API RPC call Sequence Diagram"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Smaug_API_Service -\u003e\u003e ProtectionManager :create_checkpoint(backup_plan, protect)"},{"line_number":6,"context_line":"ProtectionManager -\u003e WorkflowEngine:built task flow"},{"line_number":7,"context_line":"ProtectionManager -\u003e WorkflowEngine: execute task flow"},{"line_number":8,"context_line":"WorkflowEngine -\u003e CreateCheckpointTask:execute()"},{"line_number":9,"context_line":"CreateCheckpointTask -\u003e Checkpoints : create_checkpoint()"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"7a5de9d1_9acb4b1e","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":17},"updated":"2016-01-29 07:34:44.000000000","message":"I think that we are missing the automatic object discovery part and updating the DB with the new resources in the pan \nWe need to call the protectable engine to check if we need to protect additional resources   \n\nWe said that by default every resource will have a two built in options\nAuto_detect_new_dependencies by default equal to True \nInclude_depended_resources  by default equal to True","commit_id":"ff4b611d48be2142e047203f733fabbbf9d9c26c"}]}
