From fd72f6e31811b1d06be0078c46ea277b87a9fd6f Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Fri, 10 Jun 2016 14:46:30 -0700 Subject: [PATCH] Do not wait on ack in bulksync response The wait in bulkSyncNode was meant for bulkSync initiator. Not for responder. Fix the incorrect code which was also waiting unnecessarily on response which it will never get and will eventually time out. Signed-off-by: Jana Radhakrishnan --- libnetwork/networkdb/cluster.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/libnetwork/networkdb/cluster.go b/libnetwork/networkdb/cluster.go index cab55bf069..f2a5894546 100644 --- a/libnetwork/networkdb/cluster.go +++ b/libnetwork/networkdb/cluster.go @@ -434,16 +434,19 @@ func (nDB *NetworkDB) bulkSyncNode(networks []string, node string, unsolicited b return fmt.Errorf("failed to send a TCP message during bulk sync: %v", err) } - startTime := time.Now() - select { - case <-time.After(30 * time.Second): - logrus.Errorf("Bulk sync to node %s timed out", node) - case <-ch: - nDB.Lock() - delete(nDB.bulkSyncAckTbl, node) - nDB.Unlock() + // Wait on a response only if it is unsolicited. + if unsolicited { + startTime := time.Now() + select { + case <-time.After(30 * time.Second): + logrus.Errorf("Bulk sync to node %s timed out", node) + case <-ch: + nDB.Lock() + delete(nDB.bulkSyncAckTbl, node) + nDB.Unlock() - logrus.Debugf("%s: Bulk sync to node %s took %s", nDB.config.NodeName, node, time.Now().Sub(startTime)) + logrus.Debugf("%s: Bulk sync to node %s took %s", nDB.config.NodeName, node, time.Now().Sub(startTime)) + } } return nil