package federation
import (
+ "bytes"
"context"
"crypto/md5"
+ "encoding/json"
"errors"
"fmt"
"net/http"
"regexp"
"strings"
+ "git.curoverse.com/arvados.git/lib/config"
"git.curoverse.com/arvados.git/lib/controller/railsproxy"
"git.curoverse.com/arvados.git/lib/controller/rpc"
"git.curoverse.com/arvados.git/sdk/go/arvados"
if all404 {
return notFoundError{}
}
- // FIXME: choose appropriate HTTP status
- return fmt.Errorf("errors: %v", errs)
+ return httpErrorf(http.StatusBadGateway, "errors: %v", errs)
}
func (conn *Conn) CollectionCreate(ctx context.Context, options arvados.CreateOptions) (arvados.Collection, error) {
return fmt.Sprintf("%x+%d", h.Sum(nil), size)
}
+func (conn *Conn) ConfigGet(ctx context.Context) (json.RawMessage, error) {
+ var buf bytes.Buffer
+ err := config.ExportJSON(&buf, conn.cluster)
+ return json.RawMessage(buf.Bytes()), err
+}
+
func (conn *Conn) CollectionGet(ctx context.Context, options arvados.GetOptions) (arvados.Collection, error) {
if len(options.UUID) == 27 {
// UUID is really a UUID
// hash+size+hints; only hash+size need to
// match the computed PDH.
if pdh := portableDataHash(c.ManifestText); pdh != options.UUID && !strings.HasPrefix(options.UUID, pdh+"+") {
- ctxlog.FromContext(ctx).Warnf("bad portable data hash %q received from remote %q (expected %q)", pdh, remoteID, options.UUID)
- return notFoundError{}
+ err = httpErrorf(http.StatusBadGateway, "bad portable data hash %q received from remote %q (expected %q)", pdh, remoteID, options.UUID)
+ ctxlog.FromContext(ctx).Warn(err)
+ return err
}
if remoteID != "" {
c.ManifestText = rewriteManifest(c.ManifestText, remoteID)