<div dir="ltr">><span style="font-size:12.8px">a) Deleting network's last segment will be prevented. Every network should </span><span style="font-size:12.8px">have at least one segment to let the port to bind.</span><br style="font-size:12.8px"><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">This seems a bit arbitrary to me. If a segment is limited to a small part of the datacenter, it being able to bind for one section of the datacenter and not the rest is not much different than being able to bind from no sections. Just allow it to be deleted because we need to have logic to deal with the unbindable port case anyway. Especially since it's a racy check that is hard to get correct for little gain.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">></span><span style="font-size:12.8px">b) Deleting the segment that has been associated with subnet will be </span><span style="font-size:12.8px">prevented.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">+1</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">>c) Deleting the segment that has been bound to port will be prevented.</span><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">+1.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">></span><span style="font-size:12.8px">d) Based on c), we need to query ml2_port_binding_levels, I think </span><span style="font-size:12.8px">neutron.plugins.ml2.models.</span><span style="font-size:12.8px">PortBindingLevel should be moved out of ml2. </span><span style="font-size:12.8px">This is also because port and segment are both neutron server resources, </span><span style="font-size:12.8px">no need to keep PortBindingLevel at ml2.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">There are things in this model that make sense only to ML2 (level and driver), especially since ML2 allows a single port_id to appear multiple times in the table (primary key is port_id + level).  To achieve your goals in 'C' above, just emit a BEFORE_DELETE event in the callback registry for segments. Then ML2 can query this table with a registered callback and other plugins can register a callback to prevent this however they want.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">However, be sure to ignore the DHCP port when preventing segment deletion otherwise having DHCP enabled will make it difficult to get rid of a segment.</span><span style="font-size:12.8px"><br></span></div><div><br></div><div><span style="font-size:12.8px">></span><span style="font-size:12.8px">e) Is it possible to update a segment(physical_network, segmentation_id, </span><span style="font-size:12.8px">or even network_type), when the segment is being used?</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">I would defer this for future work and not allow it for now. If the segment details change, we need to ask the drivers responsible for every bound port to make they can support it under the new conditions. It will be quite a bit of logic to deal with that I don't think we need to support up front.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 17, 2016 at 8:39 AM, Hong Hui Xiao <span dir="ltr"><<a href="mailto:xiaohhui@cn.ibm.com" target="_blank">xiaohhui@cn.ibm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I create this patch [1] to allow multi-segmented routed provider networks<br>
to grow and shrink over time, reviews are welcomed. I found these points<br>
during working on the patch, and I think it is good to bring them out for<br>
discussion.<br>
<br>
a) Deleting network's last segment will be prevented. Every network should<br>
have at least one segment to let the port to bind.<br>
<br>
b) Deleting the segment that has been associated with subnet will be<br>
prevented.<br>
<br>
c) Deleting the segment that has been bound to port will be prevented.<br>
<br>
d) Based on c), we need to query ml2_port_binding_levels, I think<br>
neutron.plugins.ml2.models.PortBindingLevel should be moved out of ml2.<br>
This is also because port and segment are both neutron server resources,<br>
no need to keep PortBindingLevel at ml2.<br>
<br>
e) Is it possible to update a segment(physical_network, segmentation_id,<br>
or even network_type), when the segment is being used?<br>
<br>
[1] <a href="https://review.openstack.org/#/c/317358" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/317358</a><br>
<br>
HongHui Xiao(肖宏辉)<br>
<br>
<br>
<br>
From:   Carl Baldwin <<a href="mailto:carl@ecbaldwin.net">carl@ecbaldwin.net</a>><br>
To:     OpenStack Development Mailing List<br>
<<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
Date:   05/12/2016 23:36<br>
Subject:        [openstack-dev] [Neutron][ML2][Routed Networks]<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
Hi,<br>
<br>
Segments are now a first class thing in Neutron with the merge of this<br>
patch [1].  It exposes API for segments directly.  With ML2, it is<br>
currently only possible to view segments that have been created<br>
through the provider net or multi-provider net extensions.  This can<br>
only be done at network creation time.<br>
<br>
In order to allow multi-segmented routed provider networks to grow and<br>
shrink over time, it is necessary to allow creation and deletion of<br>
segments through the new segment endpoint.  Hong Hui Xiao has offered<br>
to help with this.<br>
<br>
We need to provide the integration between the service plugin that<br>
provides the segments endpoint with ML2 to allow the creates and<br>
deletes to work properly.  We'd like to here from ML2 experts out<br>
there on how this integration can proceed.  Is there any caution that<br>
we need to take?  What are the non-obvious aspects of this that we're<br>
not thinking about?<br>
<br>
Carl Baldwin<br>
<br>
[1] <a href="https://review.openstack.org/#/c/296603/" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/296603/</a><br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
<br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br></div>