Return back entity too large for createObject requests bigger than cache size

This commit is contained in:
Harshavardhana 2015-06-08 17:08:46 -07:00
parent 5edd8cce3d
commit 64b014369c
2 changed files with 12 additions and 1 deletions

View file

@ -18,6 +18,7 @@ package main
import (
"fmt"
"net/http"
"os"
"os/user"
"runtime"
@ -116,7 +117,7 @@ func getBuildDate() string {
if t.IsZero() {
return ""
}
return t.Format(time.RFC1123)
return t.Format(http.TimeFormat)
}
// Tries to get os/arch/platform specific information

View file

@ -43,6 +43,7 @@ type memoryDriver struct {
lock *sync.RWMutex
objects *trove.Cache
multiPartObjects *trove.Cache
maxSize uint64
}
type storedBucket struct {
@ -71,6 +72,7 @@ func Start(maxSize uint64, expiration time.Duration) (chan<- string, <-chan erro
memory = new(memoryDriver)
memory.storedBuckets = make(map[string]storedBucket)
memory.objects = trove.NewCache(maxSize, expiration)
memory.maxSize = maxSize
memory.multiPartObjects = trove.NewCache(0, time.Duration(0))
memory.lock = new(sync.RWMutex)
@ -204,6 +206,14 @@ func isMD5SumEqual(expectedMD5Sum, actualMD5Sum string) error {
}
func (memory *memoryDriver) CreateObject(bucket, key, contentType, expectedMD5Sum string, size int64, data io.Reader) (string, error) {
if size > int64(memory.maxSize) {
generic := drivers.GenericObjectError{Bucket: bucket, Object: key}
return "", iodine.New(drivers.EntityTooLarge{
GenericObjectError: generic,
Size: strconv.FormatInt(size, 10),
MaxSize: strconv.FormatUint(memory.maxSize, 10),
}, nil)
}
md5sum, err := memory.createObject(bucket, key, contentType, expectedMD5Sum, size, data)
// free
debug.FreeOSMemory()