|
@ -9,6 +9,7 @@ import ( |
|
|
"net/url" |
|
|
"net/url" |
|
|
"strconv" |
|
|
"strconv" |
|
|
"strings" |
|
|
"strings" |
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/operation" |
|
|
"github.com/seaweedfs/seaweedfs/weed/operation" |
|
@ -43,7 +44,9 @@ func ReplicatedWrite(masterFn operation.GetMasterFn, grpcDialOption grpc.DialOpt |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if s.GetVolume(volumeId) != nil { |
|
|
if s.GetVolume(volumeId) != nil { |
|
|
|
|
|
start := time.Now() |
|
|
isUnchanged, err = s.WriteVolumeNeedle(volumeId, n, true, fsync) |
|
|
isUnchanged, err = s.WriteVolumeNeedle(volumeId, n, true, fsync) |
|
|
|
|
|
stats.VolumeServerRequestHistogram.WithLabelValues(stats.WriteToLocalDisk).Observe(time.Since(start).Seconds()) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
stats.VolumeServerRequestCounter.WithLabelValues(stats.ErrorWriteToLocalDisk).Inc() |
|
|
stats.VolumeServerRequestCounter.WithLabelValues(stats.ErrorWriteToLocalDisk).Inc() |
|
|
err = fmt.Errorf("failed to write to local disk: %v", err) |
|
|
err = fmt.Errorf("failed to write to local disk: %v", err) |
|
@ -53,7 +56,8 @@ func ReplicatedWrite(masterFn operation.GetMasterFn, grpcDialOption grpc.DialOpt |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if len(remoteLocations) > 0 { //send to other replica locations
|
|
|
if len(remoteLocations) > 0 { //send to other replica locations
|
|
|
if err = DistributedOperation(remoteLocations, func(location operation.Location) error { |
|
|
|
|
|
|
|
|
start := time.Now() |
|
|
|
|
|
err = DistributedOperation(remoteLocations, func(location operation.Location) error { |
|
|
u := url.URL{ |
|
|
u := url.URL{ |
|
|
Scheme: "http", |
|
|
Scheme: "http", |
|
|
Host: location.Url, |
|
|
Host: location.Url, |
|
@ -97,7 +101,9 @@ func ReplicatedWrite(masterFn operation.GetMasterFn, grpcDialOption grpc.DialOpt |
|
|
} |
|
|
} |
|
|
_, err := operation.UploadData(n.Data, uploadOption) |
|
|
_, err := operation.UploadData(n.Data, uploadOption) |
|
|
return err |
|
|
return err |
|
|
}); err != nil { |
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
stats.VolumeServerRequestHistogram.WithLabelValues(stats.WriteToReplicas).Observe(time.Since(start).Seconds()) |
|
|
|
|
|
if err != nil { |
|
|
stats.VolumeServerRequestCounter.WithLabelValues(stats.ErrorWriteToReplicas).Inc() |
|
|
stats.VolumeServerRequestCounter.WithLabelValues(stats.ErrorWriteToReplicas).Inc() |
|
|
err = fmt.Errorf("failed to write to replicas for volume %d: %v", volumeId, err) |
|
|
err = fmt.Errorf("failed to write to replicas for volume %d: %v", volumeId, err) |
|
|
glog.V(0).Infoln(err) |
|
|
glog.V(0).Infoln(err) |
|
|