aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2016-11-15 12:07:53 +0000
committerStefan Hajnoczi <stefanha@redhat.com>2016-11-15 12:07:53 +0000
commit97e53cf82ca0ffa9abe2def2fabc5fc75b914d90 (patch)
treecf7ae5a896702a38881fa1b214c1eed05c7d6e7d
parent1ed9bd12c86b417669c22b4342ba27aec20c87e4 (diff)
parenta38299bf431a891c0a21a77199e7148c0983413e (diff)
downloadqemu-97e53cf82ca0ffa9abe2def2fabc5fc75b914d90.zip
qemu-97e53cf82ca0ffa9abe2def2fabc5fc75b914d90.tar.gz
qemu-97e53cf82ca0ffa9abe2def2fabc5fc75b914d90.tar.bz2
Merge remote-tracking branch 'jasowang/tags/net-pull-request' into staging
# gpg: Signature made Tue 15 Nov 2016 07:37:27 AM GMT # gpg: using RSA key 0xEF04965B398D6211 # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 215D 46F4 8246 689E C77F 3562 EF04 965B 398D 6211 * jasowang/tags/net-pull-request: docs: fix COLO architecture diagram net: fix sending of data with -net socket, listen backend net: skip virtio-net config of deleted nic's peers Message-id: 1479195830-4725-1-git-send-email-jasowang@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--docs/COLO-FT.txt72
-rw-r--r--hw/net/virtio-net.c4
-rw-r--r--net/net.c5
-rw-r--r--net/socket.c1
4 files changed, 44 insertions, 38 deletions
diff --git a/docs/COLO-FT.txt b/docs/COLO-FT.txt
index 6282938..e289be2 100644
--- a/docs/COLO-FT.txt
+++ b/docs/COLO-FT.txt
@@ -41,41 +41,43 @@ identical responses to all client requests. Once the differences in the outputs
are detected between the PVM and SVM, COLO withholds transmission of the
outbound packets until it has successfully synchronized the PVM state to the SVM.
- Primary Node Secondary Node
- +------------+ +-----------------------+ +------------------------+ +------------+
- | | | HeartBeat |<----->| HeartBeat | | |
- | Primary VM | +-----------|-----------+ +-----------|------------+ |Secondary VM|
- | | | | | |
- | | +-----------|-----------+ +-----------|------------+ | |
- | | |QEMU +---v----+ | |QEMU +----v---+ | | |
- | | | |Failover| | | |Failover| | | |
- | | | +--------+ | | +--------+ | | |
- | | | +---------------+ | | +---------------+ | | |
- | | | | VM Checkpoint |-------------->| VM Checkpoint | | | |
- | | | +---------------+ | | +---------------+ | | |
- | | | | | | | |
- |Requests<---------------------------^------------------------------------------>Requests|
- |Responses----------------------\ /--|--------------\ /------------------------Responses|
- | | | | | | | | | | | | |
- | | | +-----------+ | | | | | | | +------------+ | | |
- | | | | COLO disk | | | | | | | | | COLO disk | | | |
- | | | | Manager |-|-|--|--------------|--|->| Manager | | | |
- | | | +|----------+ | | | | | | | +-----------|+ | | |
- | | | | | | | | | | | | | | |
- +------------+ +--|------------|-|--|--+ +---|--|--------------|--+ +------------+
- | | | | | | |
- +-------------+ | +----------v-v--|--+ +---|--v-----------+ | +-------------+
- | VM Monitor | | | COLO Proxy | | COLO Proxy | | | VM Monitor |
- | | | |(compare packet) | | (adjust sequence)| | | |
- +-------------+ | +----------|----^--+ +------------------+ | +-------------+
- | | | |
- +------------------|------------|----|--+ +---------------------|------------------+
- | Kernel | | | | | Kernel | |
- +------------------|------------|----|--+ +---------------------|------------------+
- | | | |
- +--------------v+ +--------v----|--+ +------------------+ +v-------------+
- | Storage | |External Network| | External Network | | Storage |
- +---------------+ +----------------+ +------------------+ +--------------+
+ Primary Node Secondary Node
++------------+ +-----------------------+ +------------------------+ +------------+
+| | | HeartBeat +<----->+ HeartBeat | | |
+| Primary VM | +-----------+-----------+ +-----------+------------+ |Secondary VM|
+| | | | | |
+| | +-----------|-----------+ +-----------|------------+ | |
+| | |QEMU +---v----+ | |QEMU +----v---+ | | |
+| | | |Failover| | | |Failover| | | |
+| | | +--------+ | | +--------+ | | |
+| | | +---------------+ | | +---------------+ | | |
+| | | | VM Checkpoint +-------------->+ VM Checkpoint | | | |
+| | | +---------------+ | | +---------------+ | | |
+|Requests<--------------------------\ /-----------------\ /--------------------->Requests|
+| | | ^ ^ | | | | | | |
+|Responses+---------------------\ /-|-|------------\ /-------------------------+Responses|
+| | | | | | | | | | | | | | | |
+| | | +-----------+ | | | | | | | | | | +----------+ | | |
+| | | | COLO disk | | | | | | | | | | | | COLO disk| | | |
+| | | | Manager +---------------------------->| Manager | | | |
+| | | ++----------+ v v | | | | | v v | +---------++ | | |
+| | | |+-----------+-+-+-++| | ++-+--+-+---------+ | | | |
+| | | || COLO Proxy || | | COLO Proxy | | | | |
+| | | || (compare packet || | |(adjust sequence | | | | |
+| | | ||and mirror packet)|| | | and ACK) | | | | |
+| | | |+------------+---+-+| | +-----------------+ | | | |
++------------+ +-----------------------+ +------------------------+ +------------+
++------------+ | | | | +------------+
+| VM Monitor | | | | | | VM Monitor |
++------------+ | | | | +------------+
++---------------------------------------+ +----------------------------------------+
+| Kernel | | | | | Kernel | |
++---------------------------------------+ +----------------------------------------+
+ | | | |
+ +--------------v+ +---------v---+--+ +------------------+ +v-------------+
+ | Storage | |External Network| | External Network | | Storage |
+ +---------------+ +----------------+ +------------------+ +--------------+
+
== Components introduction ==
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 06bfe4b..77a4fae 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -508,6 +508,10 @@ static void virtio_net_set_queues(VirtIONet *n)
int i;
int r;
+ if (n->nic->peer_deleted) {
+ return;
+ }
+
for (i = 0; i < n->max_queues; i++) {
if (i < n->curr_queues) {
r = peer_attach(n, i);
diff --git a/net/net.c b/net/net.c
index ec984bf..939fe31 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1653,9 +1653,8 @@ int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size)
if (rs->index >= rs->packet_len) {
rs->index = 0;
rs->state = 0;
- if (rs->finalize) {
- rs->finalize(rs);
- }
+ assert(rs->finalize);
+ rs->finalize(rs);
}
break;
}
diff --git a/net/socket.c b/net/socket.c
index 982c8de..fe3547b 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -511,6 +511,7 @@ static int net_socket_listen_init(NetClientState *peer,
s->fd = -1;
s->listen_fd = ret;
s->nc.link_down = true;
+ net_socket_rs_init(&s->rs, net_socket_rs_finalize);
qemu_set_fd_handler(s->listen_fd, net_socket_accept, NULL, s);
qapi_free_SocketAddress(saddr);