}
func (conn *Conn) CollectionGet(ctx context.Context, options arvados.GetOptions) (arvados.Collection, error) {
+ downstream := options.ForwardedFor
+ options.ForwardedFor = conn.cluster.ClusterID + "-" + downstream
if len(options.UUID) == 27 {
// UUID is really a UUID
c, err := conn.chooseBackend(options.UUID).CollectionGet(ctx, options)
// UUID is a PDH
first := make(chan arvados.Collection, 1)
err := conn.tryLocalThenRemotes(ctx, func(ctx context.Context, remoteID string, be backend) error {
+ if remoteID != "" && strings.Contains(downstream, remoteID) {
+ return notFoundError{}
+ }
c, err := be.CollectionGet(ctx, options)
if err != nil {
return err
UUID string `json:"uuid"`
Select []string `json:"select"`
IncludeTrash bool `json:"include_trash"`
+ ForwardedFor string `json:"forwarded_for"`
}
type UntrashOptions struct {