test/cmd: implement verifyHandler
This commit is contained in:
parent
3cd3a417cb
commit
4ff209349c
@ -59,6 +59,7 @@ var (
|
|||||||
"status-storage-403", "status-storage-404", "status-storage-410", "status-storage-422", "status-storage-500", "status-storage-503",
|
"status-storage-403", "status-storage-404", "status-storage-410", "status-storage-422", "status-storage-500", "status-storage-503",
|
||||||
"status-batch-resume-206", "batch-resume-fail-fallback", "return-expired-action", "return-expired-action-forever", "return-invalid-size",
|
"status-batch-resume-206", "batch-resume-fail-fallback", "return-expired-action", "return-expired-action-forever", "return-invalid-size",
|
||||||
"object-authenticated", "storage-download-retry", "storage-upload-retry", "unknown-oid",
|
"object-authenticated", "storage-download-retry", "storage-upload-retry", "unknown-oid",
|
||||||
|
"send-verify-action",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -98,6 +99,7 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
mux.HandleFunc("/storage/", storageHandler)
|
mux.HandleFunc("/storage/", storageHandler)
|
||||||
|
mux.HandleFunc("/verify", verifyHandler)
|
||||||
mux.HandleFunc("/redirect307/", redirect307Handler)
|
mux.HandleFunc("/redirect307/", redirect307Handler)
|
||||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
id, ok := reqId(w)
|
id, ok := reqId(w)
|
||||||
@ -402,6 +404,15 @@ func lfsBatchHandler(w http.ResponseWriter, r *http.Request, id, repo string) {
|
|||||||
}
|
}
|
||||||
o.Actions[action] = a
|
o.Actions[action] = a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if handler == "send-verify-action" {
|
||||||
|
o.Actions["verify"] = lfsLink{
|
||||||
|
Href: server.URL + "/verify",
|
||||||
|
Header: map[string]string{
|
||||||
|
"repo": repo,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if testingChunked && addAction {
|
if testingChunked && addAction {
|
||||||
@ -458,6 +469,46 @@ func serveExpired(repo string) {
|
|||||||
var batchResumeFailFallbackStorageAttempts = 0
|
var batchResumeFailFallbackStorageAttempts = 0
|
||||||
var tusStorageAttempts = 0
|
var tusStorageAttempts = 0
|
||||||
|
|
||||||
|
var (
|
||||||
|
vmu sync.Mutex
|
||||||
|
verifyCounts = make(map[string]int)
|
||||||
|
verifyRetryRe = regexp.MustCompile(`verify-fail-(\d+)-times?$`)
|
||||||
|
)
|
||||||
|
|
||||||
|
func verifyHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
repo := r.Header.Get("repo")
|
||||||
|
var payload struct {
|
||||||
|
Oid string `json:"oid"`
|
||||||
|
Size int64 `json:"size"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||||
|
writeLFSError(w, http.StatusUnprocessableEntity, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var max int
|
||||||
|
if matches := verifyRetryRe.FindStringSubmatch(repo); len(matches) < 2 {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
max, _ = strconv.Atoi(matches[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
key := strings.Join([]string{repo, payload.Oid}, ":")
|
||||||
|
|
||||||
|
vmu.Lock()
|
||||||
|
verifyCounts[key] = verifyCounts[key] + 1
|
||||||
|
count := verifyCounts[key]
|
||||||
|
vmu.Unlock()
|
||||||
|
|
||||||
|
if count < max {
|
||||||
|
writeLFSError(w, http.StatusServiceUnavailable, fmt.Sprintf(
|
||||||
|
"intentionally failing verify request %d (out of %d)", count, max,
|
||||||
|
))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// handles any /storage/{oid} requests
|
// handles any /storage/{oid} requests
|
||||||
func storageHandler(w http.ResponseWriter, r *http.Request) {
|
func storageHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
id, ok := reqId(w)
|
id, ok := reqId(w)
|
||||||
|
Loading…
Reference in New Issue
Block a user