[ARVADOS] created: 66380d0e89c00559123ceda8e74e3b1487f4a95a
git at public.curoverse.com
git at public.curoverse.com
Tue Jul 14 15:41:09 EDT 2015
at 66380d0e89c00559123ceda8e74e3b1487f4a95a (commit)
commit 66380d0e89c00559123ceda8e74e3b1487f4a95a
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Tue Jul 14 14:02:18 2015 -0400
6221: Make never_delete true by default, make trash_worker respect never_delete, add
test.
diff --git a/services/keepstore/handler_test.go b/services/keepstore/handler_test.go
index c181982..8be4710 100644
--- a/services/keepstore/handler_test.go
+++ b/services/keepstore/handler_test.go
@@ -231,6 +231,7 @@ func TestPutAndDeleteSkipReadonlyVolumes(t *testing.T) {
uri: "/" + TEST_HASH,
request_body: TEST_BLOCK,
})
+ never_delete = false
IssueRequest(
&RequestTester{
method: "DELETE",
@@ -448,6 +449,8 @@ func TestDeleteHandler(t *testing.T) {
var user_token = "NOT DATA MANAGER TOKEN"
data_manager_token = "DATA MANAGER TOKEN"
+ never_delete = false
+
unauth_req := &RequestTester{
method: "DELETE",
uri: "/" + TEST_HASH,
diff --git a/services/keepstore/keepstore.go b/services/keepstore/keepstore.go
index 06b2f6f..e55e0ef 100644
--- a/services/keepstore/keepstore.go
+++ b/services/keepstore/keepstore.go
@@ -54,7 +54,7 @@ var data_manager_token string
// never_delete can be used to prevent the DELETE handler from
// actually deleting anything.
-var never_delete = false
+var never_delete = true
var maxBuffers = 128
var bufs *bufferPool
@@ -232,7 +232,7 @@ func main() {
flag.BoolVar(
&never_delete,
"never-delete",
- false,
+ true,
"If set, nothing will be deleted. HTTP 405 will be returned "+
"for valid DELETE requests.")
flag.StringVar(
@@ -294,11 +294,11 @@ func main() {
bufs = newBufferPool(maxBuffers, BLOCKSIZE)
if pidfile != "" {
- f, err := os.OpenFile(pidfile, os.O_RDWR | os.O_CREATE, 0777)
+ f, err := os.OpenFile(pidfile, os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
log.Fatalf("open pidfile (%s): %s", pidfile, err)
}
- err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX | syscall.LOCK_NB)
+ err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
if err != nil {
log.Fatalf("flock pidfile (%s): %s", pidfile, err)
}
diff --git a/services/keepstore/trash_worker.go b/services/keepstore/trash_worker.go
index bc1775f..52f5e75 100644
--- a/services/keepstore/trash_worker.go
+++ b/services/keepstore/trash_worker.go
@@ -1,6 +1,7 @@
package main
import (
+ "errors"
"log"
"time"
)
@@ -37,11 +38,17 @@ func TrashItem(trashRequest TrashRequest) {
if err != nil || trashRequest.BlockMtime != mtime.Unix() {
continue
}
- err = volume.Delete(trashRequest.Locator)
- if err != nil {
+
+ if !never_delete {
+ err = volume.Delete(trashRequest.Locator)
+ } else {
+ err = errors.New("did not delete block because never_delete is true")
+ }
+
+ if err == nil {
+ log.Printf("%v Delete(%v) OK", volume, trashRequest.Locator)
+ } else {
log.Printf("%v Delete(%v): %v", volume, trashRequest.Locator, err)
- continue
}
- log.Printf("%v Delete(%v) OK", volume, trashRequest.Locator)
}
}
diff --git a/services/keepstore/trash_worker_test.go b/services/keepstore/trash_worker_test.go
index 0511b48..8268191 100644
--- a/services/keepstore/trash_worker_test.go
+++ b/services/keepstore/trash_worker_test.go
@@ -31,6 +31,7 @@ type TrashWorkerTestData struct {
Expect no errors.
*/
func TestTrashWorkerIntegration_GetNonExistingLocator(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: "5d41402abc4b2a76b9719d911017c592",
Block1: []byte("hello"),
@@ -52,6 +53,7 @@ func TestTrashWorkerIntegration_GetNonExistingLocator(t *testing.T) {
Expect the second locator in volume 2 to be unaffected.
*/
func TestTrashWorkerIntegration_LocatorInVolume1(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -73,6 +75,7 @@ func TestTrashWorkerIntegration_LocatorInVolume1(t *testing.T) {
Expect the first locator in volume 1 to be unaffected.
*/
func TestTrashWorkerIntegration_LocatorInVolume2(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -94,6 +97,7 @@ func TestTrashWorkerIntegration_LocatorInVolume2(t *testing.T) {
Expect locator to be deleted from both volumes.
*/
func TestTrashWorkerIntegration_LocatorInBothVolumes(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -115,6 +119,7 @@ func TestTrashWorkerIntegration_LocatorInBothVolumes(t *testing.T) {
Delete the second and expect the first to be still around.
*/
func TestTrashWorkerIntegration_MtimeMatchesForLocator1ButNotForLocator2(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -138,6 +143,7 @@ func TestTrashWorkerIntegration_MtimeMatchesForLocator1ButNotForLocator2(t *test
Expect the other unaffected.
*/
func TestTrashWorkerIntegration_TwoDifferentLocatorsInVolume1(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -160,6 +166,7 @@ func TestTrashWorkerIntegration_TwoDifferentLocatorsInVolume1(t *testing.T) {
will not be deleted becuase its Mtime is within the trash life time.
*/
func TestTrashWorkerIntegration_SameLocatorInTwoVolumesWithDefaultTrashLifeTime(t *testing.T) {
+ never_delete = false
testData := TrashWorkerTestData{
Locator1: TEST_HASH,
Block1: TEST_BLOCK,
@@ -181,6 +188,28 @@ func TestTrashWorkerIntegration_SameLocatorInTwoVolumesWithDefaultTrashLifeTime(
performTrashWorkerTest(testData, t)
}
+/* Delete a block with matching mtime for locator in both volumes, but never_delete is true,
+ so block won't be deleted.
+*/
+func TestTrashWorkerIntegration_NeverDelete(t *testing.T) {
+ never_delete = true
+ testData := TrashWorkerTestData{
+ Locator1: TEST_HASH,
+ Block1: TEST_BLOCK,
+
+ Locator2: TEST_HASH,
+ Block2: TEST_BLOCK,
+
+ CreateData: true,
+
+ DeleteLocator: TEST_HASH,
+
+ ExpectLocator1: true,
+ ExpectLocator2: true,
+ }
+ performTrashWorkerTest(testData, t)
+}
+
/* Perform the test */
func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) {
// Create Keep Volumes
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list