aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-16 10:49:38 -0700
committerchrislu <chris.lu@gmail.com>2022-07-16 10:49:38 -0700
commit8050f9202f87c4a9b273180faa4136fa1002ba73 (patch)
treef1cf3a26010ad278d8ddb204528b830c286a5a3e
parent113a4546fd36b9a0eb78c4e462f38f7488cf1e88 (diff)
parent1db012485f996df0615a1d6a7ece9faace2e536c (diff)
downloadseaweedfs-8050f9202f87c4a9b273180faa4136fa1002ba73.tar.xz
seaweedfs-8050f9202f87c4a9b273180faa4136fa1002ba73.zip
Merge branch 'master' into messaging
-rw-r--r--weed/filer/meta_aggregator.go2
-rw-r--r--weed/filer/reader_cache.go11
-rw-r--r--weed/s3api/s3api_object_handlers.go4
-rw-r--r--weed/server/filer_grpc_server_sub_meta.go9
4 files changed, 19 insertions, 7 deletions
diff --git a/weed/filer/meta_aggregator.go b/weed/filer/meta_aggregator.go
index beade3201..c672ce342 100644
--- a/weed/filer/meta_aggregator.go
+++ b/weed/filer/meta_aggregator.go
@@ -185,7 +185,7 @@ func (ma *MetaAggregator) doSubscribeToOneFiler(f *Filer, self pb.ServerAddress,
return nil
}
- glog.V(4).Infof("subscribing remote %s meta change: %v, clientId:%d", peer, time.Unix(0, lastTsNs), ma.filer.UniqueFileId)
+ glog.V(0).Infof("subscribing remote %s meta change: %v, clientId:%d", peer, time.Unix(0, lastTsNs), ma.filer.UniqueFileId)
err = pb.WithFilerClient(true, peer, ma.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
diff --git a/weed/filer/reader_cache.go b/weed/filer/reader_cache.go
index 4c92f71c8..4f375e764 100644
--- a/weed/filer/reader_cache.go
+++ b/weed/filer/reader_cache.go
@@ -76,7 +76,9 @@ func (rc *ReaderCache) ReadChunkAt(buffer []byte, fileId string, cipherKey []byt
rc.Lock()
defer rc.Unlock()
if cacher, found := rc.downloaders[fileId]; found {
- return cacher.readChunkAt(buffer, offset)
+ if n, err := cacher.readChunkAt(buffer, offset); n != 0 && err == nil {
+ return n, err
+ }
}
if shouldCache || rc.lookupFileIdFn == nil {
n, err := rc.chunkCache.ReadChunkAt(buffer, fileId, uint64(offset))
@@ -176,6 +178,9 @@ func (s *SingleChunkCacher) startCaching() {
}
func (s *SingleChunkCacher) destroy() {
+ s.Lock()
+ defer s.Unlock()
+
if s.data != nil {
mem.Free(s.data)
s.data = nil
@@ -194,6 +199,10 @@ func (s *SingleChunkCacher) readChunkAt(buf []byte, offset int64) (int, error) {
return 0, s.err
}
+ if len(s.data) == 0 {
+ return 0, nil
+ }
+
return copy(buf, s.data[offset:]), nil
}
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go
index 4ad3454ba..e49d613c4 100644
--- a/weed/s3api/s3api_object_handlers.go
+++ b/weed/s3api/s3api_object_handlers.go
@@ -445,9 +445,9 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader
func setEtag(w http.ResponseWriter, etag string) {
if etag != "" {
if strings.HasPrefix(etag, "\"") {
- w.Header().Set("ETag", etag)
+ w.Header()["ETag"] = []string{etag}
} else {
- w.Header().Set("ETag", "\""+etag+"\"")
+ w.Header()["ETag"] = []string{"\"" + etag + "\""}
}
}
}
diff --git a/weed/server/filer_grpc_server_sub_meta.go b/weed/server/filer_grpc_server_sub_meta.go
index 6a4a5bb17..82261ca51 100644
--- a/weed/server/filer_grpc_server_sub_meta.go
+++ b/weed/server/filer_grpc_server_sub_meta.go
@@ -95,12 +95,15 @@ func (fs *FilerServer) SubscribeLocalMetadata(req *filer_pb.SubscribeMetadataReq
alreadyKnown, clientName := fs.addClient(req.ClientName, peerAddress, req.ClientId)
if alreadyKnown {
- return fmt.Errorf("duplicated local subscription detected for client %s id %d", clientName, req.ClientId)
+ return fmt.Errorf("duplicated local subscription detected for client %s clientId:%d", clientName, req.ClientId)
}
- defer fs.deleteClient(clientName, req.ClientId)
+ defer func() {
+ glog.V(0).Infof(" - %v local subscribe %s clientId:%d", clientName, req.PathPrefix, req.ClientId)
+ fs.deleteClient(clientName, req.ClientId)
+ }()
lastReadTime := time.Unix(0, req.SinceNs)
- glog.V(0).Infof(" %v local subscribe %s from %+v", clientName, req.PathPrefix, lastReadTime)
+ glog.V(0).Infof(" + %v local subscribe %s from %+v clientId:%d", clientName, req.PathPrefix, lastReadTime, req.ClientId)
eachEventNotificationFn := fs.eachEventNotificationFn(req, stream, clientName)