aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislusf <chris.lu@gmail.com>2015-03-09 00:34:26 -0700
committerchrislusf <chris.lu@gmail.com>2015-03-09 01:10:04 -0700
commit853701cb6b13c0e56c0b9c242aa027003e32f6c2 (patch)
tree4e486ff9e330d63f5ec7839e2a918743dd3f9983
parent9d8a6d2562b20fe20028938f96397a0921a47a18 (diff)
downloadseaweedfs-853701cb6b13c0e56c0b9c242aa027003e32f6c2.tar.xz
seaweedfs-853701cb6b13c0e56c0b9c242aa027003e32f6c2.zip
Avoid wrong way to delete on replication failure
Avoid wrong way to delete on replication failure. This deletion has bug to write. The better fix is not to use the deletion on failure at all.
-rw-r--r--go/storage/needle_read_write.go7
-rw-r--r--go/topology/store_replicate.go10
-rw-r--r--go/weed/weed_server/volume_server_handlers_write.go1
3 files changed, 7 insertions, 11 deletions
diff --git a/go/storage/needle_read_write.go b/go/storage/needle_read_write.go
index 6925c04e0..24a2c45ed 100644
--- a/go/storage/needle_read_write.go
+++ b/go/storage/needle_read_write.go
@@ -76,6 +76,8 @@ func (n *Needle) Append(w io.Writer, version Version) (size uint32, err error) {
if n.HasTtl() {
n.Size = n.Size + TtlBytesLength
}
+ } else {
+ n.Size = 0
}
size = n.DataSize
util.Uint32toBytes(header[12:16], n.Size)
@@ -185,6 +187,11 @@ func (n *Needle) readNeedleDataVersion2(bytes []byte) {
if index < lenBytes {
n.DataSize = util.BytesToUint32(bytes[index : index+4])
index = index + 4
+ if int(n.DataSize)+index > lenBytes {
+ // this if clause is due to bug #87 and #93, fixed in v0.69
+ // remove this clause later
+ return
+ }
n.Data = bytes[index : index+int(n.DataSize)]
index = index + int(n.DataSize)
n.Flags = bytes[index]
diff --git a/go/topology/store_replicate.go b/go/topology/store_replicate.go
index da426e587..c44877da1 100644
--- a/go/topology/store_replicate.go
+++ b/go/topology/store_replicate.go
@@ -45,16 +45,6 @@ func ReplicatedWrite(masterNode string, s *storage.Store,
}
}
}
- if errorStatus != "" {
- if _, err = s.Delete(volumeId, needle); err != nil {
- errorStatus += "\nCannot delete " + strconv.FormatUint(needle.Id, 10) + " from " +
- volumeId.String() + ": " + err.Error()
- } else {
- distributedOperation(masterNode, s, volumeId, func(location operation.Location) bool {
- return nil == util.Delete("http://"+location.Url+r.URL.Path+"?type=replicate", jwt)
- })
- }
- }
size = ret
return
}
diff --git a/go/weed/weed_server/volume_server_handlers_write.go b/go/weed/weed_server/volume_server_handlers_write.go
index db0272f65..a42bdf9bb 100644
--- a/go/weed/weed_server/volume_server_handlers_write.go
+++ b/go/weed/weed_server/volume_server_handlers_write.go
@@ -67,7 +67,6 @@ func (vs *VolumeServer) DeleteHandler(w http.ResponseWriter, r *http.Request) {
return
}
- n.Size = 0
ret := topology.ReplicatedDelete(vs.GetMasterNode(), vs.store, volumeId, n, r)
if ret != 0 {