Implement incoming rate limit (fixes #613)

This commit is contained in:
Jakob Borg committed 2014-09-08 17:25:55 +02:00
1 parent baf8a63121
commit 6e8272f78f
7 files changed
+58 -17

No files matched your search

+1 -1
View File
@@ -92,7 +92,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["img/logo-text-64.png"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["index.html"] = bs
+24
View File
@@ -0,0 +1,24 @@
// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
// All rights reserved. Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
package main
import (
"io"
"github.com/juju/ratelimit"
)
type limitedReader struct {
r io.Reader
bucket *ratelimit.Bucket
}
func (r *limitedReader) Read(buf []byte) (int, error) {
n, err := r.r.Read(buf)
if r.bucket != nil {
r.bucket.Wait(int64(n))
}
return n, err
}
+25 -16
View File
@@ -82,15 +82,16 @@ func init() {
}
var (
cfg config.Configuration
myID protocol.NodeID
confDir string
logFlags int = log.Ltime
rateBucket *ratelimit.Bucket
stop = make(chan int)
discoverer *discover.Discoverer
externalPort int
cert tls.Certificate
cfg config.Configuration
myID protocol.NodeID
confDir string
logFlags int = log.Ltime
writeRateLimit *ratelimit.Bucket
readRateLimit *ratelimit.Bucket
stop = make(chan int)
discoverer *discover.Discoverer
externalPort int
cert tls.Certificate
)
const (
@@ -381,11 +382,14 @@ func syncthingMain() {
MinVersion: tls.VersionTLS12,
}
// If the write rate should be limited, set up a rate limiter for it.
// If the read or write rate should be limited, set up a rate limiter for it.
// This will be used on connections created in the connect and listen routines.
if cfg.Options.MaxSendKbps > 0 {
rateBucket = ratelimit.NewBucketWithRate(float64(1000*cfg.Options.MaxSendKbps), int64(5*1000*cfg.Options.MaxSendKbps))
writeRateLimit = ratelimit.NewBucketWithRate(float64(1000*cfg.Options.MaxSendKbps), int64(5*1000*cfg.Options.MaxSendKbps))
}
if cfg.Options.MaxRecvKbps > 0 {
readRateLimit = ratelimit.NewBucketWithRate(float64(1000*cfg.Options.MaxRecvKbps), int64(5*1000*cfg.Options.MaxRecvKbps))
}
// If this is the first time the user runs v0.9, archive the old indexes and config.
@@ -790,15 +794,20 @@ next:
continue next
}
// If rate limiting is set, we wrap the write side of the
// connection in a limiter.
// If rate limiting is set, we wrap the connection in a
// limiter.
var wr io.Writer = conn
if rateBucket != nil {
wr = &limitedWriter{conn, rateBucket}
if writeRateLimit != nil {
wr = &limitedWriter{conn, writeRateLimit}
}
var rd io.Reader = conn
if readRateLimit != nil {
rd = &limitedReader{conn, readRateLimit}
}
name := fmt.Sprintf("%s-%s", conn.LocalAddr(), conn.RemoteAddr())
protoConn := protocol.NewConnection(remoteID, conn, wr, m, name, nodeCfg.Compression)
protoConn := protocol.NewConnection(remoteID, rd, wr, m, name, nodeCfg.Compression)
l.Infof("Established secure connection to %s at %s", remoteID, name)
if debugNet {
+1
View File
@@ -119,6 +119,7 @@ type OptionsConfiguration struct {
LocalAnnMCAddr string `xml:"localAnnounceMCAddr" default:"[ff32::5222]:21026"`
ParallelRequests int `xml:"parallelRequests" default:"16"`
MaxSendKbps int `xml:"maxSendKbps"`
MaxRecvKbps int `xml:"maxRecvKbps"`
ReconnectIntervalS int `xml:"reconnectionIntervalS" default:"60"`
StartBrowser bool `xml:"startBrowser" default:"true"`
UPnPEnabled bool `xml:"upnpEnabled" default:"true"`
+2
View File
@@ -31,6 +31,7 @@ func TestDefaultValues(t *testing.T) {
LocalAnnMCAddr: "[ff32::5222]:21026",
ParallelRequests: 16,
MaxSendKbps: 0,
MaxRecvKbps: 0,
ReconnectIntervalS: 60,
StartBrowser: true,
UPnPEnabled: true,
@@ -121,6 +122,7 @@ func TestOverriddenValues(t *testing.T) {
LocalAnnMCAddr: "quux:3232",
ParallelRequests: 32,
MaxSendKbps: 1234,
MaxRecvKbps: 2341,
ReconnectIntervalS: 6000,
StartBrowser: false,
UPnPEnabled: false,
+1
View File
@@ -9,6 +9,7 @@
<localAnnounceMCAddr>quux:3232</localAnnounceMCAddr>
<parallelRequests>32</parallelRequests>
<maxSendKbps>1234</maxSendKbps>
<maxRecvKbps>2341</maxRecvKbps>
<reconnectionIntervalS>6000</reconnectionIntervalS>
<startBrowser>false</startBrowser>
<upnpEnabled>false</upnpEnabled>
+4
View File
@@ -538,6 +538,10 @@
<label translate for="ListenStr">Sync Protocol Listen Addresses</label>
<input id="ListenStr" class="form-control" type="text" ng-model="tmpOptions.ListenStr">
</div>
<div class="form-group">
<label translate for="MaxRecvKbps">Incoming Rate Limit (KiB/s)</label>
<input id="MaxRecvKbps" class="form-control" type="number" ng-model="tmpOptions.MaxRecvKbps">
</div>
<div class="form-group">
<label translate for="MaxSendKbps">Outgoing Rate Limit (KiB/s)</label>
<input id="MaxSendKbps" class="form-control" type="number" ng-model="tmpOptions.MaxSendKbps">