15848: Convert timestamps from pointer to value fields.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 21 Nov 2019 19:24:19 +0000 (14:24 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 21 Nov 2019 19:24:19 +0000 (14:24 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

apps/workbench/test/controllers/projects_controller_test.rb
lib/controller/federation/generated.go
lib/controller/federation/list.go
sdk/go/arvados/collection.go
sdk/go/arvados/container.go
sdk/go/arvados/fs_collection.go
sdk/go/arvados/fs_deferred.go
sdk/go/arvados/specimen.go
services/keep-balance/collection.go
services/keep-balance/collection_test.go

index dd828952be2fb828e8f1e1b11b1cfc1616515683..27d7dedc91d070bd4da02a1f80ab87c4c9a9563e 100644 (file)
@@ -151,7 +151,7 @@ class ProjectsControllerTest < ActionController::TestCase
   end
 
   ['', ' asc', ' desc'].each do |direction|
-    test "projects#show tab partial orders correctly by #{direction}" do
+    test "projects#show tab partial orders correctly by created_at#{direction}" do
       _test_tab_content_order direction
     end
   end
index 9d5a962887e37b267c3cd1070932266200a3b44d..caf454e9ab3d25b0537f3de73e63c2a2a71c8862 100755 (executable)
@@ -45,11 +45,7 @@ func (conn *Conn) ContainerList(ctx context.Context, options arvados.ListOptions
                // 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
-                       if mi == nil || mj == nil {
-                               return false
-                       } else {
-                               return mj.Before(*mi)
-                       }
+                       return mj.Before(mi)
                })
        }
        return merged, err
@@ -83,11 +79,7 @@ func (conn *Conn) SpecimenList(ctx context.Context, options arvados.ListOptions)
                // 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
-                       if mi == nil || mj == nil {
-                               return false
-                       } else {
-                               return mj.Before(*mi)
-                       }
+                       return mj.Before(mi)
                })
        }
        return merged, err
index c215a4d03b2e6cc6af6f1be0fa2a6b752ddcaabe..4bd32fac20e9e82c38f5aa939518e62008fc3545 100644 (file)
@@ -49,11 +49,7 @@ func (conn *Conn) CollectionList(ctx context.Context, options arvados.ListOption
                // 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
-                       if mi == nil || mj == nil {
-                               return false
-                       } else {
-                               return mj.Before(*mi)
-                       }
+                       return mj.Before(mi)
                })
        }
        return merged, err
index 5b919bea74a325173109c5f2cc12a56053116f56..e8b0f9cc986b7219cac645c3b8e2771abf0f3bb4 100644 (file)
@@ -22,15 +22,17 @@ type Collection struct {
        ManifestText              string                 `json:"manifest_text"`
        UnsignedManifestText      string                 `json:"unsigned_manifest_text"`
        Name                      string                 `json:"name"`
-       CreatedAt                 *time.Time             `json:"created_at"`
-       ModifiedAt                *time.Time             `json:"modified_at"`
+       CreatedAt                 time.Time              `json:"created_at"`
+       ModifiedAt                time.Time              `json:"modified_at"`
+       ModifiedByClientUUID      string                 `json:"modified_by_client_uuid"`
+       ModifiedByUserUUID        string                 `json:"modified_by_user_uuid"`
        PortableDataHash          string                 `json:"portable_data_hash"`
        ReplicationConfirmed      *int                   `json:"replication_confirmed"`
        ReplicationConfirmedAt    *time.Time             `json:"replication_confirmed_at"`
        ReplicationDesired        *int                   `json:"replication_desired"`
        StorageClassesDesired     []string               `json:"storage_classes_desired"`
        StorageClassesConfirmed   []string               `json:"storage_classes_confirmed"`
-       StorageClassesConfirmedAt *time.Time             `json:"storage_classes_confirmed_at"`
+       StorageClassesConfirmedAt time.Time              `json:"storage_classes_confirmed_at"`
        DeleteAt                  *time.Time             `json:"delete_at"`
        IsTrashed                 bool                   `json:"is_trashed"`
        Properties                map[string]interface{} `json:"properties"`
index 0a75b236e8f52ff56e40493cf4813d2c66f42a4c..1d3b0962f7da1ff93d386f067195b977ef02de10 100644 (file)
@@ -9,10 +9,10 @@ import "time"
 // Container is an arvados#container resource.
 type Container struct {
        UUID                 string                 `json:"uuid"`
-       CreatedAt            *time.Time             `json:"created_at"`
+       CreatedAt            time.Time              `json:"created_at"`
        ModifiedByClientUUID string                 `json:"modified_by_client_uuid"`
        ModifiedByUserUUID   string                 `json:"modified_by_user_uuid"`
-       ModifiedAt           *time.Time             `json:"modified_at"`
+       ModifiedAt           time.Time              `json:"modified_at"`
        Command              []string               `json:"command"`
        ContainerImage       string                 `json:"container_image"`
        Cwd                  string                 `json:"cwd"`
index b3e6aa96e46473a11a6a839aa1a3e35693b25cdb..40c8908024a88f87f8979d7dff653cbcb42a2239 100644 (file)
@@ -49,11 +49,9 @@ type collectionFileSystem struct {
 
 // FileSystem returns a CollectionFileSystem for the collection.
 func (c *Collection) FileSystem(client apiClient, kc keepClient) (CollectionFileSystem, error) {
-       var modTime time.Time
-       if c.ModifiedAt == nil {
+       modTime := c.ModifiedAt
+       if modTime.IsZero() {
                modTime = time.Now()
-       } else {
-               modTime = *c.ModifiedAt
        }
        fs := &collectionFileSystem{
                uuid: c.UUID,
index a84f64fe7e254334a00a42226d0003f682d53684..439eaec7c2a5dbde49f2fd2851551238a22166ec 100644 (file)
@@ -12,10 +12,8 @@ import (
 )
 
 func deferredCollectionFS(fs FileSystem, parent inode, coll Collection) inode {
-       var modTime time.Time
-       if coll.ModifiedAt != nil {
-               modTime = *coll.ModifiedAt
-       } else {
+       modTime := coll.ModifiedAt
+       if modTime.IsZero() {
                modTime = time.Now()
        }
        placeholder := &treenode{
index 3b3b1629fe0d268edfdc57d6b887bc8c4750658c..b561fb20ae6c79e89f4bede1cb553560b1eec073 100644 (file)
@@ -7,11 +7,13 @@ package arvados
 import "time"
 
 type Specimen struct {
-       UUID       string                 `json:"uuid"`
-       OwnerUUID  string                 `json:"owner_uuid"`
-       CreatedAt  *time.Time             `json:"created_at"`
-       ModifiedAt *time.Time             `json:"modified_at"`
-       Properties map[string]interface{} `json:"properties"`
+       UUID                 string                 `json:"uuid"`
+       OwnerUUID            string                 `json:"owner_uuid"`
+       CreatedAt            time.Time              `json:"created_at"`
+       ModifiedAt           time.Time              `json:"modified_at"`
+       ModifiedByClientUUID string                 `json:"modified_by_client_uuid"`
+       ModifiedByUserUUID   string                 `json:"modified_by_user_uuid"`
+       Properties           map[string]interface{} `json:"properties"`
 }
 
 type SpecimenList struct {
index 534928bc82340bb23574f71ceac85c7872d8deb0..73d129e9cdac8d0048f0622746f7b630e056b21c 100644 (file)
@@ -80,7 +80,7 @@ func EachCollection(c *arvados.Client, pageSize int, f func(arvados.Collection)
                        return err
                }
                for _, coll := range page.Items {
-                       if last.ModifiedAt != nil && *last.ModifiedAt == *coll.ModifiedAt && last.UUID >= coll.UUID {
+                       if last.ModifiedAt == coll.ModifiedAt && last.UUID >= coll.UUID {
                                continue
                        }
                        callCount++
@@ -92,9 +92,9 @@ func EachCollection(c *arvados.Client, pageSize int, f func(arvados.Collection)
                }
                if len(page.Items) == 0 && !gettingExactTimestamp {
                        break
-               } else if last.ModifiedAt == nil {
+               } else if last.ModifiedAt.IsZero() {
                        return fmt.Errorf("BUG: Last collection on the page (%s) has no modified_at timestamp; cannot make progress", last.UUID)
-               } else if len(page.Items) > 0 && *last.ModifiedAt == filterTime {
+               } else if len(page.Items) > 0 && last.ModifiedAt == filterTime {
                        // If we requested time>=X and never got a
                        // time>X then we might not have received all
                        // items with time==X yet. Switch to
@@ -135,7 +135,7 @@ func EachCollection(c *arvados.Client, pageSize int, f func(arvados.Collection)
                        // avoiding that would add overhead in the
                        // overwhelmingly common cases, so we don't
                        // bother.
-                       filterTime = *last.ModifiedAt
+                       filterTime = last.ModifiedAt
                        params.Filters = []arvados.Filter{{
                                Attr:     "modified_at",
                                Operator: ">=",
index a2200e1db90a4ddf69fd65112c432df9bbcba2c6..e6925c4afd7d32765100f5253f89493a648f12c5 100644 (file)
@@ -30,7 +30,7 @@ func (s *integrationSuite) TestIdenticalTimestamps(c *check.C) {
                        var lastMod time.Time
                        sawUUID := make(map[string]bool)
                        err := EachCollection(s.client, pageSize, func(c arvados.Collection) error {
-                               if c.ModifiedAt == nil {
+                               if c.ModifiedAt.IsZero() {
                                        return nil
                                }
                                if sawUUID[c.UUID] {
@@ -39,14 +39,14 @@ func (s *integrationSuite) TestIdenticalTimestamps(c *check.C) {
                                }
                                got[trial] = append(got[trial], c.UUID)
                                sawUUID[c.UUID] = true
-                               if lastMod == *c.ModifiedAt {
+                               if lastMod == c.ModifiedAt {
                                        streak++
                                        if streak > longestStreak {
                                                longestStreak = streak
                                        }
                                } else {
                                        streak = 0
-                                       lastMod = *c.ModifiedAt
+                                       lastMod = c.ModifiedAt
                                }
                                return nil
                        }, nil)