15720: Merge branch 'master' into 15720-fed-user-list
authorTom Clegg <tclegg@veritasgenetics.com>
Mon, 25 Nov 2019 20:20:21 +0000 (15:20 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Mon, 25 Nov 2019 20:20:21 +0000 (15:20 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

1  2 
lib/controller/federation/conn.go
lib/controller/federation/generated.go
lib/controller/federation/list.go
lib/controller/federation/list_test.go
lib/controller/federation/login_test.go
lib/controller/router/router_test.go
lib/controller/rpc/conn.go

Simple merge
index 961cd5a401e16b0bdda33507496b1b6a2ef5b7b9,fb91a84960547d6dc6099e2e7e3ca69fb162afd8..0a66644985662596c06f2d706035a8b2097a99de
@@@ -16,9 -17,11 +17,11 @@@ import 
  // -- this file is auto-generated -- do not edit -- edit list.go and run "go generate" instead --
  //
  
 -func (conn *Conn) ContainerList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerList, error) {
 +func (conn *Conn) generated_ContainerList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerList, error) {
        var mtx sync.Mutex
        var merged arvados.ContainerList
+       var needSort atomic.Value
+       needSort.Store(false)
        err := conn.splitListRequest(ctx, options, func(ctx context.Context, _ string, backend arvados.API, options arvados.ListOptions) ([]string, error) {
                cl, err := backend.ContainerList(ctx, options)
                if err != nil {
        return merged, err
  }
  
 -func (conn *Conn) SpecimenList(ctx context.Context, options arvados.ListOptions) (arvados.SpecimenList, error) {
 +func (conn *Conn) generated_SpecimenList(ctx context.Context, options arvados.ListOptions) (arvados.SpecimenList, error) {
        var mtx sync.Mutex
        var merged arvados.SpecimenList
+       var needSort atomic.Value
+       needSort.Store(false)
        err := conn.splitListRequest(ctx, options, func(ctx context.Context, _ string, backend arvados.API, options arvados.ListOptions) ([]string, error) {
                cl, err := backend.SpecimenList(ctx, options)
                if err != nil {
                }
                return uuids, nil
        })
-       sort.Slice(merged.Items, func(i, j int) bool { return merged.Items[i].UUID < merged.Items[j].UUID })
+       if needSort.Load().(bool) {
+               // Apply the default/implied order, "modified_at desc"
+               sort.Slice(merged.Items, func(i, j int) bool {
+                       mi, mj := merged.Items[i].ModifiedAt, merged.Items[j].ModifiedAt
+                       return mj.Before(mi)
+               })
+       }
+       if merged.Items == nil {
+               // Return empty results as [], not null
+               // (https://github.com/golang/go/issues/27589 might be
+               // a better solution in the future)
+               merged.Items = []arvados.Specimen{}
+       }
        return merged, err
  }
 +
 +func (conn *Conn) generated_UserList(ctx context.Context, options arvados.ListOptions) (arvados.UserList, error) {
 +      var mtx sync.Mutex
 +      var merged arvados.UserList
 +      err := conn.splitListRequest(ctx, options, func(ctx context.Context, _ string, backend arvados.API, options arvados.ListOptions) ([]string, error) {
 +              cl, err := backend.UserList(ctx, options)
 +              if err != nil {
 +                      return nil, err
 +              }
 +              mtx.Lock()
 +              defer mtx.Unlock()
 +              if len(merged.Items) == 0 {
 +                      merged = cl
 +              } else {
 +                      merged.Items = append(merged.Items, cl.Items...)
 +              }
 +              uuids := make([]string, 0, len(cl.Items))
 +              for _, item := range cl.Items {
 +                      uuids = append(uuids, item.UUID)
 +              }
 +              return uuids, nil
 +      })
 +      sort.Slice(merged.Items, func(i, j int) bool { return merged.Items[i].UUID < merged.Items[j].UUID })
 +      return merged, err
 +}
index 7178d7b0aff630bc28834af3042129b4a1e9983b,54f59812a0bceaf3706dc35bdf599d8d58a8f7be..26b6b254e8e9fbdbb59638ca441412ade5575abb
@@@ -20,9 -21,11 +21,11 @@@ import 
  // CollectionList is used as a template to auto-generate List()
  // methods for other types; see generate.go.
  
 -func (conn *Conn) CollectionList(ctx context.Context, options arvados.ListOptions) (arvados.CollectionList, error) {
 +func (conn *Conn) generated_CollectionList(ctx context.Context, options arvados.ListOptions) (arvados.CollectionList, error) {
        var mtx sync.Mutex
        var merged arvados.CollectionList
+       var needSort atomic.Value
+       needSort.Store(false)
        err := conn.splitListRequest(ctx, options, func(ctx context.Context, _ string, backend arvados.API, options arvados.ListOptions) ([]string, error) {
                cl, err := backend.CollectionList(ctx, options)
                if err != nil {
index 5a630a9450ef861ed7c91c5f001f3fa642378638,35d201028b96e3a2a0c3033e4a5d06fe68f532ff..a9c4f588f12a38b017d1c89b2995263a8c12d3d6
@@@ -8,9 -8,18 +8,10 @@@ import 
        "context"
        "fmt"
        "net/http"
 -      "net/url"
 -      "os"
+       "sort"
 -      "testing"
  
 -      "git.curoverse.com/arvados.git/lib/controller/router"
 -      "git.curoverse.com/arvados.git/lib/controller/rpc"
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
 -      "git.curoverse.com/arvados.git/sdk/go/auth"
 -      "git.curoverse.com/arvados.git/sdk/go/ctxlog"
 -      "git.curoverse.com/arvados.git/sdk/go/httpserver"
        check "gopkg.in/check.v1"
  )
  
Simple merge
Simple merge