Monday, 2016-04-18

*** yinwei_computer has joined #openstack-smaug01:42
*** yinwei_computer has quit IRC02:23
*** yinwei_computer has joined #openstack-smaug02:24
*** chenying has joined #openstack-smaug02:36
*** c00281451 has joined #openstack-smaug02:42
*** c00281451 is now known as chenzeng02:43
openstackgerritxiangxinyong proposed openstack/smaug-dashboard: [Protection Plans] Submit index view function  https://review.openstack.org/30689703:34
*** yuval has joined #openstack-smaug05:59
yuvalping yinweiishere yinwei_computer06:17
yuvalping yinweiishere yinwei_computer07:20
yinweiisherehello yuval07:41
yuvalhey yinweiishere07:51
yinweiisherehi07:52
yinweiisherehow are you07:52
yuvalvery well, you?07:52
yinweiishereme too07:53
yinweiisherethanks07:54
yinweiisheredo you wanna check your design about task flow with me?07:54
yuvalhave you read the mail I sent you?07:54
yinweiishereyes07:54
yuvalwhat do you think?07:54
yinweiisherehmm, but I don't quite get the point to divide paralle flow and sync flow07:54
yinweiishereespecially about the sync flow is sth. related to heat?07:55
yuvalthe sync flow is for the protection plugin to implement07:56
yinweiishereand how would you link those paralle flows returned by each plugin?07:56
yinweiisherestill by dependency or just let all parallel flows run on parallel?07:56
yuvalhave you seen the graph? the parallel flow is linked to the same resource sync flow07:57
yinweiishereyes, I saw the graph, but still a bit confused07:57
yuvalright:07:57
yinweiisheredo you mean sth. like this:07:57
yuval?07:58
yinweiisherevolume.sync->volume.parallel, sever.sync->server.parallel07:58
yinweiisherebut how to link volume.paralle and server.parallel?07:58
yinweiishereby dependency of resource graph or let volume.parallel run on parallel with server.parallel?07:59
yuvalthey are not linked, that is why they can run in parallel07:59
yinweiisherehmm08:00
yinweiisherewhat's the solution for restoration dependency?08:00
yuvalexactly the same, except the attachment can be done by heat08:01
yuvalI'm still not 100% familiar with heat, I'm still reading about it08:01
yinweiisherethat's fine08:02
yinweiisherejust try to figure out your design08:02
yuvalsure08:02
yinweiishereso what's the benefit of dividing sync flow and parallel flow?08:02
yuvalwith the other design, we build a task flow, but in the end, each task just "begins" its process, and is not sync. in this case, I just can't understand why we build the taskflow. each resource can launch its process while we walk the graph08:03
yuvalI thought we can offer the protection plugin two places where it can do job:08:04
yinweiishereit seems to me that the idea is sth. like each resource just return a task flow, where the flow is internally composed by several tasks with dependency; but externally, all task flows returned by each resource could run on parallel without dependency08:04
yuvalare you speaking about my idea or the other idea08:04
yuval?08:04
yinweiishereyour idea08:04
yinweiishereI mean your idea looks sth. like that08:04
yuvalno, that is not what I meant08:05
yinweiishereif we take sync flow and parallel as one flow08:05
yuvalno, we don't take them as one flow08:05
yinweiisheresince we link them as sync-flow->parallel-flow08:05
yinweiisherebut if you link them, they will look like a flow unit08:06
yinweiisherepls. go ahead, that's what confused me08:06
yuvalsure08:06
yuvalone moment08:07
yinweiisherenp08:07
yinweiishereyou could share any personal storage with me now08:07
yinweiishereas I'm in open lab :)08:07
yuvalgreat :)08:09
yuvalI sent you a small python script08:10
yuvalwhich shows a small demo of the sync-flow, parallel-flow08:11
yuvalBasically, the idea is:08:11
yuvalwe want to let the protection plugin perform operations:08:11
yuval1. In parallel, where it doesn't block other resources and protection plugins, minimizing the amount of time a protect/restore takes08:12
yuval2. In sync, when we do job for a resource, we can be 100% sure its child resources were handles by their protection plugins. maybe we want to affect them, gather information about them, and we need them to be handled by their protection plugins for that08:13
yuvalA protection plugin can say: I don't care about my child resources, I just want to do all work in parallel - and implement only the parallel flow08:14
yuvalOr maybe, it must take action only after its child resources were handled, because it needs info about them. So it can implement the sync flow also08:14
yuvalIn the other suggestion, where every task starts the operation and returns - I can't understand why we build a taskflow. we could launch the async operation while we traverse the tree08:15
yuval</end block> :)08:15
yuvalyinweiishere: ?08:23
yinweiisheresorry, was doing other thread08:24
yinweiishereback08:24
yinweiisherereading08:24
yuvaldid you receive the mail?08:25
yinweiishereno, open lab has no access to huawei mail box :(08:25
yuval1 second then08:25
yinweiisherecould you pls. send it to this mail box: yinweiishere@icloud.com08:25
yuvalhttps://drive.google.com/file/d/0B8kA9zmFxeh8elplVndPWGZDcW8/view?usp=sharing08:26
yuvalSent08:26
yinweiisheregot it08:28
yinweiisherehaven't read the python code, for your descriptio above:08:30
yinweiisheredo you mean we will have all parallel flows run on parallel, while link all sync tasks with child-parent dependency in resource graph?08:32
yuvalyes. sync tasks are linked according to resource graph. parallel task are linked to their resource sync task08:34
yuval**sync tasks are linked to other sync tasks according to resource graph08:34
yinweiishereI think the point to divide sync and parallel tasks here is the define the sync-mode of the task execute().08:39
yuvalnot sure I understand what you mean08:39
yuvaloh, ok08:39
yuvalit is not just that08:40
yinweiishereI mean, for sync flow, we define that the execute() of the task here is to complete its task inside the life time of execute()08:40
yuvalit is that when a sync task execute() is reached, we _know_ that its children have finished08:40
yinweiishereyes, it looks more clear for the behavior of a task flow08:41
yinweiisherebut I have conern on the complex of protection plugin08:41
yuvalwe can simplify. instead of sync-flow, make it sync-method08:41
yuvaland parallel-method08:42
yuval(names can change :) )08:42
yuvalI agree that demanding flows from protection plugin makes it much more complex08:42
yuvalso, we can just make it two methods, which a protection plugin can implement08:42
yinweiishereand it seems that one protection plugin should take care of others implementation08:43
yuvalwhy is that?08:43
yinweiisherewhat if child resource protection plugin returns only parallel flow, which means it doesn't care its own child08:43
yinweiisherebut the parent resource protection plugin returns only sync flow, which means it cares its child task has been handled or not08:44
yuvalthe only demand from the protection plugin is: the sync-flow (or method) must return when the job is complete for this resource. you must sync it08:44
yinweiishereyes08:45
yuvalthat is a logical request from a protection plugin. not very different from demanding a status_getter function08:45
yinweiisheresay, sever plugin implements a sync-flow, which requires its child (volume) to return a sync flow as well08:45
yinweiisherebut volume protection plugin only returns a parallel flow which doesn't ensure its completion during execute life time08:46
yuvalif a protection plugin doesn't return a sync-flow, a no-op sync-flow is returned.08:46
yinweiisherewhich means the requires/provids doesn't meet in task flow08:46
yinweiisherebut server's task has requires where its children tasks can't provide08:47
yuvalthen the volume protection plugin violates the demand that its flow is complete once the operation is compelte08:47
yinweiishereyes, I mean there will be dependencies among each protectio plugin of the same provider08:47
yuvalI don't understand08:48
yuvalcan you rephrase?08:48
yinweiishererethink of this problem08:50
yinweiisherethere will be case like sync-flow->parallel-flow1, sync-flow->parallel-flow208:50
yinweiisherehow to handle this case?08:50
yuvalthere is not such case08:51
yinweiisherewhere parallel-flow1 and parallel-flow2 could run on parallel but sync-flow should wait those 2 to end08:51
yinweiisherewhy08:51
yuvalbecause each resource returns 1 parallel flow, which is linked to the same resource sync-flow08:51
yinweiishereand its sync-flow is to sync its parallel flow's status?08:53
yuvaleither the sync-flow or the parallel-flow can do it08:53
yuvalbut one of them must08:53
openstackgerritchenying proposed openstack/smaug: Add fullstack test to smaug  https://review.openstack.org/30699608:55
yinweiishereI got your idea.  It's good to make the flow organization more clear.  At the same time,  we have to keep the simplicity of protection plugin as well. So there should be a balance here.08:56
yinweiisherepls. send the mail to dev mail list08:56
yinweiisheremaybe other guys will have suggestions here.08:57
yuvalsure08:58
yuvalanyway, consider the other solution - why do we need the taskflow, if dependency is only for starting the operation for each resource?08:58
yinweiisherefor protection, if each plugin only calls async openstack API, there's no need of task flow08:59
yinweiisherebut that's only for reference implementation08:59
yinweiisheresay, if there's consistency requirment between server and volume, then task flow is required09:00
yuvaland then the volume will be implemented a sync?09:00
yuval*as sync09:01
yinweiisherelike server-freeze-io-task <- volume-backup; server-freeze-io-task <- server-backup-snapshot09:01
yinweiisherenot necessarily09:01
yinweiisherejust the depdency task is sync09:01
yuvalso the server task needs to sync the operation started by the volume task?09:02
yinweiishereyes09:02
yuvalwhat if they are from different protection plugins?09:03
yinweiisherebut for restoration, the dependency graph is built to represent the rebuilt dependencies.  so tasks should be sync and linked with the dependencies represented in resource graph09:03
yinweiishereif the server/volume want to ensure fs level consistency, the two have to operate.  so the two protection plugins of the same provider must combine to ensure this feature.09:04
yinweiishereit's protection plugin specific09:05
yinweiisherethe two have to *cooperate09:05
yuvalI see09:06
yuvalI'll summarize the two suggestions and send to the mailing list09:06
*** yuval has quit IRC15:02
*** zhongjun_ has quit IRC15:06
*** zhongjun_ has joined #openstack-smaug15:07
*** yuval_ has joined #openstack-smaug16:01
*** yuval_ is now known as yuval16:04
*** yuval has quit IRC17:15
*** yuval has joined #openstack-smaug17:15
*** yuval is now known as Guest6099917:16
*** Guest60999 has quit IRC17:16
*** yuval_ has joined #openstack-smaug17:51
*** yuval_ has quit IRC17:57

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!