[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