ソースを参照

cmd/stdiscosrv: Slightly tweak replication settings

Jakob Borg 2 年 前
コミット
4f6b86a1c0
1 ファイル変更12 行追加3 行削除
  1. 12 3
      cmd/stdiscosrv/replication.go

+ 12 - 3
cmd/stdiscosrv/replication.go

@@ -19,8 +19,11 @@ import (
 	"github.com/syncthing/syncthing/lib/protocol"
 )
 
-const replicationReadTimeout = time.Minute
-const replicationHeartbeatInterval = time.Second * 30
+const (
+	replicationReadTimeout       = time.Minute
+	replicationWriteTimeout      = 30 * time.Second
+	replicationHeartbeatInterval = time.Second * 30
+)
 
 type replicator interface {
 	send(key string, addrs []DatabaseAddress, seen int64)
@@ -68,6 +71,12 @@ func (s *replicationSender) Serve(ctx context.Context) error {
 		conn.Close()
 	}()
 
+	// The replication stream is not especially latency sensitive, but it is
+	// quite a lot of data in small writes. Make it more efficient.
+	if tcpc, ok := conn.NetConn().(*net.TCPConn); ok {
+		_ = tcpc.SetNoDelay(false)
+	}
+
 	// Get the other side device ID.
 	remoteID, err := deviceID(conn)
 	if err != nil {
@@ -116,7 +125,7 @@ func (s *replicationSender) Serve(ctx context.Context) error {
 			binary.BigEndian.PutUint32(buf, uint32(n))
 
 			// Send
-			conn.SetWriteDeadline(time.Now().Add(5 * time.Second))
+			conn.SetWriteDeadline(time.Now().Add(replicationWriteTimeout))
 			if _, err := conn.Write(buf[:4+n]); err != nil {
 				replicationSendsTotal.WithLabelValues("error").Inc()
 				log.Println("Replication write:", err)