Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 17 additions & 28 deletions sdx_controller/controllers/l2vpn_controller.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import copy
import logging
import os
import uuid
Expand Down Expand Up @@ -259,8 +258,6 @@ def patch_connection(service_id, body=None): # noqa: E501

logger.info(f"Gathered connexion JSON: {new_body}")

# Get roll back connection before removing connection
rollback_conn_body = copy.deepcopy(body)
body.update(new_body)

body, _ = connection_state_machine(body, ConnectionStateMachine.State.MODIFYING)
Expand All @@ -271,6 +268,8 @@ def patch_connection(service_id, body=None): # noqa: E501

try:
logger.info("Removing connection")
# Get roll back connection before removing connection
rollback_conn_body = body
remove_conn_reason, remove_conn_code = connection_handler.remove_connection(
current_app.te_manager, service_id, "API"
)
Expand Down Expand Up @@ -320,49 +319,39 @@ def patch_connection(service_id, body=None): # noqa: E501
)
logger.info("Rolling back to old connection.")

# because above placement failed, so re-place the original connection request.

rollback_conn_body["status"] = str(ConnectionStateMachine.State.REQUESTED)
# used in lc_message_handler to count the oxp success response
rollback_conn_body["oxp_success_count"] = 0
conn_status = ConnectionStateMachine.State.UNDER_PROVISIONING
rollback_conn_body, _ = connection_state_machine(rollback_conn_body, conn_status)
if not rollback_conn_body:
response = {
"service_id": service_id,
"status": parse_conn_status(body["status"]),
"reason": f"Failure, unable to rollback to last successful L2VPN: {reason}",
}
return response, code

# because above placement failed, so re-place the original connection request.
conn_request = rollback_conn_body
conn_request["id"] = service_id

try:
rollback_conn_reason, rollback_conn_code = connection_handler.place_connection(
current_app.te_manager, conn_request
)
if rollback_conn_code // 100 != 2:
conn_status = ConnectionStateMachine.State.REJECTED
db_instance.update_field_in_json(
MongoCollections.CONNECTIONS,
service_id,
"status",
str(conn_status),
if rollback_conn_code // 100 == 2:
db_instance.add_key_value_pair_to_db(
MongoCollections.CONNECTIONS, service_id, conn_request
)
logger.info(
f"Roll back connection result: ID: {service_id} reason='{rollback_conn_reason}', code={rollback_conn_code}"
)
except Exception as e:
conn_status = ConnectionStateMachine.State.REJECTED
db_instance.update_field_in_json(
MongoCollections.CONNECTIONS,
service_id,
"status",
str(conn_status),
)
logger.info(f"Rollback failed (connection id: {service_id}): {e}")
rollback_conn_code = 500
return f"Rollback failed, reason: {e}", 500

response = {
"service_id": service_id,
"reason": f"Patch Failure,rolled back to last successful L2VPN: {rollback_conn_reason}",
"status": parse_conn_status(str(conn_status)),
"reason": f"Failure, rolled back to last successful L2VPN: {reason}",
"status": parse_conn_status(conn_request["status"]),
}
return response, rollback_conn_code
return response, code


def get_archived_connections_by_id(service_id):
Expand Down
Loading