atlanticwave-sdx / sdx-controller

Central Controller for AtlanticWave SDX.
https://www.atlanticwave-sdx.net
MIT License
1 stars 3 forks source link

wrong db key to persist connection on creation leads to overwriting existing connections #256

Closed italovalcy closed 3 months ago

italovalcy commented 3 months ago

Hi,

The way connection is being persisted seems to overwrite existing connections, because the DB key used is a constant string "connection_data": https://github.com/atlanticwave-sdx/sdx-controller/blob/main/sdx_controller/controllers/connection_controller.py#L65

I believe it should be based on connection ID instead.

$ curl -X POST http://0.0.0.0:8080/SDX-Controller/1.0.0/connection -H 'Content-Type: application/json' -d '{"id": "1", "name": "Test connection request", "start_time": "2000-01-23T04:56:07.000Z", "end_time": "2000-01-23T04:56:07.000Z", "bandwidth_required": 10, "latency_required": 300, "egress_port": {"id": "urn:sdx:port:tenet.ac.za:Tenet03:50", "name": "Tenet03:50", "node": "urn:sdx:port:tenet.ac.za:Tenet03", "status": "up"}, "ingress_port": {"id": "urn:sdx:port:ampath.net:Ampath3:50", "name": "Ampath3:50", "node": "urn:sdx:port:ampath.net:Ampath3", "status": "up"}}'
"Connection published"

$ docker exec -it mongo1t mongo --port 27027
rs0:PRIMARY> use sdx_lc
switched to db sdx_lc
rs0:PRIMARY> db["sdx_lc.sdx-controller"].find({ "connection_data": { $exists: true } })
{ "_id" : ObjectId("6616fdffa6abfd8b448e3f3f"), "connection_data" : "{\"id\": \"1\", \"name\": \"Test connection request\", \"start_time\": \"2000-01-23T04:56:07.000Z\", \"end_time\": \"2000-01-23T04:56:07.000Z\", \"bandwidth_required\": 10, \"latency_required\": 300, \"egress_port\": {\"id\": \"urn:sdx:port:tenet.ac.za:Tenet03:50\", \"name\": \"Tenet03:50\", \"node\": \"urn:sdx:port:tenet.ac.za:Tenet03\", \"status\": \"up\"}, \"ingress_port\": {\"id\": \"urn:sdx:port:ampath.net:Ampath3:50\", \"name\": \"Ampath3:50\", \"node\": \"urn:sdx:port:ampath.net:Ampath3\", \"status\": \"up\"}}" }
rs0:PRIMARY> exit

$ curl -X POST http://0.0.0.0:8080/SDX-Controller/1.0.0/connection -H 'Content-Type: application/json' -d '{"id": "2", "name": "Test connection request 22", "start_time": "2000-01-23T04:56:07.000Z", "end_time": "2000-01-23T04:56:07.000Z", "bandwidth_required": 10, "latency_required": 300, "egress_port": {"id": "urn:sdx:port:tenet.ac.za:Tenet03:50", "name": "Tenet03:50", "node": "urn:sdx:port:tenet.ac.za:Tenet03", "status": "up"}, "ingress_port": {"id": "urn:sdx:port:ampath.net:Ampath3:50", "name": "Ampath3:50", "node": "urn:sdx:port:ampath.net:Ampath3", "status": "up"}}'
"Connection published"

$ docker exec -it mongo1t mongo --port 27027
rs0:PRIMARY> use sdx_lc
switched to db sdx_lc
rs0:PRIMARY> db["sdx_lc.sdx-controller"].find({ "connection_data": { $exists: true } })
{ "_id" : ObjectId("6616fdffa6abfd8b448e3f3f"), "connection_data" : "{\"id\": \"2\", \"name\": \"Test connection request 22\", \"start_time\": \"2000-01-23T04:56:07.000Z\", \"end_time\": \"2000-01-23T04:56:07.000Z\", \"bandwidth_required\": 10, \"latency_required\": 300, \"egress_port\": {\"id\": \"urn:sdx:port:tenet.ac.za:Tenet03:50\", \"name\": \"Tenet03:50\", \"node\": \"urn:sdx:port:tenet.ac.za:Tenet03\", \"status\": \"up\"}, \"ingress_port\": {\"id\": \"urn:sdx:port:ampath.net:Ampath3:50\", \"name\": \"Ampath3:50\", \"node\": \"urn:sdx:port:ampath.net:Ampath3\", \"status\": \"up\"}}" }
sajith commented 3 months ago

Yes, agreed.