)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"20b395d22263b3efbb8720173ba3a37e9f21f0ac","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provide a more dynamic Actions management solution"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Today, the set of possible `Actions`_ is fixed for a given version of Watcher"},{"line_number":10,"context_line":"and enables optimization algorithms to include actions such as instance"},{"line_number":11,"context_line":"migration, changing hypervisor state, changing power state (ACPI level, ...)."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a710552_f04e9e95","line":9,"updated":"2015-12-15 07:51:48.000000000","message":"The  line should be limited to 72 characters","commit_id":"9ea5c5568596356b99ae26727111fc6e31366cab"}],"specs/mitaka/approved/watcher-add-actions-via-conf.rst":[{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   :width: 100%"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"You can see that there is a need in Watcher for three main steps:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_1d447a72","line":42,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, you can add a section here to simply describe in few words the  steps and the reasons ( separation of concern, evolution,..)","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   :width: 100%"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"You can see that there is a need in Watcher for three main steps:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_75a9d7de","line":42,"in_reply_to":"5a710552_1d447a72","updated":"2015-12-16 12:54:22.000000000","message":"OK, I have put at the beginning what was written at the end of this paragraph in PS1.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"You can see that there is a need in Watcher for three main steps:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_33aac7d5","line":43,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we have two steps:\n1 - In the strategy we want to describe the action to perform.\n2 - Then, we want to store these actions.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"You can see that there is a need in Watcher for three main steps:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f58ce780","line":43,"in_reply_to":"5a710552_33aac7d5","updated":"2015-12-16 12:54:22.000000000","message":"Ok, I have added a topo to better differentiate the needs :\n- description of new action types\n- instanciation of an action type\n- storage of all this","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."},{"line_number":47,"context_line":"  Those `Actions`_ are not scheduled within a timeframe at that point. At this"},{"line_number":48,"context_line":"  step, developer just need a solution for registering and defining new types"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f3651fe1","line":45,"updated":"2015-12-15 13:47:04.000000000","message":"IHMO, you can also add instanciate or describe through a DSL.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* The first step named \"**Define and instanciate Actions for Optimization**\""},{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."},{"line_number":47,"context_line":"  Those `Actions`_ are not scheduled within a timeframe at that point. At this"},{"line_number":48,"context_line":"  step, developer just need a solution for registering and defining new types"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_95ea430e","line":45,"in_reply_to":"5a710552_f3651fe1","updated":"2015-12-16 12:54:22.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."},{"line_number":47,"context_line":"  Those `Actions`_ are not scheduled within a timeframe at that point. At this"},{"line_number":48,"context_line":"  step, developer just need a solution for registering and defining new types"},{"line_number":49,"context_line":"  of task with very simple information such as:"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f01d1510","line":47,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, you can add that we also won\u0027t take into account the failure scenarios at this step in order to separate the concerns","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  takes place in the `Strategies`_ of the `Watcher Decision Engine`_: each"},{"line_number":45,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":46,"context_line":"  optimization Action types in order to achieve the goal of the Audit."},{"line_number":47,"context_line":"  Those `Actions`_ are not scheduled within a timeframe at that point. At this"},{"line_number":48,"context_line":"  step, developer just need a solution for registering and defining new types"},{"line_number":49,"context_line":"  of task with very simple information such as:"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_15c6539a","line":47,"in_reply_to":"5a710552_f01d1510","updated":"2015-12-16 12:54:22.000000000","message":"I don\u0027t think it is relevant to do a long list of all the things we don\u0027t do in the Strategy :-)","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":56,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":57,"context_line":"    float, ..."},{"line_number":58,"context_line":"  * **results**: an array of output results provided as pairs with the"},{"line_number":59,"context_line":"    following values: **(result_name, result_type)**. The"},{"line_number":60,"context_line":"    **result_type** can be any simple type such as string, integer, boolean,"},{"line_number":61,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f31d1f10","line":58,"updated":"2015-12-15 13:47:04.000000000","message":"IHMO, the result should be store in an other type in the current implementation we have Action Status with :  \n\nAction Status :\nid\ntimestamp\nstate\nretry_index","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":56,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":57,"context_line":"    float, ..."},{"line_number":58,"context_line":"  * **results**: an array of output results provided as pairs with the"},{"line_number":59,"context_line":"    following values: **(result_name, result_type)**. The"},{"line_number":60,"context_line":"    **result_type** can be any simple type such as string, integer, boolean,"},{"line_number":61,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f55147d9","line":58,"in_reply_to":"5a710552_f31d1f10","updated":"2015-12-16 12:54:22.000000000","message":"I have removed this list of attributes because the spec needs to describe the functional and non functional needs and not the implementation solution.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  * **display_description**: a long human readable description for the"},{"line_number":64,"context_line":"    `Action`_ type."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  At this step, developers also need a way to create one or several instances"},{"line_number":67,"context_line":"  of these `Action`_ types. Each instance, containing information such as:"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  * **uuid**: the unique id of the `Action`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_4eaa46d6","line":66,"updated":"2015-12-15 13:47:04.000000000","message":"Why another section for describing the attributes of `Actions` ?","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  * **display_description**: a long human readable description for the"},{"line_number":64,"context_line":"    `Action`_ type."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  At this step, developers also need a way to create one or several instances"},{"line_number":67,"context_line":"  of these `Action`_ types. Each instance, containing information such as:"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"  * **uuid**: the unique id of the `Action`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_955fa3e4","line":66,"in_reply_to":"5a710552_4eaa46d6","updated":"2015-12-16 12:54:22.000000000","message":"OK, removed from here.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  * **action_plan_id**: the unique id of the `Action Plan`_ to which the"},{"line_number":71,"context_line":"    `Action`_ belongs"},{"line_number":72,"context_line":"  * **input_values**: an array of input parameter provided as key-value pairs"},{"line_number":73,"context_line":"    of strings. Each key-pair contains the"},{"line_number":74,"context_line":"    **(parameter_name, parameter_value)** with names and values that match"},{"line_number":75,"context_line":"    what was previously defined in the `Action`_ type design."},{"line_number":76,"context_line":"  * **applies_to**: the unique id of the resource to which the `Action`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_b3a7974e","line":73,"updated":"2015-12-15 13:47:04.000000000","message":"Why we need input_values here  ?","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"  * **action_plan_id**: the unique id of the `Action Plan`_ to which the"},{"line_number":71,"context_line":"    `Action`_ belongs"},{"line_number":72,"context_line":"  * **input_values**: an array of input parameter provided as key-value pairs"},{"line_number":73,"context_line":"    of strings. Each key-pair contains the"},{"line_number":74,"context_line":"    **(parameter_name, parameter_value)** with names and values that match"},{"line_number":75,"context_line":"    what was previously defined in the `Action`_ type design."},{"line_number":76,"context_line":"  * **applies_to**: the unique id of the resource to which the `Action`_"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_9506c3cc","line":73,"in_reply_to":"5a710552_b3a7974e","updated":"2015-12-16 12:54:22.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    of strings. Each key-pair contains the"},{"line_number":74,"context_line":"    **(parameter_name, parameter_value)** with names and values that match"},{"line_number":75,"context_line":"    what was previously defined in the `Action`_ type design."},{"line_number":76,"context_line":"  * **applies_to**: the unique id of the resource to which the `Action`_"},{"line_number":77,"context_line":"    applies. Note that this could be included as one of the **input_values**"},{"line_number":78,"context_line":"    but by proposing it in a dedicated parameter, the framework makes it a"},{"line_number":79,"context_line":"    mandatory input parameter of each `Action`_."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_6e05c2c0","line":76,"updated":"2015-12-15 13:47:04.000000000","message":"How \"applies_to\" is able to target every OpenStack Resource Types ?","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    of strings. Each key-pair contains the"},{"line_number":74,"context_line":"    **(parameter_name, parameter_value)** with names and values that match"},{"line_number":75,"context_line":"    what was previously defined in the `Action`_ type design."},{"line_number":76,"context_line":"  * **applies_to**: the unique id of the resource to which the `Action`_"},{"line_number":77,"context_line":"    applies. Note that this could be included as one of the **input_values**"},{"line_number":78,"context_line":"    but by proposing it in a dedicated parameter, the framework makes it a"},{"line_number":79,"context_line":"    mandatory input parameter of each `Action`_."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_b5e17fd2","line":76,"in_reply_to":"5a710552_6e05c2c0","updated":"2015-12-16 12:54:22.000000000","message":"Ok, I have removed the list of attributes here and only say this :\n\n\"Each type of `Action`_ should have its own input parameters, name, description, version and target `resource type`_.\"","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    applies. Note that this could be included as one of the **input_values**"},{"line_number":78,"context_line":"    but by proposing it in a dedicated parameter, the framework makes it a"},{"line_number":79,"context_line":"    mandatory input parameter of each `Action`_."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* The second step named \"**Schedule Actions in Time**\" takes place in the"},{"line_number":82,"context_line":"  `Watcher Planner`_: the `Actions`_ instanciated in the `Strategy`_ need to"},{"line_number":83,"context_line":"  be scheduled so that they do not disturb the `SLA`_ and also because there is"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_492b2031","line":80,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we can add an additional step here.  \nWe have a strong separation of concern between the \"actions\" given by a strategy and the \"planner \u0026 applier\", there is no link. \n\nSo, How can we make a link between the actions given by the strategy and the code in charge to apply it on the system ? This a the aim of this step.\n\nWe can maybe call this step \"Mapper\"\n\nWhat do you think ?","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    applies. Note that this could be included as one of the **input_values**"},{"line_number":78,"context_line":"    but by proposing it in a dedicated parameter, the framework makes it a"},{"line_number":79,"context_line":"    mandatory input parameter of each `Action`_."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* The second step named \"**Schedule Actions in Time**\" takes place in the"},{"line_number":82,"context_line":"  `Watcher Planner`_: the `Actions`_ instanciated in the `Strategy`_ need to"},{"line_number":83,"context_line":"  be scheduled so that they do not disturb the `SLA`_ and also because there is"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_35ceef5a","line":80,"in_reply_to":"5a710552_492b2031","updated":"2015-12-16 12:54:22.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  from Nova). Therefore, the `Watcher Planner`_ must be able to take into"},{"line_number":88,"context_line":"  account some scheduling policies/rules such as:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * do not migrate more than once virtual machine at the same time"},{"line_number":91,"context_line":"  * make sure there\u0027s no more virtual machines on a compute node before"},{"line_number":92,"context_line":"    powering it off (for energy saving)."},{"line_number":93,"context_line":"  * live migration is preferred to non-live migration"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_4eb566cb","line":90,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we want to migrate more than once virtual machine at the same time. However, we don\u0027t want for example that the concurrent migrations congest the network.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  from Nova). Therefore, the `Watcher Planner`_ must be able to take into"},{"line_number":88,"context_line":"  account some scheduling policies/rules such as:"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * do not migrate more than once virtual machine at the same time"},{"line_number":91,"context_line":"  * make sure there\u0027s no more virtual machines on a compute node before"},{"line_number":92,"context_line":"    powering it off (for energy saving)."},{"line_number":93,"context_line":"  * live migration is preferred to non-live migration"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f5d707eb","line":90,"in_reply_to":"5a710552_4eb566cb","updated":"2015-12-16 12:54:22.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  efficient and extensible way to define those scheduling policies/rules and"},{"line_number":98,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":99,"context_line":"  produce a \"*Workflow description*\" describing the dependency chain between"},{"line_number":100,"context_line":"  each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_ceef16af","line":100,"updated":"2015-12-15 13:47:04.000000000","message":"\"*Workflow description*\" or DSL","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  efficient and extensible way to define those scheduling policies/rules and"},{"line_number":98,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":99,"context_line":"  produce a \"*Workflow description*\" describing the dependency chain between"},{"line_number":100,"context_line":"  each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_55e93b7f","line":100,"in_reply_to":"5a710552_ceef16af","updated":"2015-12-16 12:54:22.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"10e06ac2742b0c5b2a096d883b52f3401c4d9310","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":99,"context_line":"  produce a \"*Workflow description*\" describing the dependency chain between"},{"line_number":100,"context_line":"  each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"},{"line_number":104,"context_line":"  be done, how often, ...). It should be possible to define error recovery"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_174c4541","line":101,"updated":"2015-12-15 15:40:29.000000000","message":"Can use for example a solver to generate the workflow ?","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":99,"context_line":"  produce a \"*Workflow description*\" describing the dependency chain between"},{"line_number":100,"context_line":"  each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"},{"line_number":104,"context_line":"  be done, how often, ...). It should be possible to define error recovery"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_c8bfcef9","line":101,"in_reply_to":"5a710552_174c4541","updated":"2015-12-16 12:54:22.000000000","message":"Added the following sentence :\n\nIdeally, the developer should be able to integrate a new \"*rules solver*\"\nwhich could be dynamically loaded in the `Watcher Planner`_ according to what is set in Watcher configuration files.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"},{"line_number":104,"context_line":"  be done, how often, ...). It should be possible to define error recovery"},{"line_number":105,"context_line":"  policies for a specific `Action`_ or for a wider scope (the whole workflow or"},{"line_number":106,"context_line":"  embedded workflow)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* The third step named \"**Execute Actions**\" takes place in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_aee5eaa8","line":105,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we can maybe add an additional step here.  \n(future work not related to this blueprint)\nThe aim of this new step is to play the workflow and simulate the execution of the actions on the real system to determine if the action plan is still feasible.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  It should also be possible to define error recovery rules which define what"},{"line_number":103,"context_line":"  must be done whenever an error occurs in the worklow (how many attempts must"},{"line_number":104,"context_line":"  be done, how often, ...). It should be possible to define error recovery"},{"line_number":105,"context_line":"  policies for a specific `Action`_ or for a wider scope (the whole workflow or"},{"line_number":106,"context_line":"  embedded workflow)."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"* The third step named \"**Execute Actions**\" takes place in the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_6887bad7","line":105,"in_reply_to":"5a710552_aee5eaa8","updated":"2015-12-16 12:54:22.000000000","message":"OK\n\nI didn\u0027t add a specific phase for simulation but I have added some info about it.\nBecause simulation will probably rely on the same engine system than real execution. It\u0027s just a flag that you activate in the engine which says \"do not launch the real execute() method\"","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  * **preconfigure()**: this is where you make sure all pre-conditions are met"},{"line_number":122,"context_line":"    before executing the `Action`_. For example, you may verify tha the input"},{"line_number":123,"context_line":"    parameters are valid or that there is no missing mandatory input parameter."},{"line_number":124,"context_line":"  * **abort()**: this is where you do all the cleanup whenever the `Action`_"},{"line_number":125,"context_line":"    must be aborted or cancelled."},{"line_number":126,"context_line":"  * **postconfigure()**: this is where you do some post-processing if the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_e209c296","line":123,"updated":"2015-12-15 13:47:04.000000000","message":"future work : add a function that will be expected to decide at runtime whether ``v`` should be allowed to  execute or not executed).","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"  of the workflow which enables to take some output results from a previously"},{"line_number":131,"context_line":"  executed `Action`_ and inject it as input parameters of the next upcoming"},{"line_number":132,"context_line":"  `Action`_. This context must be persisted in some database and the workflow"},{"line_number":133,"context_line":"  engine should be able to restart an interrupted workflow (in the case the"},{"line_number":134,"context_line":"  `Watcher Applier`_ service was stopped for example) from where it was"},{"line_number":135,"context_line":"  stoppped and not restart it from the zero."},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_52ddfb40","line":133,"updated":"2015-12-16 12:54:22.000000000","message":"resume","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * **action_type**: the unique id of the `Action`_ type."},{"line_number":249,"context_line":"  * **action_type_version**: the version of the `Action`_ type. It would be"},{"line_number":250,"context_line":"    provided with `SemVer`_ format."},{"line_number":251,"context_line":"  * **parameters**: an array of input parameters provided as pairs with the"},{"line_number":252,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":253,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":254,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_b2bf7fcf","line":251,"updated":"2015-12-16 12:54:22.000000000","message":"key-value pairs","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":248,"context_line":"  * **action_type**: the unique id of the `Action`_ type."},{"line_number":249,"context_line":"  * **action_type_version**: the version of the `Action`_ type. It would be"},{"line_number":250,"context_line":"    provided with `SemVer`_ format."},{"line_number":251,"context_line":"  * **parameters**: an array of input parameters provided as pairs with the"},{"line_number":252,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":253,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":254,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_71647e21","line":251,"in_reply_to":"5a710552_b2bf7fcf","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":253,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":254,"context_line":"    float, ..."},{"line_number":255,"context_line":"  * **results**: an array of output results provided as pairs with the"},{"line_number":256,"context_line":"    following values: **(result_name, result_type)**. The"},{"line_number":257,"context_line":"    **result_type** can be any simple type such as string, integer, boolean,"},{"line_number":258,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_12cf7380","line":255,"updated":"2015-12-16 12:54:22.000000000","message":"key-value pairs","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    following values: **(parameter_name, parameter_type)**. The"},{"line_number":253,"context_line":"    **parameter_type** can be any simple type such as string, integer, boolean,"},{"line_number":254,"context_line":"    float, ..."},{"line_number":255,"context_line":"  * **results**: an array of output results provided as pairs with the"},{"line_number":256,"context_line":"    following values: **(result_name, result_type)**. The"},{"line_number":257,"context_line":"    **result_type** can be any simple type such as string, integer, boolean,"},{"line_number":258,"context_line":"    float, ..."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_9199ea21","line":255,"in_reply_to":"5a710552_12cf7380","updated":"2015-12-16 15:02:33.000000000","message":"Removed finally because no need to return this for now.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"  * **parameters**: an array of input parameters provided as key-value pairs."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"It may also be relevant to add an aggressivity level for each `Action`_ type."},{"line_number":270,"context_line":"The aggressivity level is a weight of how much a certain type of `Action`_ may"},{"line_number":271,"context_line":"impact some `SLA`_."},{"line_number":272,"context_line":"This way, it will be possible for the administrator to parameter a threshold"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_02596e5a","line":269,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we add an another blueprint for the aggressivity.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"  * **parameters**: an array of input parameters provided as key-value pairs."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"It may also be relevant to add an aggressivity level for each `Action`_ type."},{"line_number":270,"context_line":"The aggressivity level is a weight of how much a certain type of `Action`_ may"},{"line_number":271,"context_line":"impact some `SLA`_."},{"line_number":272,"context_line":"This way, it will be possible for the administrator to parameter a threshold"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_31427611","line":269,"in_reply_to":"5a710552_02596e5a","updated":"2015-12-16 15:02:33.000000000","message":"Ok, removed.\nWe\u0027ll see it later ...","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"230524e89d771277df741ea3e519e9b3297d334c","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Please look at the `Actions handling in Watcher API`_."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"If Watcher stores new data objects such as **ActionType** and **ActionFlow**,"},{"line_number":297,"context_line":"it would be necessary to provide new REST resource URLs for managing those"},{"line_number":298,"context_line":"objects with CRUD operations."},{"line_number":299,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_05064ace","line":296,"updated":"2015-12-16 12:54:22.000000000","message":"Remove ActionFlow from here because only Planner will create this type of object.\n\nRegarding ActionType, we may provide the description as a JSON like structure.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Please look at the `Actions handling in Watcher API`_."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"If Watcher stores new data objects such as **ActionType** and **ActionFlow**,"},{"line_number":297,"context_line":"it would be necessary to provide new REST resource URLs for managing those"},{"line_number":298,"context_line":"objects with CRUD operations."},{"line_number":299,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_9167aa24","line":296,"in_reply_to":"5a710552_05064ace","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"f192b9142d81f3f739b20b44f4e29ee5b3a830b4","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"Other deployer impact"},{"line_number":332,"context_line":"---------------------"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There will be a new folder **/watcher/applier/actions** where all `Action`_"},{"line_number":335,"context_line":"class files must be copied so that they can be found by the Watcher `stevedore`_"},{"line_number":336,"context_line":"system and loaded dynamically (like a plugin) when needed in an `Action Plan`_."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_b9052dc3","line":333,"updated":"2015-12-15 13:57:07.000000000","message":"IHMO, we will have an impact in the strategy.  \n\nIf can add/remove action. we should specify in the actions+version used by the strategy and also the associated planner.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":331,"context_line":"Other deployer impact"},{"line_number":332,"context_line":"---------------------"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There will be a new folder **/watcher/applier/actions** where all `Action`_"},{"line_number":335,"context_line":"class files must be copied so that they can be found by the Watcher `stevedore`_"},{"line_number":336,"context_line":"system and loaded dynamically (like a plugin) when needed in an `Action Plan`_."},{"line_number":337,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_05917899","line":334,"updated":"2015-12-15 13:47:04.000000000","message":"IHMO, the action can be defined in another repository.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":331,"context_line":"Other deployer impact"},{"line_number":332,"context_line":"---------------------"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"There will be a new folder **/watcher/applier/actions** where all `Action`_"},{"line_number":335,"context_line":"class files must be copied so that they can be found by the Watcher `stevedore`_"},{"line_number":336,"context_line":"system and loaded dynamically (like a plugin) when needed in an `Action Plan`_."},{"line_number":337,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_e3973f8e","line":334,"in_reply_to":"5a710552_05917899","updated":"2015-12-16 15:02:33.000000000","message":"ok, I\u0027ve changed the whole text here","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":343,"context_line":"In order to avoid conflicts between two versions of the same `Action`_ type"},{"line_number":344,"context_line":"implementation, there will be one subfolder for each `Action`_ type, with the"},{"line_number":345,"context_line":"following name synthax **\u003caction-type\u003e-\u003csemver-of-action\u003e**. Tne Python class"},{"line_number":346,"context_line":"files and dependencies will be put in this subfolder."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"There may also be subfolders of the folder containing the main configuration"},{"line_number":349,"context_line":"files (most of the time **/etc/watcher**) which contain the configuration files"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_e5630cb0","line":346,"updated":"2015-12-15 13:47:04.000000000","message":"IHMO, this not a good idea to add a subfolder","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":343,"context_line":"In order to avoid conflicts between two versions of the same `Action`_ type"},{"line_number":344,"context_line":"implementation, there will be one subfolder for each `Action`_ type, with the"},{"line_number":345,"context_line":"following name synthax **\u003caction-type\u003e-\u003csemver-of-action\u003e**. Tne Python class"},{"line_number":346,"context_line":"files and dependencies will be put in this subfolder."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"There may also be subfolders of the folder containing the main configuration"},{"line_number":349,"context_line":"files (most of the time **/etc/watcher**) which contain the configuration files"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_83867b63","line":346,"in_reply_to":"5a710552_e5630cb0","updated":"2015-12-16 15:02:33.000000000","message":"ok, removed","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":381,"context_line":"the list of foreseen work items:"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"* Refactor the code in order to merge the previously separated concepts"},{"line_number":384,"context_line":"  primitive and meta-action:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"  * There will be only one unique folder containing the classes for each `Action`_"},{"line_number":387,"context_line":"    type instead of the following separated folders:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_85ab2889","line":384,"updated":"2015-12-15 13:47:04.000000000","message":"the meta-action is deprecated since the refactoring of the code.","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":381,"context_line":"the list of foreseen work items:"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"* Refactor the code in order to merge the previously separated concepts"},{"line_number":384,"context_line":"  primitive and meta-action:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"  * There will be only one unique folder containing the classes for each `Action`_"},{"line_number":387,"context_line":"    type instead of the following separated folders:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_a3e85711","line":384,"in_reply_to":"5a710552_85ab2889","updated":"2015-12-16 15:02:33.000000000","message":"ok removed","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    * **/watcher/applier/primitive/**"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* In the **ActionPlanExecutor** class, add dynamic loading of `Action`_ type"},{"line_number":393,"context_line":"  classes with `stevedore`_ and error handling whenever no file could be"},{"line_number":394,"context_line":"  loaded corresponding to the `Action`_ type that needs to be launched by the"},{"line_number":395,"context_line":"  `Watcher Applier`_."},{"line_number":396,"context_line":"* In each class associated to an `Action`_ type, support the following methods:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_85fec869","line":393,"updated":"2015-12-15 13:47:04.000000000","message":"IMHO, we will create an new class to create dedicated class to manage that.\n\nThe name of this class can be ActionLoader","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    * **/watcher/applier/primitive/**"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* In the **ActionPlanExecutor** class, add dynamic loading of `Action`_ type"},{"line_number":393,"context_line":"  classes with `stevedore`_ and error handling whenever no file could be"},{"line_number":394,"context_line":"  loaded corresponding to the `Action`_ type that needs to be launched by the"},{"line_number":395,"context_line":"  `Watcher Applier`_."},{"line_number":396,"context_line":"* In each class associated to an `Action`_ type, support the following methods:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_798c6035","line":393,"in_reply_to":"5a710552_85fec869","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":393,"context_line":"  classes with `stevedore`_ and error handling whenever no file could be"},{"line_number":394,"context_line":"  loaded corresponding to the `Action`_ type that needs to be launched by the"},{"line_number":395,"context_line":"  `Watcher Applier`_."},{"line_number":396,"context_line":"* In each class associated to an `Action`_ type, support the following methods:"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"  * **preconfigure()**: this is where you make sure all pre-conditions are met"},{"line_number":399,"context_line":"    before executing the `Action`_. For example, you may verify tha the input"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_052178fb","line":396,"updated":"2015-12-15 13:47:04.000000000","message":"same as above","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":393,"context_line":"  classes with `stevedore`_ and error handling whenever no file could be"},{"line_number":394,"context_line":"  loaded corresponding to the `Action`_ type that needs to be launched by the"},{"line_number":395,"context_line":"  `Watcher Applier`_."},{"line_number":396,"context_line":"* In each class associated to an `Action`_ type, support the following methods:"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"  * **preconfigure()**: this is where you make sure all pre-conditions are met"},{"line_number":399,"context_line":"    before executing the `Action`_. For example, you may verify tha the input"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_1983dc05","line":396,"in_reply_to":"5a710552_052178fb","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":454,"context_line":"* We have to consider the existence of existing workflow management frameworks"},{"line_number":455,"context_line":"  such as:"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"  * `TaskFlow`_: see blueprint https://blueprints.launchpad.net/watcher/+spec/use-taskflow"},{"line_number":458,"context_line":"  * `Mistral`_"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_2801e9ae","line":457,"updated":"2015-12-15 13:47:04.000000000","message":"PyUtilib -\u003e https://software.sandia.gov/trac/pyutilib\n(It\u0027s a self contained workflow engine, intended to be embedded, and developed to automate the processing of scientific workflows.)\n\nSpiff Workflow -\u003e https://github.com/knipknap/SpiffWorkflow/wiki\n\nhurry.workflow -\u003e https://pypi.python.org/pypi/hurry.workflow","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":454,"context_line":"* We have to consider the existence of existing workflow management frameworks"},{"line_number":455,"context_line":"  such as:"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"  * `TaskFlow`_: see blueprint https://blueprints.launchpad.net/watcher/+spec/use-taskflow"},{"line_number":458,"context_line":"  * `Mistral`_"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_796220af","line":457,"in_reply_to":"5a710552_2801e9ae","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"98330b8cb2e74767d42702fd8a04b1ea82df2dad","unresolved":false,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"* Action point related to `TaskFlow`_: http://eavesdrop.openstack.org/meetings/watcher/2015/watcher.2015-12-09-13.59.html"},{"line_number":502,"context_line":"* A lot of exchanges regarding Actions and Workflow management in the Git"},{"line_number":503,"context_line":"  reviews related to the Watcher glossary: https://review.openstack.org/#/c/254648/"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_88fedd69","line":503,"updated":"2015-12-15 13:47:04.000000000","message":"you pick up the wrong link","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"744cef44e23c059b4e1c4df19cc4b648020d5380","unresolved":false,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"* Action point related to `TaskFlow`_: http://eavesdrop.openstack.org/meetings/watcher/2015/watcher.2015-12-09-13.59.html"},{"line_number":502,"context_line":"* A lot of exchanges regarding Actions and Workflow management in the Git"},{"line_number":503,"context_line":"  reviews related to the Watcher glossary: https://review.openstack.org/#/c/254648/"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a710552_f9913053","line":503,"in_reply_to":"5a710552_88fedd69","updated":"2015-12-16 15:02:33.000000000","message":"Done","commit_id":"a7627c17576cd00d761fc144682bb83caf2dfe13"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"d89fb3f3e6d9cc277c2f8cf4e0d6236ac02cf113","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* `Actions`_ simulation and execution (through some `Action`_ handler class)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Each of these concerns are related to a specific `Bounded Context`_ and the"},{"line_number":50,"context_line":"objective of this blueprint is to better adress each `Bounded Context`_"},{"line_number":51,"context_line":"independently so that we can update the model and source code of a given"},{"line_number":52,"context_line":"context without necessarily impacting the other contexts (Micro-Services"},{"line_number":53,"context_line":"architecture)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_ab3849a1","line":50,"range":{"start_line":50,"start_character":41,"end_line":50,"end_character":47},"updated":"2015-12-17 22:52:41.000000000","message":"address","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3db124ee7e4d502e8aabac41ac6efb686a1f8c50","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* `Actions`_ simulation and execution (through some `Action`_ handler class)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Each of these concerns are related to a specific `Bounded Context`_ and the"},{"line_number":50,"context_line":"objective of this blueprint is to better adress each `Bounded Context`_"},{"line_number":51,"context_line":"independently so that we can update the model and source code of a given"},{"line_number":52,"context_line":"context without necessarily impacting the other contexts (Micro-Services"},{"line_number":53,"context_line":"architecture)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_8389a228","line":50,"range":{"start_line":50,"start_character":41,"end_line":50,"end_character":47},"in_reply_to":"3a7e1126_ab3849a1","updated":"2015-12-18 08:38:28.000000000","message":"Done","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"d89fb3f3e6d9cc277c2f8cf4e0d6236ac02cf113","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    network congestion."},{"line_number":92,"context_line":"  * make sure there\u0027s no more virtual machines on a compute node before"},{"line_number":93,"context_line":"    powering it off (for energy saving)."},{"line_number":94,"context_line":"  * live migration is preferred to non-live migration"},{"line_number":95,"context_line":"  * ..."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  As a result, during this phase of the Watcher processing, there should be an"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_8b5c6dee","line":94,"range":{"start_line":94,"start_character":35,"end_line":94,"end_character":38},"updated":"2015-12-17 22:52:41.000000000","message":"s/non-live/inactive","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3db124ee7e4d502e8aabac41ac6efb686a1f8c50","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    network congestion."},{"line_number":92,"context_line":"  * make sure there\u0027s no more virtual machines on a compute node before"},{"line_number":93,"context_line":"    powering it off (for energy saving)."},{"line_number":94,"context_line":"  * live migration is preferred to non-live migration"},{"line_number":95,"context_line":"  * ..."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"  As a result, during this phase of the Watcher processing, there should be an"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_4383ba04","line":94,"range":{"start_line":94,"start_character":35,"end_line":94,"end_character":38},"in_reply_to":"3a7e1126_8b5c6dee","updated":"2015-12-18 08:38:28.000000000","message":"Done","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"d89fb3f3e6d9cc277c2f8cf4e0d6236ac02cf113","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  efficient and extensible way to define those scheduling policies/rules and"},{"line_number":99,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":100,"context_line":"  produce the design of a flow of `Actions`_ describing the dependency chain"},{"line_number":101,"context_line":"  between each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Ideally, the developer should be able to integrate a new \"*rules solver*\""},{"line_number":104,"context_line":"  which could be dynamically loaded in the `Watcher Planner`_ according to what"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_eb6df198","line":101,"range":{"start_line":101,"start_character":15,"end_line":101,"end_character":27},"updated":"2015-12-17 22:52:41.000000000","message":"instance id","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3db124ee7e4d502e8aabac41ac6efb686a1f8c50","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  efficient and extensible way to define those scheduling policies/rules and"},{"line_number":99,"context_line":"  there should be some implementation which can take them into account to"},{"line_number":100,"context_line":"  produce the design of a flow of `Actions`_ describing the dependency chain"},{"line_number":101,"context_line":"  between each instanciated `Action`_ (after Action A trigger Action B, ...)."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Ideally, the developer should be able to integrate a new \"*rules solver*\""},{"line_number":104,"context_line":"  which could be dynamically loaded in the `Watcher Planner`_ according to what"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_639d9658","line":101,"range":{"start_line":101,"start_character":15,"end_line":101,"end_character":27},"in_reply_to":"3a7e1126_eb6df198","updated":"2015-12-18 08:38:28.000000000","message":"I have removed this word","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"d89fb3f3e6d9cc277c2f8cf4e0d6236ac02cf113","unresolved":false,"context_lines":[{"line_number":181,"context_line":"As a developer."},{"line_number":182,"context_line":"I want to be able to develop scheduling policies/rules and dynamically add"},{"line_number":183,"context_line":"those rules without needing an upgrade of Watcher"},{"line_number":184,"context_line":"So that I can control how actions are scheduled in a given timeframe"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"As a developer."},{"line_number":187,"context_line":"I want to be able to provide new actions handlers as Python class which can be"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_ebf2d1d1","line":184,"range":{"start_line":184,"start_character":59,"end_line":184,"end_character":68},"updated":"2015-12-17 22:52:41.000000000","message":"Period at end","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3db124ee7e4d502e8aabac41ac6efb686a1f8c50","unresolved":false,"context_lines":[{"line_number":181,"context_line":"As a developer."},{"line_number":182,"context_line":"I want to be able to develop scheduling policies/rules and dynamically add"},{"line_number":183,"context_line":"those rules without needing an upgrade of Watcher"},{"line_number":184,"context_line":"So that I can control how actions are scheduled in a given timeframe"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"As a developer."},{"line_number":187,"context_line":"I want to be able to provide new actions handlers as Python class which can be"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3a7e1126_43e89ab4","line":184,"range":{"start_line":184,"start_character":59,"end_line":184,"end_character":68},"in_reply_to":"3a7e1126_ebf2d1d1","updated":"2015-12-18 08:38:28.000000000","message":"Done","commit_id":"d9a86c1eb4bde3693dfc1512627e675e95f25d42"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"e5c345418aa64370f7feb9c6834f0f9f695ecc34","unresolved":false,"context_lines":[{"line_number":378,"context_line":"  the `Watcher Decision Engine`_)"},{"line_number":379,"context_line":"* Add a dynamic loading of the Watcher Planner implementation (via"},{"line_number":380,"context_line":"  stevedore)"},{"line_number":381,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing scheduling"},{"line_number":382,"context_line":"  rules/policies for Actions in Watcher."},{"line_number":383,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing the flow"},{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_90ed6a27","line":381,"range":{"start_line":381,"start_character":10,"end_line":381,"end_character":21},"updated":"2016-01-04 17:19:18.000000000","message":"IMHO, it should be done in dedicated blueprint for the planner.","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3b99ef099bcfe6ae9badab1d4251e1648ecf4f89","unresolved":false,"context_lines":[{"line_number":378,"context_line":"  the `Watcher Decision Engine`_)"},{"line_number":379,"context_line":"* Add a dynamic loading of the Watcher Planner implementation (via"},{"line_number":380,"context_line":"  stevedore)"},{"line_number":381,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing scheduling"},{"line_number":382,"context_line":"  rules/policies for Actions in Watcher."},{"line_number":383,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing the flow"},{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_74cf5f29","line":381,"range":{"start_line":381,"start_character":10,"end_line":381,"end_character":21},"in_reply_to":"fa69d971_90ed6a27","updated":"2016-01-05 14:59:42.000000000","message":"Done","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"e5c345418aa64370f7feb9c6834f0f9f695ecc34","unresolved":false,"context_lines":[{"line_number":380,"context_line":"  stevedore)"},{"line_number":381,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing scheduling"},{"line_number":382,"context_line":"  rules/policies for Actions in Watcher."},{"line_number":383,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing the flow"},{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"},{"line_number":385,"context_line":"  by the `Watcher Applier`_"},{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_b01bce1a","line":383,"updated":"2016-01-04 17:19:18.000000000","message":"IMHO, this not a DSL but maybe a generic format to store any flow of actions created by the strategies.","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3b99ef099bcfe6ae9badab1d4251e1648ecf4f89","unresolved":false,"context_lines":[{"line_number":380,"context_line":"  stevedore)"},{"line_number":381,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing scheduling"},{"line_number":382,"context_line":"  rules/policies for Actions in Watcher."},{"line_number":383,"context_line":"* Find an appropriate Domain Specific Language (DSL) for describing the flow"},{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"},{"line_number":385,"context_line":"  by the `Watcher Applier`_"},{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_94d453bd","line":383,"in_reply_to":"fa69d971_b01bce1a","updated":"2016-01-05 14:59:42.000000000","message":"Done","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"e5c345418aa64370f7feb9c6834f0f9f695ecc34","unresolved":false,"context_lines":[{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"},{"line_number":385,"context_line":"  by the `Watcher Applier`_"},{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"},{"line_number":387,"context_line":"  able to read scheduling rules DSL. We may have to benchmark several existing"},{"line_number":388,"context_line":"  Rules solver implementations"},{"line_number":389,"context_line":"* Add a mapping management system between Action types and Actions"},{"line_number":390,"context_line":"  handlers. The **Watcher Actions Mapper** implementation would also be"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_d0720249","line":387,"updated":"2016-01-04 17:19:18.000000000","message":"IMHO, we will only provided a basic planner based on action priorities and later we work on a better solution. The idea of this blueprint is only to allow watcher to defined new actions.","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3b99ef099bcfe6ae9badab1d4251e1648ecf4f89","unresolved":false,"context_lines":[{"line_number":384,"context_line":"  of Actions that will be generated by the Watcher Planner and loaded"},{"line_number":385,"context_line":"  by the `Watcher Applier`_"},{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"},{"line_number":387,"context_line":"  able to read scheduling rules DSL. We may have to benchmark several existing"},{"line_number":388,"context_line":"  Rules solver implementations"},{"line_number":389,"context_line":"* Add a mapping management system between Action types and Actions"},{"line_number":390,"context_line":"  handlers. The **Watcher Actions Mapper** implementation would also be"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_545edb44","line":387,"in_reply_to":"fa69d971_d0720249","updated":"2016-01-05 14:59:42.000000000","message":"Done","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"e5c345418aa64370f7feb9c6834f0f9f695ecc34","unresolved":false,"context_lines":[{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"},{"line_number":387,"context_line":"  able to read scheduling rules DSL. We may have to benchmark several existing"},{"line_number":388,"context_line":"  Rules solver implementations"},{"line_number":389,"context_line":"* Add a mapping management system between Action types and Actions"},{"line_number":390,"context_line":"  handlers. The **Watcher Actions Mapper** implementation would also be"},{"line_number":391,"context_line":"  dynamically loaded (via stevedore)."},{"line_number":392,"context_line":"* Add a dynamic loading of Actions handlers in the Watcher Applier (via"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_f0270610","line":389,"range":{"start_line":389,"start_character":7,"end_line":389,"end_character":8},"updated":"2016-01-04 17:19:18.000000000","message":"IMHO, when we will have the schema describing the action parameters maybe we will need a mapper.","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"3b99ef099bcfe6ae9badab1d4251e1648ecf4f89","unresolved":false,"context_lines":[{"line_number":386,"context_line":"* Provide a default implementation of the `Watcher Planner`_ which would be"},{"line_number":387,"context_line":"  able to read scheduling rules DSL. We may have to benchmark several existing"},{"line_number":388,"context_line":"  Rules solver implementations"},{"line_number":389,"context_line":"* Add a mapping management system between Action types and Actions"},{"line_number":390,"context_line":"  handlers. The **Watcher Actions Mapper** implementation would also be"},{"line_number":391,"context_line":"  dynamically loaded (via stevedore)."},{"line_number":392,"context_line":"* Add a dynamic loading of Actions handlers in the Watcher Applier (via"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_7615243e","line":389,"range":{"start_line":389,"start_character":7,"end_line":389,"end_character":8},"in_reply_to":"fa69d971_f0270610","updated":"2016-01-05 14:59:42.000000000","message":"Ok, removed","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"e5c345418aa64370f7feb9c6834f0f9f695ecc34","unresolved":false,"context_lines":[{"line_number":394,"context_line":"* Integrate an existing Workflow engine which would be able to load and execute"},{"line_number":395,"context_line":"  Actions handlers according to the design of the Actions flow produced"},{"line_number":396,"context_line":"  by the Watcher Planner (i.e. what is called the `Action Plan`_)"},{"line_number":397,"context_line":"* Add a simulation phase in the Watcher Applier in order to verify that"},{"line_number":398,"context_line":"  the Actions flow can be executed without errors."},{"line_number":399,"context_line":"* Make sure errors are handled correctly whenever an Action fails during the"},{"line_number":400,"context_line":"  simulation phase or during the real execution of the Actions flow in the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa69d971_d073e213","line":397,"updated":"2016-01-04 17:19:18.000000000","message":"I agree but later :)","commit_id":"fe96199105420ca49361c99b2a55b2c478642134"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"58200f6f12de0faa832540d5aba888f8ee417739","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"You can see that there is a need in Watcher for three main phases:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* The first phase named \"**Define and instanciate Actions for Optimization**\""},{"line_number":64,"context_line":"  takes place in the Strategies of the Watcher Decision Engine: each"},{"line_number":65,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":66,"context_line":"  optimization Action types in order to achieve the goal of the `Audit`_."}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa69d971_015780ca","line":63,"range":{"start_line":63,"start_character":38,"end_line":63,"end_character":49},"updated":"2016-01-06 19:19:17.000000000","message":"nit: instantiate","commit_id":"93cb2f03ae96ce571ec211e30b9f043d084c1b03"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"1cb5a13f005dcbeaf9934a4671b279d554a85805","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"You can see that there is a need in Watcher for three main phases:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* The first phase named \"**Define and instanciate Actions for Optimization**\""},{"line_number":64,"context_line":"  takes place in the Strategies of the Watcher Decision Engine: each"},{"line_number":65,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":66,"context_line":"  optimization Action types in order to achieve the goal of the `Audit`_."}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa69d971_e6621016","line":63,"range":{"start_line":63,"start_character":38,"end_line":63,"end_character":49},"in_reply_to":"fa69d971_015780ca","updated":"2016-01-08 09:54:47.000000000","message":"Done","commit_id":"93cb2f03ae96ce571ec211e30b9f043d084c1b03"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"58200f6f12de0faa832540d5aba888f8ee417739","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* The first phase named \"**Define and instanciate Actions for Optimization**\""},{"line_number":64,"context_line":"  takes place in the Strategies of the Watcher Decision Engine: each"},{"line_number":65,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":66,"context_line":"  optimization Action types in order to achieve the goal of the `Audit`_."},{"line_number":67,"context_line":"  Those Actions are not scheduled within a timeframe at that point."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa69d971_215ac4f2","line":65,"range":{"start_line":65,"start_character":42,"end_line":65,"end_character":53},"updated":"2016-01-06 19:19:17.000000000","message":"ditto","commit_id":"93cb2f03ae96ce571ec211e30b9f043d084c1b03"},{"author":{"_account_id":19214,"name":"Vincent Mahe","email":"vincent.mahe@b-com.com","username":"vmahe35"},"change_message_id":"1cb5a13f005dcbeaf9934a4671b279d554a85805","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* The first phase named \"**Define and instanciate Actions for Optimization**\""},{"line_number":64,"context_line":"  takes place in the Strategies of the Watcher Decision Engine: each"},{"line_number":65,"context_line":"  `Strategy`_ needs to be able to use and instanciate a set of pre-defined"},{"line_number":66,"context_line":"  optimization Action types in order to achieve the goal of the `Audit`_."},{"line_number":67,"context_line":"  Those Actions are not scheduled within a timeframe at that point."},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa69d971_06664429","line":65,"range":{"start_line":65,"start_character":42,"end_line":65,"end_character":53},"in_reply_to":"fa69d971_215ac4f2","updated":"2016-01-08 09:54:47.000000000","message":"Done","commit_id":"93cb2f03ae96ce571ec211e30b9f043d084c1b03"}]}
