| Index: go/src/infra/appengine/test-results/model/test_file.go
|
| diff --git a/go/src/infra/appengine/test-results/model/test_file.go b/go/src/infra/appengine/test-results/model/test_file.go
|
| index 0242b52ec6a15d659c5724d8fd1f8f5bdc1fddfa..cc4285320b43f3ef8c7ab6b4b96b862f91811a4a 100644
|
| --- a/go/src/infra/appengine/test-results/model/test_file.go
|
| +++ b/go/src/infra/appengine/test-results/model/test_file.go
|
| @@ -27,7 +27,7 @@ func IsAggregateTestFile(filename string) bool {
|
|
|
| // BuildNum is int64 that is used to handle TestFile datastore records
|
| // with null build_number. The value is >= 0 if the datastore value
|
| -// was not null.
|
| +// was not null. The value is -1 for null datastore value.
|
| type BuildNum int64
|
|
|
| var _ datastore.PropertyConverter = (*BuildNum)(nil)
|
| @@ -65,28 +65,35 @@ type DataEntry struct {
|
|
|
| // TestFile represents a TestFile record.
|
| type TestFile struct {
|
| - ID int64 `gae:"$id"`
|
| - BuildNumber BuildNum `gae:"build_number"`
|
| - Builder string `gae:"builder"`
|
| - DataKeys []*datastore.Key `gae:"data_keys,noindex"`
|
| - LastMod time.Time `gae:"date"`
|
| - Master string `gae:"master"`
|
| - Name string `gae:"name"`
|
| - TestType string `gae:"test_type"`
|
| + ID int64 `gae:"$id"`
|
| + BuildNumber BuildNum `gae:"build_number"`
|
| + Builder string `gae:"builder"`
|
| + Master string `gae:"master"`
|
| + Name string `gae:"name"`
|
| + TestType string `gae:"test_type"`
|
| +
|
| + // DataKeys is the keys to the DataEntry(s) that contain
|
| + // the data for this TestFile.
|
| + DataKeys []*datastore.Key `gae:"data_keys,noindex"`
|
| +
|
| + // LastMod is the last modified time.
|
| + LastMod time.Time `gae:"date"`
|
|
|
| // Data is the data in the DataEntry(s) pointed to by DataKeys.
|
| // After loading a TestFile from the datastore, this field is
|
| // only available after GetData is called. To put updated
|
| // data in this field to the datastore, call PutData.
|
| //
|
| - // Users should typically perform the following sequence of calls
|
| + // Users will typically perform the following sequence of calls
|
| // in a transaction:
|
| //
|
| - // - datastore.Get(tf)
|
| - // - tf.GetData()
|
| - // - tf.PutData()
|
| - // - datastore.Put(tf)
|
| - // - datastore.Delete(tf.OldDataKeys)
|
| + // ds = datastore.Get(ctx)
|
| + // err = ds.Get(tf)
|
| + // err = tf.GetData(ctx)
|
| + // // manipulate tf.Data
|
| + // err = tf.PutData(ctx)
|
| + // err = ds.Put(tf)
|
| + // err = ds.Delete(tf.OldDataKeys)
|
| //
|
| Data io.Reader `gae:"-,noindex"`
|
|
|
| @@ -98,9 +105,9 @@ type TestFile struct {
|
| // pointed to by these keys if they are no longer needed.
|
| OldDataKeys []*datastore.Key `gae:"-,noindex"`
|
|
|
| - // newDataKeys is unused in this implementation. It is
|
| + // NewDataKeys is UNUSED in this implementation. It is
|
| // a remnant of the old Python implementation.
|
| - newDataKeys []*datastore.Key `gae:"new_data_keys,noindex"`
|
| + NewDataKeys []*datastore.Key `gae:"new_data_keys,noindex"`
|
| }
|
|
|
| // GetData fetches data from the DataEntry(s) pointed to by tf.DataKeys
|
| @@ -167,7 +174,7 @@ func (tf *TestFile) putDataEntries(c context.Context) error {
|
| // See https://code.googlesource.com/gocloud/+/master/datastore/prop.go#29.
|
| const maxBlobLen = 1 << 20
|
|
|
| - // TODO: Read maxBlobLen bytes at a time. See io.LimitedReader.
|
| + // TODO(maybe): Read maxBlobLen bytes at a time. See io.LimitedReader.
|
|
|
| data, err := ioutil.ReadAll(tf.Data)
|
| if err != nil {
|
| @@ -200,7 +207,7 @@ func (tf *TestFile) putDataEntries(c context.Context) error {
|
| }
|
|
|
| tf.DataKeys = newKeys
|
| - tf.LastMod = time.Now()
|
| + tf.LastMod = time.Now().UTC()
|
| return nil
|
| }
|
|
|
|
|