Arvados class now accepts additional parameter which specifies max
authorFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 2 Feb 2018 14:41:44 +0000 (15:41 +0100)
committerFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 2 Feb 2018 14:41:44 +0000 (15:41 +0100)
number of failed connection retries

Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic@capeannenterprises.com>

sdk/R/R/Arvados.R
sdk/R/R/HttpRequest.R
sdk/R/R/RESTService.R
sdk/R/README
sdk/R/tests/testthat/fakes/FakeHttpRequest.R
sdk/R/tests/testthat/test-RESTService.R

index 6493b899afa73cbf5c8575b277388ef46a216fbe..ea4384b5b47ecb97d9b2aaa0348b79738ae2e180 100644 (file)
@@ -16,7 +16,7 @@ Arvados <- R6::R6Class(
 
     public = list(
 
-        initialize = function(authToken = NULL, hostName = NULL)
+        initialize = function(authToken = NULL, hostName = NULL, numRetries = 0)
         {
             if(!is.null(hostName))
                Sys.setenv(ARVADOS_API_HOST = hostName)
@@ -32,8 +32,11 @@ Arvados <- R6::R6Class(
                            "or set ARVADOS_API_HOST and ARVADOS_API_TOKEN",
                            "environment variables."))
 
-            private$REST  <- RESTService$new(token, hostName, NULL,
-                                             HttpRequest$new(), HttpParser$new())
+            private$numRetries  <- numRetries
+            private$REST  <- RESTService$new(token, hostName,
+                                             HttpRequest$new(), HttpParser$new(),
+                                             numRetries)
+
             private$token <- private$REST$token
             private$host  <- private$REST$hostName
         },
@@ -44,6 +47,12 @@ Arvados <- R6::R6Class(
         getRESTService    = function() private$REST,
         setRESTService    = function(newRESTService) private$REST <- newRESTService,
 
+        getNumRetries = function() private$REST$numRetries,
+        setNumRetries = function(newNumOfRetries)
+        {
+            private$REST$setNumRetries(newNumOfRetries)
+        },
+
         getCollection = function(uuid)
         {
             collection <- private$REST$getResource("collections", uuid)
@@ -156,9 +165,10 @@ Arvados <- R6::R6Class(
 
     private = list(
 
-        token = NULL,
-        host  = NULL,
-        REST  = NULL
+        token      = NULL,
+        host       = NULL,
+        REST       = NULL,
+        numRetries = NULL
     ),
 
     cloneable = FALSE
index 53c8e224a8ff97863ef92fe1baeab6a190a045aa..f8ad0a60cdad56febb96f1b6b795d7f6cc8e1358 100644 (file)
@@ -16,7 +16,7 @@ HttpRequest <- R6::R6Class(
         },
 
         execute = function(verb, url, headers = NULL, body = NULL, query = NULL,
-                           limit = NULL, offset = NULL, retryTimes = 3)
+                           limit = NULL, offset = NULL, retryTimes = 0)
         {
             if(!(verb %in% self$validVerbs))
                 stop("Http verb is not valid.")
@@ -25,8 +25,9 @@ HttpRequest <- R6::R6Class(
             urlQuery <- self$createQuery(query, limit, offset)
             url      <- paste0(url, urlQuery)
 
+            # times = 1 regular call + numberOfRetries
             response <- httr::RETRY(verb, url = url, body = body,
-                                    config = headers, times = retryTimes)
+                                    config = headers, times = retryTimes + 1)
         },
 
         createQuery = function(filters, limit, offset)
index 74031b00c35ed4fcd3eb7e1ad532922c4397dba8..12e6591ee8f4b3e3cafa6f187bf85886eb6e4914 100644 (file)
@@ -8,8 +8,12 @@ RESTService <- R6::R6Class(
         token      = NULL,
         http       = NULL,
         httpParser = NULL,
+        numRetries = NULL,
 
-        initialize = function(token, hostName, webDavHostName = NULL,  http, httpParser)
+        initialize = function(token, hostName,
+                              http, httpParser,
+                              numRetries     = 0,
+                              webDavHostName = NULL)
         {
             version <- "v1"
 
@@ -18,11 +22,17 @@ RESTService <- R6::R6Class(
                                        "/arvados/", version, "/")
             self$http        <- http
             self$httpParser  <- httpParser
+            self$numRetries  <- numRetries
 
             private$rawHostName    <- hostName
             private$webDavHostName <- webDavHostName
         },
 
+        setNumConnRetries = function(newNumOfRetries)
+        {
+            self$numRetries <- newNumOfRetries
+        },
+
         getWebDavHostName = function()
         {
             if(is.null(private$webDavHostName))
@@ -32,7 +42,8 @@ RESTService <- R6::R6Class(
 
                 headers <- list(Authorization = paste("OAuth2", self$token))
 
-                serverResponse <- self$http$execute("GET", discoveryDocumentURL, headers)
+                serverResponse <- self$http$execute("GET", discoveryDocumentURL, headers,
+                                                    retryTimes = self$numRetries)
 
                 discoveryDocument <- self$httpParser$parseJSONResponse(serverResponse)
                 private$webDavHostName <- discoveryDocument$keepWebServiceUrl
@@ -49,7 +60,8 @@ RESTService <- R6::R6Class(
             resourceURL <- paste0(self$hostName, resource, "/", uuid)
             headers <- list(Authorization = paste("OAuth2", self$token))
 
-            serverResponse <- self$http$execute("GET", resourceURL, headers)
+            serverResponse <- self$http$execute("GET", resourceURL, headers,
+                                                retryTimes = self$numRetries)
 
             resource <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -66,7 +78,8 @@ RESTService <- R6::R6Class(
             body <- NULL
 
             serverResponse <- self$http$execute("GET", resourceURL, headers, body,
-                                                filters, limit, offset)
+                                                filters, limit, offset,
+                                                self$numRetries)
 
             resources <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -85,13 +98,14 @@ RESTService <- R6::R6Class(
             items <- c()
             while(length(items) < itemsAvailable)
             {
-                serverResponse <- self$http$execute(verb    = "GET",
-                                                    url     = resourceURL,
-                                                    headers = headers,
-                                                    body    = NULL,
-                                                    query   = filters,
-                                                    limit   = NULL,
-                                                    offset  = offset)
+                serverResponse <- self$http$execute(verb       = "GET",
+                                                    url        = resourceURL,
+                                                    headers    = headers,
+                                                    body       = NULL,
+                                                    query      = filters,
+                                                    limit      = NULL,
+                                                    offset     = offset,
+                                                    retryTimes = self$numRetries)
 
                 parsedResponse <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -112,7 +126,8 @@ RESTService <- R6::R6Class(
             headers <- list("Authorization" = paste("OAuth2", self$token),
                             "Content-Type"  = "application/json")
 
-            serverResponse <- self$http$execute("DELETE", collectionURL, headers)
+            serverResponse <- self$http$execute("DELETE", collectionURL, headers,
+                                                retryTimes = self$numRetries)
 
             removedResource <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -130,7 +145,8 @@ RESTService <- R6::R6Class(
 
             newContent <- jsonlite::toJSON(newContent, auto_unbox = T)
 
-            serverResponse <- self$http$execute("PUT", resourceURL, headers, newContent)
+            serverResponse <- self$http$execute("PUT", resourceURL, headers, newContent,
+                                                retryTimes = self$numRetries)
 
             updatedResource <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -148,7 +164,8 @@ RESTService <- R6::R6Class(
 
             content <- jsonlite::toJSON(content, auto_unbox = T)
 
-            serverResponse <- self$http$execute("POST", resourceURL, headers, content)
+            serverResponse <- self$http$execute("POST", resourceURL, headers, content,
+                                                retryTimes = self$numRetries)
 
             newResource <- self$httpParser$parseJSONResponse(serverResponse)
 
@@ -172,7 +189,8 @@ RESTService <- R6::R6Class(
                               uuid, "/", relativePath);
             headers <- list(Authorization = paste("OAuth2", self$token)) 
 
-            serverResponse <- self$http$execute("DELETE", fileURL, headers)
+            serverResponse <- self$http$execute("DELETE", fileURL, headers,
+                                                retryTimes = self$numRetries)
 
             if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
                 stop(paste("Server code:", serverResponse$status_code))
@@ -189,7 +207,8 @@ RESTService <- R6::R6Class(
             headers <- list("Authorization" = paste("OAuth2", self$token),
                            "Destination" = toURL)
 
-            serverResponse <- self$http$execute("MOVE", fromURL, headers)
+            serverResponse <- self$http$execute("MOVE", fromURL, headers,
+                                                retryTimes = self$numRetries)
 
             if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
                 stop(paste("Server code:", serverResponse$status_code))
@@ -204,7 +223,8 @@ RESTService <- R6::R6Class(
 
             headers <- list("Authorization" = paste("OAuth2", self$token))
 
-            response <- self$http$execute("PROPFIND", collectionURL, headers)
+            response <- self$http$execute("PROPFIND", collectionURL, headers,
+                                          retryTimes = self$numRetries)
 
             if(all(response == ""))
                 stop("Response is empty, request may be misconfigured")
@@ -224,7 +244,8 @@ RESTService <- R6::R6Class(
 
             headers <- list("Authorization" = paste("OAuth2", self$token))
 
-            response <- self$http$execute("PROPFIND", subcollectionURL, headers)
+            response <- self$http$execute("PROPFIND", subcollectionURL, headers,
+                                          retryTimes = self$numRetries)
 
             if(all(response == ""))
                 stop("Response is empty, request may be misconfigured")
@@ -260,7 +281,8 @@ RESTService <- R6::R6Class(
             if(!(contentType %in% self$httpParser$validContentTypes))
                 stop("Invalid contentType. Please use text or raw.")
 
-            serverResponse <- self$http$execute("GET", fileURL, headers)
+            serverResponse <- self$http$execute("GET", fileURL, headers,
+                                                retryTimes = self$numRetries)
 
             if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
                 stop(paste("Server code:", serverResponse$status_code))
@@ -276,7 +298,8 @@ RESTService <- R6::R6Class(
                             "Content-Type" = contentType)
             body <- content
 
-            serverResponse <- self$http$execute("PUT", fileURL, headers, body)
+            serverResponse <- self$http$execute("PUT", fileURL, headers, body,
+                                                retryTimes = self$numRetries)
 
             if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
                 stop(paste("Server code:", serverResponse$status_code))
@@ -312,7 +335,8 @@ RESTService <- R6::R6Class(
                             "Content-Type" = contentType)
             body <- NULL
 
-            serverResponse <- self$http$execute("PUT", fileURL, headers, body)
+            serverResponse <- self$http$execute("PUT", fileURL, headers, body,
+                                                retryTimes = self$numRetries)
 
             if(serverResponse$status_code < 200 || serverResponse$status_code >= 300)
                 stop(paste("Server code:", serverResponse$status_code))
index 8a0c31dce6131ec30dc8f1d66fbc00b7b4531aa7..4c99c758f42a2d93e9e8cdde7e28b5a50ecf1443 100644 (file)
@@ -28,6 +28,16 @@ library('ArvadosR')
 arv <- Arvados$new() # uses environment variables ARVADOS_API_TOKEN and ARVADOS_API_HOST
 arv <- Arvados$new("your Arvados token", "example.arvadosapi.com")
 
+
+#Optionally, add numRetries parameter to specify number of times to retry failed service requests.
+#Default is 0.
+
+arv <- Arvados$new("your Arvados token", "example.arvadosapi.com", numRetries = 3)
+
+#This parameter can be set at any time using setNumRetries 
+
+arv$setNumRetries(5)
+
 --------------------------------------------------------------------------------------------------------------------------------
 
 #Get a collection:
index c46e03bae933ed10fb5492eec946841fc6625071..533602886ab09e0d34a49e2829acaf73a9051baa 100644 (file)
@@ -57,7 +57,7 @@ FakeHttpRequest <- R6::R6Class(
         },
 
         execute = function(verb, url, headers = NULL, body = NULL, query = NULL,
-                           limit = NULL, offset = NULL, retryTimes = 3)
+                           limit = NULL, offset = NULL, retryTimes = 0)
         {
             private$validateURL(url)
             private$validateHeaders(headers)
index abc34d95659ba7db707a7df17f0265d3093e64c7..72c9e1272e59acfab7ddda27ef0c9c08a1363113 100644 (file)
@@ -10,7 +10,7 @@ test_that("getWebDavHostName calls REST service properly", {
     serverResponse <- list(keepWebServiceUrl = "https://myWebDavServer.com")
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", NULL,
+    REST <- RESTService$new("token", "host",
                             httpRequest, FakeHttpParser$new())
 
     REST$getWebDavHostName()
@@ -25,7 +25,7 @@ test_that("getWebDavHostName returns webDAV host name properly", {
     serverResponse <- list(keepWebServiceUrl = "https://myWebDavServer.com")
     httpRequest <- FakeHttpRequest$new(expectedURL = NULL, serverResponse)
 
-    REST <- RESTService$new("token", "host", NULL,
+    REST <- RESTService$new("token", "host",
                             httpRequest, FakeHttpParser$new())
 
     expect_that("https://myWebDavServer.com", equals(REST$getWebDavHostName())) 
@@ -39,8 +39,9 @@ test_that("getResource calls REST service properly", {
 
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, FakeHttpParser$new())
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, FakeHttpParser$new(),
+                            0, "webDavHost")
 
     REST$getResource("collections", resourceUUID)
 
@@ -53,8 +54,9 @@ test_that("getResource parses server response", {
 
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     httpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            FakeHttpRequest$new(), httpParser)
+    REST <- RESTService$new("token", "host", 
+                            FakeHttpRequest$new(), httpParser,
+                            0, "webDavHost")
 
     REST$getResource("collections", resourceUUID)
 
@@ -66,9 +68,10 @@ test_that("getResource raises exception if response contains errors field", {
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     serverResponse <- list(errors = 404)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
+    REST <- RESTService$new("token", "host",
                             FakeHttpRequest$new(NULL, serverResponse),
-                            FakeHttpParser$new())
+                            FakeHttpParser$new(),
+                            0, "webDavHost")
     
     expect_that(REST$getResource("collections", resourceUUID), throws_error(404))
 }) 
@@ -79,8 +82,9 @@ test_that("listResources calls REST service properly", {
     expectedURL    <- paste0("https://host/arvados/v1/collections")
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, FakeHttpParser$new())
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, FakeHttpParser$new(),
+                            0, "webDavHost")
 
     REST$listResources("collections")
 
@@ -92,8 +96,9 @@ test_that("listResources calls REST service properly", {
 test_that("listResources parses server response", {
 
     httpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            FakeHttpRequest$new(), httpParser)
+    REST <- RESTService$new("token", "host", 
+                            FakeHttpRequest$new(), httpParser,
+                            0, "webDavHost")
 
     REST$listResources("collections")
 
@@ -104,9 +109,10 @@ test_that("listResources raises exception if response contains errors field", {
 
     serverResponse <- list(errors = 404)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
+    REST <- RESTService$new("token", "host", 
                             FakeHttpRequest$new(NULL, serverResponse),
-                            FakeHttpParser$new())
+                            FakeHttpParser$new(),
+                            0, "webDavHost")
     
     expect_that(REST$listResources("collections"), throws_error(404))
 }) 
@@ -128,8 +134,9 @@ test_that("fetchAllItems always returns all resource items from server", {
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
     httpRequest$serverMaxElementsPerRequest <- 3
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, httpParser)
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, httpParser,
+                            0, "webDavHost")
 
     result <- REST$fetchAllItems(NULL, NULL)
 
@@ -146,8 +153,9 @@ test_that("deleteResource calls REST service properly", {
 
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, FakeHttpParser$new())
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, FakeHttpParser$new(),
+                            0, "webDavHost")
 
     REST$deleteResource("collections", resourceUUID)
 
@@ -160,8 +168,9 @@ test_that("deleteCollection parses server response", {
 
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     httpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            FakeHttpRequest$new(), httpParser)
+    REST <- RESTService$new("token", "host", 
+                            FakeHttpRequest$new(), httpParser,
+                            0, "webDavHost")
 
     REST$deleteResource("collections", resourceUUID)
 
@@ -173,9 +182,10 @@ test_that("deleteCollection raises exception if response contains errors field",
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     serverResponse <- list(errors = 404)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
+    REST <- RESTService$new("token", "host", 
                             FakeHttpRequest$new(NULL, serverResponse),
-                            FakeHttpParser$new())
+                            FakeHttpParser$new(),
+                            0, "webDavHost")
     
     expect_that(REST$deleteResource("collections", resourceUUID), throws_error(404))
 }) 
@@ -189,8 +199,9 @@ test_that("updateResource calls REST service properly", {
 
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, FakeHttpParser$new())
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, FakeHttpParser$new(),
+                            0, "webDavHost")
 
     REST$updateResource("collections", resourceUUID, newResourceContent)
 
@@ -205,8 +216,9 @@ test_that("updateResource parses server response", {
     newResourceContent <- list(newName = "Brand new shiny name")
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     httpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            FakeHttpRequest$new(), httpParser)
+    REST <- RESTService$new("token", "host", 
+                            FakeHttpRequest$new(), httpParser,
+                            0, "webDavHost")
 
     REST$updateResource("collections", resourceUUID, newResourceContent)
 
@@ -218,9 +230,10 @@ test_that("updateResource raises exception if response contains errors field", {
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     serverResponse <- list(errors = 404)
     newResourceContent <- list(newName = "Brand new shiny name")
-    REST <- RESTService$new("token", "host", "webDavHost",
+    REST <- RESTService$new("token", "host", 
                             FakeHttpRequest$new(NULL, serverResponse),
-                            FakeHttpParser$new())
+                            FakeHttpParser$new(),
+                            0, "webDavHost")
     
     expect_that(REST$updateResource("collections", resourceUUID, newResourceContent),
                 throws_error(404))
@@ -236,8 +249,9 @@ test_that("createResource calls REST service properly", {
 
     httpRequest <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            httpRequest, FakeHttpParser$new())
+    REST <- RESTService$new("token", "host", 
+                            httpRequest, FakeHttpParser$new(),
+                            0, "webDavHost")
 
     REST$createResource("collections", resourceContent)
 
@@ -252,8 +266,9 @@ test_that("createResource parses server response", {
     resourceContent <- list(newName = "Brand new shiny name")
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     httpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "host", "webDavHost",
-                            FakeHttpRequest$new(), httpParser)
+    REST <- RESTService$new("token", "host",
+                            FakeHttpRequest$new(), httpParser,
+                            0, "webDavHost")
 
     REST$createResource("collections", resourceContent)
 
@@ -265,9 +280,10 @@ test_that("createResource raises exception if response contains errors field", {
     resourceUUID <- "aaaaa-j7d0g-ccccccccccccccc"
     serverResponse <- list(errors = 404)
     resourceContent <- list(newName = "Brand new shiny name")
-    REST <- RESTService$new("token", "host", "webDavHost",
+    REST <- RESTService$new("token", "host", 
                             FakeHttpRequest$new(NULL, serverResponse),
-                            FakeHttpParser$new())
+                            FakeHttpParser$new(),
+                            0, "webDavHost")
     
     expect_that(REST$createResource("collections", resourceContent),
                 throws_error(404))
@@ -280,8 +296,9 @@ test_that("create calls REST service properly", {
     fakeHttp <- FakeHttpRequest$new(expectedURL)
     fakeHttpParser <- FakeHttpParser$new()
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$create("file", uuid)
 
@@ -297,8 +314,9 @@ test_that("create raises exception if server response code is not between 200 an
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$create("file", uuid),
                 throws_error("Server code: 404"))
@@ -311,8 +329,9 @@ test_that("delete calls REST service properly", {
     fakeHttp <- FakeHttpRequest$new(expectedURL)
     fakeHttpParser <- FakeHttpParser$new()
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$delete("file", uuid)
 
@@ -328,8 +347,9 @@ test_that("delete raises exception if server response code is not between 200 an
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$delete("file", uuid),
                 throws_error("Server code: 404"))
@@ -342,8 +362,9 @@ test_that("move calls REST service properly", {
     fakeHttp <- FakeHttpRequest$new(expectedURL)
     fakeHttpParser <- FakeHttpParser$new()
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$move("file", "newDestination/file", uuid)
 
@@ -360,8 +381,9 @@ test_that("move raises exception if server response code is not between 200 and
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$move("file", "newDestination/file", uuid),
                 throws_error("Server code: 404"))
@@ -377,8 +399,9 @@ test_that("getCollectionContent retreives correct content from WebDAV server", {
 
     fakeHttp <- FakeHttpRequest$new(expectedURL, returnContent)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     returnResult <- REST$getCollectionContent(uuid)
     returnedContentMatchExpected <- all.equal(returnResult,
@@ -394,8 +417,9 @@ test_that("getCollectionContent raises exception if server returns empty respons
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Response is empty, request may be misconfigured"))
@@ -405,8 +429,9 @@ test_that("getCollectionContent parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            FakeHttpRequest$new(), fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/", 
+                            FakeHttpRequest$new(), fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$getCollectionContent(uuid)
 
@@ -419,8 +444,9 @@ test_that("getCollectionContent raises exception if server returns empty respons
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Response is empty, request may be misconfigured"))
@@ -434,8 +460,9 @@ test_that(paste("getCollectionContent raises exception if server",
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$getCollectionContent(uuid),
                 throws_error("Server code: 404"))
@@ -451,8 +478,9 @@ test_that("getResourceSize calls REST service properly", {
     response$content <- c(6, 2, 931, 12003)
     fakeHttp <- FakeHttpRequest$new(expectedURL, response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     returnResult <- REST$getResourceSize("file", uuid)
     returnedContentMatchExpected <- all.equal(returnResult,
@@ -469,8 +497,9 @@ test_that("getResourceSize raises exception if server returns empty response", {
     response <- ""
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$getResourceSize("file", uuid),
                 throws_error("Response is empty, request may be misconfigured"))
@@ -484,8 +513,9 @@ test_that(paste("getResourceSize raises exception if server",
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$getResourceSize("file", uuid),
                 throws_error("Server code: 404"))
@@ -495,8 +525,9 @@ test_that("getResourceSize parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            FakeHttpRequest$new(), fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/", 
+                            FakeHttpRequest$new(), fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$getResourceSize("file", uuid)
 
@@ -513,8 +544,9 @@ test_that("read calls REST service properly", {
 
     fakeHttp <- FakeHttpRequest$new(expectedURL, serverResponse)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     returnResult <- REST$read("file", uuid, "text", 1024, 512)
 
@@ -531,8 +563,9 @@ test_that("read raises exception if server response code is not between 200 and
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$read("file", uuid),
                 throws_error("Server code: 404"))
@@ -543,8 +576,9 @@ test_that("read raises exception if contentType is not valid", {
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttp <- FakeHttpRequest$new()
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$read("file", uuid, "some invalid content type"),
                 throws_error("Invalid contentType. Please use text or raw."))
@@ -554,8 +588,9 @@ test_that("read parses server response", {
 
     uuid <- "aaaaa-j7d0g-ccccccccccccccc"
     fakeHttpParser <- FakeHttpParser$new()
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            FakeHttpRequest$new(), fakeHttpParser)
+    REST <- RESTService$new("token", "https://host/", 
+                            FakeHttpRequest$new(), fakeHttpParser,
+                            0, "https://webDavHost/")
 
     REST$read("file", uuid, "text", 1024, 512)
 
@@ -569,8 +604,9 @@ test_that("write calls REST service properly", {
     expectedURL <- "https://webDavHost/c=aaaaa-j7d0g-ccccccccccccccc/file"
     fakeHttp <- FakeHttpRequest$new(expectedURL)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, FakeHttpParser$new())
+    REST <- RESTService$new("token", "https://host/", 
+                            fakeHttp, FakeHttpParser$new(),
+                            0, "https://webDavHost/")
 
     REST$write("file", uuid, fileContent, "text/html")
 
@@ -588,8 +624,9 @@ test_that("write raises exception if server response code is not between 200 and
     response$status_code <- 404
     fakeHttp <- FakeHttpRequest$new(serverResponse = response)
 
-    REST <- RESTService$new("token", "https://host/", "https://webDavHost/",
-                            fakeHttp, HttpParser$new())
+    REST <- RESTService$new("token", "https://host/",
+                            fakeHttp, HttpParser$new(),
+                            0, "https://webDavHost/")
 
     expect_that(REST$write("file", uuid, fileContent, "text/html"),
                 throws_error("Server code: 404"))