14:49:55 <alagalah> #startmeeting PolicyArch Mickey's notes 14:49:55 <odl_meetbot> Meeting started Sat Apr 26 14:49:55 2014 UTC. The chair is alagalah. Information about MeetBot at http://ci.openstack.org/meetbot.html. 14:49:55 <odl_meetbot> Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 14:49:55 <odl_meetbot> The meeting name has been set to 'policyarch_mickey_s_notes' 14:50:01 <alagalah> 14:50:01 <alagalah> #info Mike Dvorkin 14:50:01 <alagalah> #info Keith Burns 14:50:03 <alagalah> #info Rob Adams 14:50:04 <alagalah> #info Daljeet Singh 14:50:06 <alagalah> #info HP 14:50:08 <alagalah> #info Dan Conde 14:50:10 <alagalah> #info Jan Medved 14:50:12 <alagalah> #info Abhishek 14:50:14 <alagalah> #info Chris Price 14:50:16 <alagalah> #info Mickey Spiegel 14:50:19 <alagalah> #info Ryan Moats 14:50:20 <alagalah> #info Mickey’s intro 14:50:23 <alagalah> #topic Components, high-level flows 14:50:24 <alagalah> #info Jan requests use cases 14:50:27 <alagalah> #info Mike draws Policy Repo and EP Reg / Mapper and Enforcement Exception Repository and Ops State 14:50:29 <alagalah> #info Renderers below 14:50:30 <alagalah> #info Renderers resolve, checks out policies from 14:50:33 <alagalah> #info Theoretically, this guy can declare endpoints, plus resolve 14:50:34 <alagalah> #info Jan asks under what conditions declare endpoints? 14:50:37 <alagalah> #info Mickey notes discovery of an endpoint 14:50:38 <alagalah> #info Jan mentions EP Registry Mapper, other inputs 14:50:40 <alagalah> #info Chris notes as long as same xxx, good 14:50:42 <alagalah> #info Mike notes can be posting can be part of renderer or not, does not have to be 14:50:46 <alagalah> #info For the sake of discussion, say it has to be 14:50:47 <alagalah> #info Renderer can post enforcement exceptions 14:50:48 <alagalah> #info I could not render something 14:50:51 <alagalah> #info Exception 14:50:53 <alagalah> #info Not rendering to the full gravity of what is defined by the policy 14:50:55 <alagalah> #info Jan asks in database, searchable? 14:50:57 <alagalah> #info Mickey assumes not any object anywhere can have exceptions, but at certain places, this is working or not 14:50:59 <alagalah> #info Jan asks if post exceptions to operator 14:51:00 <alagalah> #info Mike notes talking about how renderer interacts with components 14:51:02 <alagalah> #info Renderer updates state 14:51:04 <alagalah> #info Chris … 14:51:06 <alagalah> #info Mike notes to him enforcement exceptions and op state are related 14:51:09 <alagalah> #info One xxx 14:51:10 <alagalah> #info Other can come up with scores, this is my utilization 14:51:14 <alagalah> #info We have this kind of capacity 14:51:14 <alagalah> #info Measures behavior, not enforcement 14:51:17 <alagalah> #info If I ask to do something, gave you a price 14:51:18 <alagalah> #info How well do I fulfill this price? 14:51:20 <alagalah> #info Different xxx, specify how to count things, express in normalized ways 14:51:22 <alagalah> #info Jan notes exception needs access to policy definitions, need to know when an exception, not rendered properly 14:51:26 <alagalah> #info Mike would much rather not 14:51:28 <alagalah> #info Jan asks how to know exceptions occur? 14:51:28 <alagalah> #info Chris would render network, then put triggers within Ops State that would invoke exceptions 14:51:31 <alagalah> #info Mike notes no way to enforce QoS, exception 14:51:32 <alagalah> #info Chris Price notes lower bound for operational state, defines when exception occurs 14:51:35 <alagalah> #info Would Ops State monitor that, or replicate somewhere? 14:51:36 <alagalah> #info Mike notes fine line, depends on what you mean 14:51:39 <alagalah> #info Ops State is derivative of actual state underneath 14:51:41 <alagalah> #info Might have port that is misbehaving, affects behavior of my endpoint 14:51:42 <alagalah> #info Ops State stuff measures that 14:51:46 <alagalah> #info Jan asks for example, contract definition, what state if not rendered properly, what gets injected into Ops State 14:51:47 <alagalah> #info Mike notes if render contract, you cannot enforce something, have to report to exception repository 14:51:49 <alagalah> #info QoS super duper high priority 14:51:50 <alagalah> #info Cannot do for some reason, raise an exception 14:51:53 <alagalah> #info Say mechanism cannot enforce conditions on endpoints because implemented in ASICs, not enough CAM size 14:51:56 <alagalah> #info Relaxing constraint, have to report an exception 14:51:56 <alagalah> #info Jan asks if data model related to policy? 14:51:58 <alagalah> #info Mike wants to make it generic 14:52:01 <alagalah> #info Jan notes have to have exception, cannot enforce contract 14:52:04 <alagalah> #info Mike notes full discussion dedicated to these two 14:52:05 <alagalah> #info Jan’s reason for the question is to figure out, map out data models, data flows 14:52:06 <alagalah> #info Mike draws URI of the affected policy construct 14:52:09 <alagalah> #info URI of the EP 14:52:10 <alagalah> #info “exception description” 14:52:13 <alagalah> #info “probably cause” 14:52:15 <alagalah> #info “severity” 14:52:16 <alagalah> #info “affect on xxx” 14:52:19 <alagalah> #info Measurement of completion 14:52:20 <alagalah> #info Chris Price asks about interaction with consumer? 14:52:23 <alagalah> #info Mike notes URIs 14:52:25 <alagalah> #info If look at policy, know which exceptions are in scope, based on URI 14:52:27 <alagalah> #info Chris Price claims should not deploy, cannot fulfill 14:52:28 <alagalah> #info Mike wants to avoid order of operation issues, have to delete something before you create something 14:52:31 <alagalah> #info Mike claims problem, what if 15 endpoints, for next one that showed up 15 minutes later, you can’t? 14:52:34 <alagalah> #info Raise an exception 14:52:34 <alagalah> #info Feeds into placement engine 14:52:36 <alagalah> #info Because of that, want to move endpoint somewhere else 14:52:38 <alagalah> #info Oftentimes you don’t control where you place endpoints 14:52:41 <alagalah> #info Scheduler sitting on top 14:52:42 <alagalah> #info Cannot move endpoints ourselves, have to give feedback to system on top that makes placement decisions 14:52:44 <alagalah> #info Exceptions are persistent for as long as conditions exist 14:52:46 <alagalah> #info Move it to history 14:52:48 <alagalah> #info Daljeet asks how policy changes are propagated to renderers? 14:52:51 <alagalah> #info Mike notes you subscribe, linear subscription 14:52:53 <alagalah> #info Whenever policy changes, get updated 14:52:55 <alagalah> #info This is why MD-SAL seems like a very good fit 14:52:56 <alagalah> #info Jan claims same pattern for exceptions 14:52:58 <alagalah> #info Mike notes except data is not trees 14:53:00 <alagalah> #info Jan counters, can put in a tree 14:53:03 <alagalah> #info Mike agrees, though a very shallow tree 14:53:06 <alagalah> #info Mike notes might be some other applications interested in this 14:53:07 <alagalah> #info What they do, how they alter policy, we cannot predict that, have to provide framework for that 14:53:08 <alagalah> #info Jan notes that is pubsub 14:53:10 <alagalah> #info Jan brings up, perhaps don’t address that, identifiers may or may not be URIs 14:53:13 <alagalah> #info Internally if Java to Java components, instance identifiers 14:53:15 <alagalah> #info Have solution for that 14:53:16 <alagalah> #info Mike notes logically everything is a URI 14:53:19 <alagalah> #info Mike loves consistent identifiers, hate duality, causes schizophrenia 14:53:20 <alagalah> #info Talking about behaviors versus implementation 14:53:24 <alagalah> #info Jan notes do not want to be just accessing this through REST APIs 14:53:24 <alagalah> #info Mike counters, you can subscribe to it, already agreed 14:53:27 <alagalah> #info Jan notes APIs you subscribe to, does not matter if came to it from REST or something else 14:53:28 <alagalah> #info Mike notes subscribe to certain sets of data within certain scopes 14:53:30 <alagalah> #info Jan hates duality too 14:53:33 <alagalah> #info When get that event, looks the same to you 14:53:35 <alagalah> #info Mike claims URIs are very important, know all of a sudden in the scope of a certain subtree, all of a sudden subject to notification 14:53:37 <alagalah> #info Jan claimed solved with yang tools 14:53:39 <alagalah> #info Mike claims flat data set, do not want to recreate another tree, cost will be staggering 14:53:40 <alagalah> #info Mike draws Exception Repo with objects underneath, without further structure 14:53:42 <alagalah> #info Treating things as URI, tells you position on the tree 14:53:44 <alagalah> #info Being able to filter on that 14:53:46 <alagalah> #info Question how to model URI, does not have to be string 14:53:48 <alagalah> #info Ryan claims everything has to be a URI rather than string 14:53:50 <alagalah> #info Mike notes URI identifies path on the tree, combination of LRIs 14:53:52 <alagalah> #info Mickey asks if using URI synonymous with Distinguished Name? 14:53:55 <alagalah> #info Yes 14:53:57 <alagalah> #info Daljeet asks when endpoints go away, what is flow? 14:53:58 <alagalah> #info Mike notes whoever posts the endpoint, withdraws the endpoint 14:54:00 <alagalah> #info Believe in REST, only two operations, POST and GET 14:54:03 <alagalah> #info POST can be obliteration 14:54:04 <alagalah> #info Ryan asks if Mike wants to reconsider that? 14:54:07 <alagalah> #info Does not like POST obliterations 14:54:08 <alagalah> #info Mike does not like to distinguish between PUT and DELETE 14:54:10 <alagalah> #info Keith notes one is idempotent, another isn’t 14:54:12 <alagalah> #info Ryan can buy GET and POST on a collection 14:54:14 <alagalah> #info On an element, really want GET, PUT, and DELETE 14:54:16 <alagalah> #info Don’t want to POST an element 14:54:18 <alagalah> #info Implies creating something under the element, not an element anymore, a collection 14:54:21 <alagalah> #info Mike thinks everything is an object, don’t think about collections at all 14:54:22 <alagalah> #info REST as tree of objects, containment 14:54:25 <alagalah> #info Ryan notes as soon as I move off the leaf level of your tree, what do I have? 14:54:27 <alagalah> #info A collection 14:54:28 <alagalah> #info Mike notes to delete subtree, delete subtree node root 14:54:31 <alagalah> #info Everything underneath disappears, by the rules of containment 14:54:33 <alagalah> #info That is how policy management systems work 14:54:34 <alagalah> #info Specify subtrees, remove subtrees 14:54:36 <alagalah> #info Ryan notes if do delete on collection via POST, that is an absolute nightmare in terms of coding 14:54:38 <alagalah> #info Same request operation is create and delete, give coders enough rope to load gun, hand xxx, pull trigger 14:54:40 <alagalah> #info Rob notes already a definition of RESTCONF in MD-SAL, verbs will work 14:54:42 <alagalah> #info If we want to argue how MD-SAL works, can take that into a different conversation 14:54:44 <alagalah> #info Jan notes containment does not really work if a flat database in exceptions, and have got URIs 14:54:46 <alagalah> #info Mike claims responsibility of renderer, if something goes away, knows which exceptions are out of scope, responsibility to remove it 14:54:48 <alagalah> #info Have URI, implies a tree 14:54:50 <alagalah> #info Rob notes flat in the sense of yang list of exceptions 14:54:52 <alagalah> #info Exception indexed by URI 14:54:54 <alagalah> #info Jan notes boils down to slightly different mechanism than deleting node, data store, somebody in infrastructure deleting subnodes 14:54:57 <alagalah> #info Here application has to go apply the filter 14:54:58 <alagalah> #info Mike claims that is one of the requirements we have 14:55:00 <alagalah> #info Filter is on a tree 14:55:02 <alagalah> #info Here your tree is still honored, except don’t have explicit tree, putting in there (exceptions) is overkill 14:55:04 <alagalah> #info Jan claims two mechanisms, one in infrastructure, the other in application where you have to apply filters 14:55:06 <alagalah> #info Jan is OK if want to do it in the application 14:55:08 <alagalah> #info Mike counters, argument whether done in application or not, driven by fact that you have to meet certain scalability 14:55:11 <alagalah> #info EP Registry needs to be superfast 14:55:12 <alagalah> #info Can create trees all we want, if not fast, will not work 14:55:15 <alagalah> #info If takes 20 minutes to create policy for an endpoint, does not work 14:55:17 <alagalah> #info If can avoid creating additional objects, will run faster 14:55:18 <alagalah> #info Avoid creating unnecessary things, in the name of efficiency 14:55:20 <alagalah> #info … 14:55:23 <alagalah> #info Rob notes need fast data store 14:55:24 <alagalah> #info Jan asks what is in Ops State at a high level? 14:55:27 <alagalah> #info Someone says stats 14:55:28 <alagalah> #info Mike does not like that 14:55:31 <alagalah> #info The way he thinks about this, rather than specifying precise statistics, should concentrate on health scores 14:55:33 <alagalah> #info Already have detailed instrumentation of these things 14:55:35 <alagalah> #info Don’t want to replicate, Group-Based Policy replicate everything in the world 14:55:36 <alagalah> #info Health Score 14:55:39 <alagalah> #info Capacity Score 14:55:40 <alagalah> #info Security Score 14:55:42 <alagalah> #info Utilization 14:55:44 <alagalah> #info Whatever else 14:55:46 <alagalah> #info Normalized scores, measured as scalars, 1 to 100 14:55:49 <alagalah> #info Jan asks for policies, rendered objects? 14:55:50 <alagalah> #info Mike notes context scope of URI of affected policy construct, and URI of endpoint 14:55:53 <alagalah> #info Jan summarizes, scores for policy and endpoints? 14:55:55 <alagalah> #info Mike notes intersection of both 14:55:57 <alagalah> #info Might have one general to endpoint, one general to policy only 14:55:59 <alagalah> #info Jan notes who creates this has to understand both policy and endpoints 14:56:01 <alagalah> #info Rob claims generic view into state of renderer 14:56:03 <alagalah> #info Exception repository is compliance score 14:56:04 <alagalah> #info Abstraction of state expressed with a complete lack of detail 14:56:06 <alagalah> #info Idea is later on know how things map to concrete models, which is a separate activity 14:56:08 <alagalah> #info Can retrieve, actually show what is going on 14:56:10 <alagalah> #info Ryan asks, score is abstractional scalar with no detail? 14:56:13 <alagalah> #info Pick a random number between 90 and 100? 14:56:15 <alagalah> #info Mike claims one way to understand health score, if object with 20 faults with certain severity, sum up, come up with a score called health score 14:56:16 <alagalah> #info Look at thermals, those things result in threshold crossing alerts 14:56:19 <alagalah> #info Sum up, environmental score (not saying we need that) 14:56:20 <alagalah> #info Rob suggests health of most severe fault 14:56:22 <alagalah> #info (Sometimes that works, sometimes not) 14:56:24 <alagalah> #info Rob wonders how to click on it, figure out 14:56:26 <alagalah> #info Mike notes have to figure out 14:56:28 <alagalah> #info At this point, concrete models are sparse 14:56:30 <alagalah> #info The idea is if renderer renders down to a concrete substrate, his responsibility to have some kind of map 14:56:34 <alagalah> #info Rob asks how renderer exposes concrete state to somewhere? 14:56:34 <alagalah> #info Mike notes in ACI, set of mapping tables, where you have a policy, know where applied, on whose behalf, also know concrete model on boxes, point to concrete xxx on something, low level stuff 14:56:37 <alagalah> #info How mapped to ASICs 14:56:39 <alagalah> #info We need to decide how far to take this 14:56:40 <alagalah> #info Rob notes could have something where renderer exposes opaque object through operational state, plugin on north side 14:56:44 <alagalah> #info Daljeet asks, tweek back to required state? Feedback loops? 14:56:44 <alagalah> #info Rob claims everything in the system is various feedback loops of different sizes 14:56:46 <alagalah> #info Dan asks how to normalize? 14:56:48 <alagalah> #info Mike notes something we have to decide 14:56:53 <alagalah> #info In more complex scenarios, end up with, if fault leaked to somebody else, have propagation and xxx issues 14:56:53 <alagalah> #info Daljeet asks if thrashing issues, programming TCAM 10 times a second? 14:56:55 <alagalah> #info Keith counters, implementation detail 14:56:57 <alagalah> #info Rob notes if performance of this system is such that we are thrashing, that is awesome 14:56:58 <alagalah> #info Keith notes most important thing is each of those scores does not get calculated in the same way 14:57:00 <alagalah> #info Distribution, weights 14:57:05 <alagalah> #info Key thing is to look at frequency of distribution, xxx, data points that make up scores, sensible formulas 14:57:06 <alagalah> #info Mickey asks if we should say something about northbound, interaction with customers? 14:57:07 <alagalah> #info Keith notes all RESTCONF 14:57:09 <alagalah> #info Mike notes you POST policies, RETR policies 14:57:10 <alagalah> #info Ryan notes RESTCONF is OK except in places where RESTCONF isn’t 14:57:14 <alagalah> #info Mike asks what Ryan would propose using 14:57:14 <alagalah> #info Ryan puts his finger on the Neutron question 14:57:16 <alagalah> #info Unless you are talking about pulling RESTCONF into the Neutron plugin for ODL, that is a whole different setup 14:57:18 <alagalah> #info Mike notes either solve as a mediation problem or a translation problem 14:57:22 <alagalah> #info Mike notes Neutron policy model renders directly, subset of ODL’s group-based policy model, just syntactic transformation, essentially a pass through 14:57:22 <alagalah> #info Jan claims can be totally automated 14:57:24 <alagalah> #info Mike notes trouble when have to start doing semantic transformation 14:57:26 <alagalah> #info GBP in OpenStack follows the same 14:57:29 <alagalah> #info Rob notes when north of us, need to be using model, cannot have northbound interface … 14:57:31 <alagalah> #info Southbound you can translate, northbound you can’t 14:57:32 <alagalah> #info Mike wants to normalize constraints 14:57:35 <alagalah> #info Jan summarizes, southbound is in scope, have renderers 14:57:37 <alagalah> #info northbound, … 14:57:38 <alagalah> #info In other projects, people too bound to JSON, percolating through the whole thing 14:57:40 <alagalah> #info Mike notes just an interface, once have information model, can always generate another 14:57:43 <alagalah> #info Jan notes lots don’t understand, have information model, generate NB/SB, everything 14:57:45 <alagalah> #info Ryan claims JSON is not an interface, it is an encoding 14:57:46 <alagalah> #info Mike agrees, a data format encoding 14:57:49 <alagalah> #info Jan, which is defined by the interface 14:57:50 <alagalah> #info Enforcement exceptions, retrieve and notifications 14:57:52 <alagalah> #info Jan asks what interactions with topology, etc? 14:57:54 <alagalah> #info Mike says up to the renderer, that is the smart guy 14:57:57 <alagalah> #info These guys (above) are idiotic 14:57:58 <alagalah> #info Renderer looks at topology, talks to OpenFlow, etc 14:58:01 <alagalah> #info Jan asks 3 or 4 different renderers? 14:58:02 <alagalah> #info Mickey notes candidate list, have at least 4 or 5 14:58:04 <alagalah> #info Which ones become real, depends who volunteers for what 14:58:06 <alagalah> #action Keith notes current state of renderer, identified 4 key ones to go after 14:58:08 <alagalah> #action Rob and Keith will pick one to do strawman 14:58:11 <alagalah> #action Meetings on hold until something to show 14:58:12 <alagalah> #info Trying to break ground 14:58:14 <alagalah> #info Rob would much rather refactor code than argue endlessly 14:58:16 <alagalah> #info Jan notes will not get everything with OVSDB that you need 14:58:20 <alagalah> #action Keith thinks between OVSDB and OpenFlow 14:58:20 <alagalah> #info Mike wonders if have to have both 14:58:22 <alagalah> #info Mickey notes Dave Lenrow asked about service chaining 14:58:24 <alagalah> #info Mike wants to do that in the model 14:58:26 <alagalah> #info Keep things relatively simple to agree on concepts, then add more concepts 14:58:28 <alagalah> #info Jan notes service chaining project being proposed 14:58:30 <alagalah> #info Should reuse APIs that they propose for that project 14:58:32 <alagalah> #info Mike notes define policies, either done through rendering 14:58:34 <alagalah> #info Chris Price thinks renderer should make decision how much to reuse 14:58:37 <alagalah> #info Jan thinks should be able to use both at the same time 14:58:38 <alagalah> #info Chris Price has concerns about renderer strategy, difficult to leverage other capabilities of the controller if just cut through 14:58:40 <alagalah> #info Mike notes renderers can entangle each other 14:58:42 <alagalah> #info Chris Price worries about how many entities to create 14:58:44 <alagalah> #info Chris Price asks about post to policy, how to select which renderer to use? 14:58:46 <alagalah> #info Mike replies TBD 14:58:48 <alagalah> #info Should not depend on the policy, should depend on the network 14:58:51 <alagalah> #info Mike thinks it depends which endpoint 14:58:52 <alagalah> #info If endpoint, intentionally tried to avoid discussion how endpoint ends up there 14:58:54 <alagalah> #info If know which group endpoint belongs to 14:58:57 <alagalah> #info Based which group maps to, know which enforcement domain you are part of 14:58:58 <alagalah> #info Jan suggests need some sort of locator service 14:59:00 <alagalah> #info Thing is endpoints are connected to switches or nodes that you need to program in the renderer 14:59:03 <alagalah> #info Mike claims renderer has a domain that it belongs to, not just technology, sets of things 14:59:04 <alagalah> #info Jan thinks we need to go into detail, these are part of other projects 14:59:07 <alagalah> #info Needs to be hashed out 14:59:08 <alagalah> #info If do things right, can create reusable components, not just for policy, or reuse something in other projects 14:59:10 <alagalah> #info Keep in mind as well 14:59:13 <alagalah> #info Look also what other guys are doing 14:59:15 <alagalah> #info Locator service 14:59:16 <alagalah> #info Assemblance of endpoint registry 14:59:18 <alagalah> #info Service chaining 14:59:21 <alagalah> #info All being done in different projects 14:59:23 <alagalah> #info Mike understands 14:59:24 <alagalah> #info This will be an extension of what they are doing with LISP, for all purposes, concept borrowed from LISP 14:59:27 <alagalah> #info Jan claims that is how service chaining guys are thinking as well 14:59:28 <alagalah> #info Rob notes no locators in our database 14:59:31 <alagalah> #info Jan claims in LISP there is 14:59:33 <alagalah> #info Mike notes conceptually they are similar 14:59:34 <alagalah> #info Logical constructs 14:59:36 <alagalah> #info We will solve it, keep to rendering discussion 14:59:38 <alagalah> 14:59:41 <alagalah> 14:59:43 <alagalah> 14:59:44 <alagalah> 14:59:46 <alagalah> 14:59:48 <alagalah> 14:59:50 <alagalah> 14:59:53 <alagalah> 14:59:54 <alagalah> 14:59:56 <alagalah> 14:59:59 <alagalah> 15:00:01 <alagalah> 15:00:04 <alagalah> 15:00:05 <alagalah> 15:00:07 <alagalah> 15:00:09 <alagalah> 15:00:11 <alagalah> 15:00:13 <alagalah> 15:00:15 <alagalah> 15:00:16 <alagalah> 15:00:19 <alagalah> #endmeeting