@@ -165,7 +165,12 @@ func (ep *endpoint) addToCluster() error {
165165
166166 c := n .getController ()
167167 if ! ep .isAnonymous () && ep .Iface ().Address () != nil {
168- if err := c .agent .networkDB .CreateEntry ("endpoint_table" , n .ID (), ep .ID (), []byte (fmt .Sprintf ("%s=%s" , ep .Name (), ep .Iface ().Address ().IP ))); err != nil {
168+ if err := c .addServiceBinding (ep .svcName , ep .svcID , n .ID (), ep .ID (), ep .Iface ().Address ().IP ); err != nil {
169+ return err
170+ }
171+
172+ if err := c .agent .networkDB .CreateEntry ("endpoint_table" , n .ID (), ep .ID (), []byte (fmt .Sprintf ("%s,%s,%s,%s" , ep .Name (), ep .svcName ,
173+ ep .svcID , ep .Iface ().Address ().IP ))); err != nil {
169174 return err
170175 }
171176 }
@@ -187,6 +192,12 @@ func (ep *endpoint) deleteFromCluster() error {
187192
188193 c := n .getController ()
189194 if ! ep .isAnonymous () {
195+ if ep .Iface ().Address () != nil {
196+ if err := c .rmServiceBinding (ep .svcName , ep .svcID , n .ID (), ep .ID (), ep .Iface ().Address ().IP ); err != nil {
197+ return err
198+ }
199+ }
200+
190201 if err := c .agent .networkDB .DeleteEntry ("endpoint_table" , n .ID (), ep .ID ()); err != nil {
191202 return err
192203 }
@@ -297,47 +308,62 @@ func (n *network) handleDriverTableEvent(ev events.Event) {
297308
298309func (c * controller ) handleEpTableEvent (ev events.Event ) {
299310 var (
300- id string
311+ nid string
312+ eid string
301313 value string
302314 isAdd bool
303315 )
304316
305317 switch event := ev .(type ) {
306318 case networkdb.CreateEvent :
307- id = event .NetworkID
319+ nid = event .NetworkID
320+ eid = event .Key
308321 value = string (event .Value )
309322 isAdd = true
310323 case networkdb.DeleteEvent :
311- id = event .NetworkID
324+ nid = event .NetworkID
325+ eid = event .Key
312326 value = string (event .Value )
313327 case networkdb.UpdateEvent :
314328 logrus .Errorf ("Unexpected update service table event = %#v" , event )
315329 }
316330
317- nw , err := c .NetworkByID (id )
331+ nw , err := c .NetworkByID (nid )
318332 if err != nil {
319- logrus .Errorf ("Could not find network %s while handling service table event: %v" , id , err )
333+ logrus .Errorf ("Could not find network %s while handling service table event: %v" , nid , err )
320334 return
321335 }
322336 n := nw .(* network )
323337
324- pair := strings .Split (value , "= " )
325- if len (pair ) < 2 {
338+ vals := strings .Split (value , ", " )
339+ if len (vals ) < 4 {
326340 logrus .Errorf ("Incorrect service table value = %s" , value )
327341 return
328342 }
329343
330- name := pair [0 ]
331- ip := net .ParseIP (pair [1 ])
344+ name := vals [0 ]
345+ svcName := vals [1 ]
346+ svcID := vals [2 ]
347+ ip := net .ParseIP (vals [3 ])
332348
333349 if name == "" || ip == nil {
334350 logrus .Errorf ("Invalid endpoint name/ip received while handling service table event %s" , value )
335351 return
336352 }
337353
338354 if isAdd {
355+ if err := c .addServiceBinding (svcName , svcID , nid , eid , ip ); err != nil {
356+ logrus .Errorf ("Failed adding service binding for value %s: %v" , value , err )
357+ return
358+ }
359+
339360 n .addSvcRecords (name , ip , nil , true )
340361 } else {
362+ if err := c .rmServiceBinding (svcName , svcID , nid , eid , ip ); err != nil {
363+ logrus .Errorf ("Failed adding service binding for value %s: %v" , value , err )
364+ return
365+ }
366+
341367 n .deleteSvcRecords (name , ip , nil , true )
342368 }
343369}
0 commit comments