"vnctl interface add" should be rolled back on errors
Opened this issue · 0 comments
miz-axsh commented
vnctl interface add
command with duplicated port-name
parameter inserts incomplete data into the database. The series of INSERT
statements should be done in one transaction, and should be rolled back on errors.
Example:
# vnctl interfaces add \
--uuid=if-inst1x \
--mode=vif \
--owner-datapath-uuid=dp-dp01 \
--mac-address 10:54:ff:00:00:01 \
--network-uuid=nw-test1 \
--ipv4-address=10.100.0.10 \
--port-name=inst1 # ← inst1
# vnctl interfaces add \
--uuid=if-inst2x \
--mode=vif \
--owner-datapath-uuid=dp-dp01 \
--mac-address 10:54:ff:00:00:02 \
--network-uuid=nw-test1 \
--ipv4-address=10.100.0.11 \
--port-name=inst1 # ← mistake: violates uniqueness
---
:error: Sequel::UniqueConstraintViolation
:message: 'Mysql2::Error: Duplicate entry ''inst1-1-1-0'' for key ''port_name'''
:code: 500
got an error, because port-name
is duplicated.
mysql> SELECT uuid FROM interfaces;
+--------+
| uuid |
+--------+
| inst1x |
| inst2x |
+--------+
mysql> SELECT port_name FROM interface_ports;
+-----------+
| port_name |
+-----------+
| inst1 |
+-----------+
in spite of the error, new record was inserted into the interfaces
table.
# vnctl interfaces add \
--uuid=if-inst2x \
--mode=vif \
--owner-datapath-uuid=dp-dp01 \
--mac-address 10:54:ff:00:00:02 \
--network-uuid=nw-test1 \
--ipv4-address=10.100.0.11 \
--port-name=inst2 # now corrected
---
:error: Vnet::Endpoints::Errors::DuplicateUUID
:message: if-inst2x
:code: '102'
tried again with corrected port-name
, still get error because of the inserted record.