mirror of
https://github.com/chrislusf/seaweedfs
synced 2024-06-28 21:31:56 +02:00
mount: shortcut when there is only one chunk
This commit is contained in:
parent
f64252023e
commit
c31b254248
|
@ -3,6 +3,8 @@ package filesys
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type IntervalNode struct {
|
type IntervalNode struct {
|
||||||
|
@ -200,10 +202,13 @@ func (c *ContinuousIntervals) ReadDataAt(data []byte, startOffset int64) (maxSto
|
||||||
func (l *IntervalLinkedList) ToReader() io.Reader {
|
func (l *IntervalLinkedList) ToReader() io.Reader {
|
||||||
var readers []io.Reader
|
var readers []io.Reader
|
||||||
t := l.Head
|
t := l.Head
|
||||||
readers = append(readers, bytes.NewReader(t.Data))
|
readers = append(readers, util.NewBytesReader(t.Data))
|
||||||
for t.Next != nil {
|
for t.Next != nil {
|
||||||
t = t.Next
|
t = t.Next
|
||||||
readers = append(readers, bytes.NewReader(t.Data))
|
readers = append(readers, bytes.NewReader(t.Data))
|
||||||
}
|
}
|
||||||
|
if len(readers) == 1 {
|
||||||
|
return readers[0]
|
||||||
|
}
|
||||||
return io.MultiReader(readers...)
|
return io.MultiReader(readers...)
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,10 +76,15 @@ func Upload(uploadUrl string, filename string, cipher bool, reader io.Reader, is
|
||||||
}
|
}
|
||||||
|
|
||||||
func doUpload(uploadUrl string, filename string, cipher bool, reader io.Reader, isInputCompressed bool, mtype string, pairMap map[string]string, jwt security.EncodedJwt) (uploadResult *UploadResult, err error, data []byte) {
|
func doUpload(uploadUrl string, filename string, cipher bool, reader io.Reader, isInputCompressed bool, mtype string, pairMap map[string]string, jwt security.EncodedJwt) (uploadResult *UploadResult, err error, data []byte) {
|
||||||
data, err = ioutil.ReadAll(reader)
|
bytesReader, ok := reader.(*util.BytesReader)
|
||||||
if err != nil {
|
if ok {
|
||||||
err = fmt.Errorf("read input: %v", err)
|
data = bytesReader.Bytes
|
||||||
return
|
} else {
|
||||||
|
data, err = ioutil.ReadAll(reader)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("read input: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
uploadResult, uploadErr := retriedUploadData(uploadUrl, filename, cipher, data, isInputCompressed, mtype, pairMap, jwt)
|
uploadResult, uploadErr := retriedUploadData(uploadUrl, filename, cipher, data, isInputCompressed, mtype, pairMap, jwt)
|
||||||
return uploadResult, uploadErr, data
|
return uploadResult, uploadErr, data
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
@ -148,3 +149,15 @@ func RandomBytes(byteCount int) []byte {
|
||||||
rand.Read(buf)
|
rand.Read(buf)
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BytesReader struct {
|
||||||
|
Bytes []byte
|
||||||
|
*bytes.Reader
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBytesReader(b []byte) *BytesReader {
|
||||||
|
return &BytesReader{
|
||||||
|
Bytes: b,
|
||||||
|
Reader: bytes.NewReader(b),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue