aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-11-29 10:52:32 +0100
committerMartin Polden <mpolden@mpolden.no>2023-11-29 16:12:02 +0100
commit3e544830df072f5efdfebf68cb01a73e04a3956d (patch)
tree5f8b5eba38de3a528b51b135c7ac82dcc3606e88
parent20d4f112c5292a4646635a93f707f662140e510b (diff)
Move OperationResult to cmd package
-rw-r--r--client/go/internal/cli/cmd/document.go14
-rw-r--r--client/go/internal/cli/cmd/result.go (renamed from client/go/internal/util/operation_result.go)6
-rw-r--r--client/go/internal/cli/cmd/visit.go48
3 files changed, 32 insertions, 36 deletions
diff --git a/client/go/internal/cli/cmd/document.go b/client/go/internal/cli/cmd/document.go
index 420936cffc0..72b853de94e 100644
--- a/client/go/internal/cli/cmd/document.go
+++ b/client/go/internal/cli/cmd/document.go
@@ -104,22 +104,22 @@ func readDocument(id string, timeoutSecs, waitSecs int, printCurl bool, cli *CLI
return printResult(cli, operationResult(true, document.Document{Id: docId}, service, result), true)
}
-func operationResult(read bool, doc document.Document, service *vespa.Service, result document.Result) util.OperationResult {
+func operationResult(read bool, doc document.Document, service *vespa.Service, result document.Result) OperationResult {
if result.Err != nil {
- return util.Failure(result.Err.Error())
+ return Failure(result.Err.Error())
}
bodyReader := bytes.NewReader(result.Body)
if result.HTTPStatus == 200 {
if read {
- return util.SuccessWithPayload("Read "+doc.Id.String(), util.ReaderToJSON(bodyReader))
+ return SuccessWithPayload("Read "+doc.Id.String(), util.ReaderToJSON(bodyReader))
} else {
- return util.Success(doc.Operation.String() + " " + doc.Id.String())
+ return Success(doc.Operation.String() + " " + doc.Id.String())
}
}
if result.HTTPStatus/100 == 4 {
- return util.FailureWithPayload("Invalid document operation: Status "+strconv.Itoa(result.HTTPStatus), util.ReaderToJSON(bodyReader))
+ return FailureWithPayload("Invalid document operation: Status "+strconv.Itoa(result.HTTPStatus), util.ReaderToJSON(bodyReader))
}
- return util.FailureWithPayload(service.Description()+" at "+service.BaseURL+": Status "+strconv.Itoa(result.HTTPStatus), util.ReaderToJSON(bodyReader))
+ return FailureWithPayload(service.Description()+" at "+service.BaseURL+": Status "+strconv.Itoa(result.HTTPStatus), util.ReaderToJSON(bodyReader))
}
func newDocumentCmd(cli *CLI) *cobra.Command {
@@ -270,7 +270,7 @@ func documentService(cli *CLI, waitSecs int) (*vespa.Service, error) {
return waiter.Service(target, cli.config.cluster())
}
-func printResult(cli *CLI, result util.OperationResult, payloadOnlyOnSuccess bool) error {
+func printResult(cli *CLI, result OperationResult, payloadOnlyOnSuccess bool) error {
out := cli.Stdout
if !result.Success {
out = cli.Stderr
diff --git a/client/go/internal/util/operation_result.go b/client/go/internal/cli/cmd/result.go
index 7dc60f92e1d..65b7ec4ca63 100644
--- a/client/go/internal/util/operation_result.go
+++ b/client/go/internal/cli/cmd/result.go
@@ -1,8 +1,4 @@
-// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-// A struct containing the result of an operation
-// Author: bratseth
-
-package util
+package cmd
type OperationResult struct {
Success bool
diff --git a/client/go/internal/cli/cmd/visit.go b/client/go/internal/cli/cmd/visit.go
index f6e2f64e534..6ac1b3b231f 100644
--- a/client/go/internal/cli/cmd/visit.go
+++ b/client/go/internal/cli/cmd/visit.go
@@ -157,26 +157,26 @@ func getEpoch(timeStamp string) (int64, error) {
return t, nil
}
-func checkArguments(vArgs visitArgs) (res util.OperationResult) {
+func checkArguments(vArgs visitArgs) (res OperationResult) {
if vArgs.slices > 0 || vArgs.sliceId > -1 {
if !(vArgs.slices > 0 && vArgs.sliceId > -1) {
- return util.Failure("Both 'slices' and 'slice-id' must be set")
+ return Failure("Both 'slices' and 'slice-id' must be set")
}
if vArgs.sliceId >= vArgs.slices {
- return util.Failure("The 'slice-id' must be in range [0, slices)")
+ return Failure("The 'slice-id' must be in range [0, slices)")
}
}
// to and from will support RFC3339 format soon, add more validation then
if vArgs.from != "" {
_, err := getEpoch(vArgs.from)
if err != nil {
- return util.Failure("Invalid 'from' argument: '" + vArgs.from + "': " + err.Error())
+ return Failure("Invalid 'from' argument: '" + vArgs.from + "': " + err.Error())
}
}
if vArgs.to != "" {
_, err := getEpoch(vArgs.to)
if err != nil {
- return util.Failure("Invalid 'to' argument: '" + vArgs.to + "': " + err.Error())
+ return Failure("Invalid 'to' argument: '" + vArgs.to + "': " + err.Error())
}
}
for _, b := range vArgs.bucketSpaces {
@@ -186,10 +186,10 @@ func checkArguments(vArgs visitArgs) (res util.OperationResult) {
"global":
// Do nothing
default:
- return util.Failure("Invalid 'bucket-space' argument '" + b + "', must be 'default' or 'global'")
+ return Failure("Invalid 'bucket-space' argument '" + b + "', must be 'default' or 'global'")
}
}
- return util.Success("")
+ return Success("")
}
type HandlersInfo struct {
@@ -208,11 +208,11 @@ func parseHandlersOutput(r io.Reader) (*HandlersInfo, error) {
return &handlersInfo, err
}
-func probeHandler(service *vespa.Service, cli *CLI) (res util.OperationResult) {
+func probeHandler(service *vespa.Service, cli *CLI) (res OperationResult) {
urlPath := service.BaseURL + "/"
url, urlParseError := url.Parse(urlPath)
if urlParseError != nil {
- return util.Failure("Invalid request path: '" + urlPath + "': " + urlParseError.Error())
+ return Failure("Invalid request path: '" + urlPath + "': " + urlParseError.Error())
}
request := &http.Request{
URL: url,
@@ -221,20 +221,20 @@ func probeHandler(service *vespa.Service, cli *CLI) (res util.OperationResult) {
timeout := time.Duration(90) * time.Second
response, err := service.Do(request, timeout)
if err != nil {
- return util.Failure("Request failed: " + err.Error())
+ return Failure("Request failed: " + err.Error())
}
defer response.Body.Close()
if response.StatusCode == 200 {
handlersInfo, err := parseHandlersOutput(response.Body)
if err != nil || len(handlersInfo.Handlers) == 0 {
cli.printWarning("Could not parse JSON response from"+urlPath, err.Error())
- return util.Failure("Bad endpoint")
+ return Failure("Bad endpoint")
}
for _, h := range handlersInfo.Handlers {
if strings.HasSuffix(h.HandlerClass, "DocumentV1ApiHandler") {
for _, binding := range h.ServerBindings {
if strings.Contains(binding, "/document/v1/") {
- return util.Success("handler OK")
+ return Success("handler OK")
}
}
w := fmt.Sprintf("expected /document/v1/ binding, but got: %v", h.ServerBindings)
@@ -242,13 +242,13 @@ func probeHandler(service *vespa.Service, cli *CLI) (res util.OperationResult) {
}
}
cli.printWarning("Missing /document/v1/ API; add <document-api /> to the container cluster declaration in services.xml")
- return util.Failure("Missing /document/v1 API")
+ return Failure("Missing /document/v1 API")
} else {
- return util.FailureWithPayload(service.Description()+" at "+request.URL.Host+": "+response.Status, util.ReaderToJSON(response.Body))
+ return FailureWithPayload(service.Description()+" at "+request.URL.Host+": "+response.Status, util.ReaderToJSON(response.Body))
}
}
-func visitClusters(vArgs *visitArgs, service *vespa.Service) (res util.OperationResult) {
+func visitClusters(vArgs *visitArgs, service *vespa.Service) (res OperationResult) {
clusters := []string{
vArgs.contentCluster,
}
@@ -294,7 +294,7 @@ func probeVisit(vArgs *visitArgs, service *vespa.Service) []string {
return clusters
}
-func runVisit(vArgs *visitArgs, service *vespa.Service) (res util.OperationResult) {
+func runVisit(vArgs *visitArgs, service *vespa.Service) (res OperationResult) {
vArgs.debugPrint(fmt.Sprintf("trying to visit: '%s'", vArgs.contentCluster))
var totalDocuments int = 0
var continuationToken string
@@ -340,7 +340,7 @@ func quoteArgForUrl(arg string) string {
return buf.String()
}
-func runOneVisit(vArgs *visitArgs, service *vespa.Service, contToken string) (*VespaVisitOutput, util.OperationResult) {
+func runOneVisit(vArgs *visitArgs, service *vespa.Service, contToken string) (*VespaVisitOutput, OperationResult) {
urlPath := service.BaseURL + "/document/v1/?cluster=" + quoteArgForUrl(vArgs.contentCluster)
if vArgs.fieldSet != "" {
urlPath = urlPath + "&fieldSet=" + quoteArgForUrl(vArgs.fieldSet)
@@ -370,7 +370,7 @@ func runOneVisit(vArgs *visitArgs, service *vespa.Service, contToken string) (*V
}
url, urlParseError := url.Parse(urlPath)
if urlParseError != nil {
- return nil, util.Failure("Invalid request path: '" + urlPath + "': " + urlParseError.Error())
+ return nil, Failure("Invalid request path: '" + urlPath + "': " + urlParseError.Error())
}
request := &http.Request{
URL: url,
@@ -379,7 +379,7 @@ func runOneVisit(vArgs *visitArgs, service *vespa.Service, contToken string) (*V
timeout := time.Duration(900) * time.Second
response, err := service.Do(request, timeout)
if err != nil {
- return nil, util.Failure("Request failed: " + err.Error())
+ return nil, Failure("Request failed: " + err.Error())
}
defer response.Body.Close()
vvo, err := parseVisitOutput(response.Body)
@@ -390,16 +390,16 @@ func runOneVisit(vArgs *visitArgs, service *vespa.Service, contToken string) (*V
vArgs.cli.printWarning(fmt.Sprintf("Inconsistent contents from: %v", url))
vArgs.cli.printWarning(fmt.Sprintf("claimed count: %d", vvo.DocumentCount))
vArgs.cli.printWarning(fmt.Sprintf("document blobs: %d", len(vvo.Documents)))
- return nil, util.Failure("Inconsistent contents from document API")
+ return nil, Failure("Inconsistent contents from document API")
}
- return vvo, util.Success("visited " + vArgs.contentCluster)
+ return vvo, Success("visited " + vArgs.contentCluster)
} else {
- return nil, util.Failure("error reading response: " + err.Error())
+ return nil, Failure("error reading response: " + err.Error())
}
} else if response.StatusCode/100 == 4 {
- return vvo, util.FailureWithPayload("Invalid document operation: "+response.Status, util.ReaderToJSON(response.Body))
+ return vvo, FailureWithPayload("Invalid document operation: "+response.Status, util.ReaderToJSON(response.Body))
} else {
- return vvo, util.FailureWithPayload(service.Description()+" at "+request.URL.Host+": "+response.Status, util.ReaderToJSON(response.Body))
+ return vvo, FailureWithPayload(service.Description()+" at "+request.URL.Host+": "+response.Status, util.ReaderToJSON(response.Body))
}
}