Browse code

Router event sends ADDED twice in violation of EventQueue semantics

Clayton Coleman authored on 2016/09/13 14:12:50
Showing 2 changed files
... ...
@@ -6,6 +6,7 @@ import (
6 6
 	"io"
7 7
 	"net"
8 8
 	"net/http"
9
+	"os"
9 10
 
10 11
 	"github.com/golang/glog"
11 12
 	"golang.org/x/net/websocket"
... ...
@@ -18,6 +19,9 @@ import (
18 18
 // to itself) if the actual default local address cannot be determined.
19 19
 func GetDefaultLocalAddress() string {
20 20
 	addr := "0.0.0.0"
21
+	if a := os.Getenv("OPENSHIFT_ROUTER_SERVER_ADDRESS"); len(a) > 0 {
22
+		return a
23
+	}
21 24
 	ip, err := util.DefaultLocalIP4()
22 25
 	if err == nil {
23 26
 		addr = ip.String()
... ...
@@ -1236,7 +1236,7 @@ Jik7E2r1/yY0MrkawljOAxisXs821kJ+Z/51Ud2t5uhGxS6hJypbGspMS7OtBbw7
1236 1236
 8oThK7cWtCXOldNF6ruqY1agWnhRdAq5qSMnuBXuicOP0Kbtx51a1ugE3SnvQenJ
1237 1237
 nZxdtYUXvEsHZC/6bAtTfNh+/SwgxQJuL2ZM+VG3X2JIKY8xTDui+il7uTh422lq
1238 1238
 wED8uwKl+bOj6xFDyw4gWoBxRobsbFaME8pkykP1+GnKDberyAM=
1239
+-----END CERTIFICATE-----
1239 1240
 -----BEGIN RSA PRIVATE KEY-----
1240 1241
 MIICWwIBAAKBgQDNAbvvqB1dcHKYVkWzC1H7fHw+5zxvecbO1Hiz6YRWbkoSIYXQ
1241 1242
 EDKb3LBXoPgYPT1grr942ZY5pNOjC77li38I2H6Pav1fqjmVX01Rx22iDuUU1yTA
... ...
@@ -1425,8 +1425,8 @@ func getRouteAddress() string {
1425 1425
 	return addr
1426 1426
 }
1427 1427
 
1428
-// generateTestEvents generates endpoint and route added test events.
1429
-func generateTestEvents(t *testing.T, fakeMasterAndPod *tr.TestHttpService, flag bool, serviceName, routeName, routeAlias string, endpoints []kapi.EndpointSubset) {
1428
+// generateEndpointEvents generates endpoint test events.
1429
+func generateEndpointEvent(t *testing.T, fakeMasterAndPod *tr.TestHttpService, flag bool, serviceName string, endpoints []kapi.EndpointSubset) {
1430 1430
 	endpointEvent := &watch.Event{
1431 1431
 		Type: watch.Added,
1432 1432
 
... ...
@@ -1438,7 +1438,18 @@ func generateTestEvents(t *testing.T, fakeMasterAndPod *tr.TestHttpService, flag
1438 1438
 			Subsets: endpoints,
1439 1439
 		},
1440 1440
 	}
1441
+	if flag {
1442
+		//clean up
1443
+		endpointEvent.Type = watch.Modified
1444
+		endpoints := endpointEvent.Object.(*kapi.Endpoints)
1445
+		endpoints.Subsets = []kapi.EndpointSubset{}
1446
+	}
1447
+
1448
+	sendTimeout(t, fakeMasterAndPod.EndpointChannel, eventString(endpointEvent), 30*time.Second)
1449
+}
1441 1450
 
1451
+// generateTestEvents generates endpoint and route added test events.
1452
+func generateTestEvents(t *testing.T, fakeMasterAndPod *tr.TestHttpService, flag bool, serviceName, routeName, routeAlias string) {
1442 1453
 	routeEvent := &watch.Event{
1443 1454
 		Type: watch.Added,
1444 1455
 		Object: &routeapi.Route{
... ...
@@ -1460,12 +1471,8 @@ func generateTestEvents(t *testing.T, fakeMasterAndPod *tr.TestHttpService, flag
1460 1460
 	if flag {
1461 1461
 		//clean up
1462 1462
 		routeEvent.Type = watch.Deleted
1463
-		endpointEvent.Type = watch.Modified
1464
-		endpoints := endpointEvent.Object.(*kapi.Endpoints)
1465
-		endpoints.Subsets = []kapi.EndpointSubset{}
1466 1463
 	}
1467 1464
 
1468
-	sendTimeout(t, fakeMasterAndPod.EndpointChannel, eventString(endpointEvent), 30*time.Second)
1469 1465
 	sendTimeout(t, fakeMasterAndPod.RouteChannel, eventString(routeEvent), 30*time.Second)
1470 1466
 }
1471 1467
 
... ...
@@ -1520,12 +1527,15 @@ func TestRouterReloadCoalesce(t *testing.T) {
1520 1520
 	endpoints := []kapi.EndpointSubset{httpEndpoint}
1521 1521
 	numRoutes := 10
1522 1522
 
1523
+	// use the same endpoints for the entire test
1524
+	generateEndpointEvent(t, fakeMasterAndPod, false, serviceName, endpoints)
1525
+
1523 1526
 	for i := 1; i <= numRoutes; i++ {
1524 1527
 		routeName := fmt.Sprintf("coalesce-route-%v", i)
1525 1528
 		routeAlias = fmt.Sprintf("www.example-coalesce-%v.test", i)
1526 1529
 
1527 1530
 		// Send the add events.
1528
-		generateTestEvents(t, fakeMasterAndPod, false, serviceName, routeName, routeAlias, endpoints)
1531
+		generateTestEvents(t, fakeMasterAndPod, false, serviceName, routeName, routeAlias)
1529 1532
 	}
1530 1533
 
1531 1534
 	// Wait for the last routeAlias to become available.
... ...
@@ -1546,7 +1556,7 @@ func TestRouterReloadCoalesce(t *testing.T) {
1546 1546
 		routeAlias = fmt.Sprintf("www.example-coalesce-%v.test", i)
1547 1547
 
1548 1548
 		// Send the cleanup events.
1549
-		generateTestEvents(t, fakeMasterAndPod, true, serviceName, routeName, routeAlias, endpoints)
1549
+		generateTestEvents(t, fakeMasterAndPod, true, serviceName, routeName, routeAlias)
1550 1550
 	}
1551 1551
 
1552 1552
 	// Wait for the first routeAlias to become unavailable.