diff --git a/pkg/api/api_router.go b/pkg/api/api_router.go index f4a1bd88e..08ee0711f 100644 --- a/pkg/api/api_router.go +++ b/pkg/api/api_router.go @@ -92,10 +92,10 @@ func HTTPHandler(domain string, driver drivers.Driver) http.Handler { } h := validateHandler(conf, ignoreResourcesHandler(mux)) - h = quota.BandwidthCap(h, 250*1024*1024, time.Duration(30*time.Minute)) - // h = quota.BandwidthCap(h, 1024*1024*1024, time.Duration(24*time.Hour)) - // h = quota.RequestLimit(h, 100, time.Duration(30*time.Minute)) - // h = quota.RequestLimit(h, 1000, time.Duration(24*time.Hour)) - // h = quota.ConnectionLimit(h, 5) + h = quota.BandwidthCap(h, 25*1024*1024, time.Duration(30*time.Minute)) + h = quota.BandwidthCap(h, 100*1024*1024, time.Duration(24*time.Hour)) + h = quota.RequestLimit(h, 100, time.Duration(30*time.Minute)) + h = quota.RequestLimit(h, 1000, time.Duration(24*time.Hour)) + h = quota.ConnectionLimit(h, 5) return h } diff --git a/pkg/api/quota/bandwidth_cap.go b/pkg/api/quota/bandwidth_cap.go index 9b1231184..331aa0dbe 100644 --- a/pkg/api/quota/bandwidth_cap.go +++ b/pkg/api/quota/bandwidth_cap.go @@ -20,7 +20,6 @@ import ( "errors" "github.com/minio-io/minio/pkg/iodine" "io" - "log" "net" "net/http" "time" @@ -40,10 +39,22 @@ var bandwidthQuotaExceeded = ErrorResponse{ HostID: "", } +var bandwidthInsufficientToProceed = ErrorResponse{ + Code: "BandwidthQuotaWillBeExceeded", + Message: "Bandwidth quota will be exceeded with this request", + Resource: "", + RequestID: "", + HostID: "", +} + // ServeHTTP is an http.Handler ServeHTTP method func (h *bandwidthQuotaHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { host, _, _ := net.SplitHostPort(req.RemoteAddr) longIP := longIP{net.ParseIP(host)}.IptoUint32() + if h.quotas.WillExceedQuota(longIP, req.ContentLength) { + writeError(w, req, bandwidthInsufficientToProceed, 429) + return + } req.Body = "aReader{ ReadCloser: req.Body, quotas: h.quotas, @@ -56,7 +67,6 @@ func (h *bandwidthQuotaHandler) ServeHTTP(w http.ResponseWriter, req *http.Reque quotas: h.quotas, ip: longIP, } - log.Println("serving") h.handler.ServeHTTP(w, req) } @@ -84,12 +94,10 @@ type quotaReader struct { func (q *quotaReader) Read(b []byte) (int, error) { if q.err { - log.Println("Shortcut, quitting") return 0, iodine.New(errors.New("Quota Met"), nil) } if q.quotas.IsQuotaMet(q.ip) { q.err = true - log.Println("QUOTA!!!") writeError(q.w, q.req, bandwidthQuotaExceeded, 429) return 0, iodine.New(errors.New("Quota Met"), nil) }