X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1dee1aad0573bf3a54d536c8dd3693a352cf0cbe..8b1aca5c3415bfee3b4bc242596e1ee68ddef354:/services/keepstore/s3_volume.go?ds=sidebyside diff --git a/services/keepstore/s3_volume.go b/services/keepstore/s3_volume.go index 08cc591fc5..07bb033c9f 100644 --- a/services/keepstore/s3_volume.go +++ b/services/keepstore/s3_volume.go @@ -24,7 +24,7 @@ import ( "sync/atomic" "time" - "git.curoverse.com/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvados" "github.com/AdRoll/goamz/aws" "github.com/AdRoll/goamz/s3" "github.com/prometheus/client_golang/prometheus" @@ -32,12 +32,12 @@ import ( ) func init() { - driver["S3"] = newS3Volume + driver["S3"] = chooseS3VolumeDriver } func newS3Volume(cluster *arvados.Cluster, volume arvados.Volume, logger logrus.FieldLogger, metrics *volumeMetricsVecs) (Volume, error) { v := &S3Volume{cluster: cluster, volume: volume, metrics: metrics} - err := json.Unmarshal(volume.DriverParameters, &v) + err := json.Unmarshal(volume.DriverParameters, v) if err != nil { return nil, err } @@ -129,20 +129,9 @@ func s3regions() (okList []string) { // S3Volume implements Volume using an S3 bucket. type S3Volume struct { - AccessKey string - SecretKey string - AuthToken string // populated automatically when IAMRole is used - AuthExpiration time.Time // populated automatically when IAMRole is used - IAMRole string - Endpoint string - Region string - Bucket string - LocationConstraint bool - IndexPageSize int - ConnectTimeout arvados.Duration - ReadTimeout arvados.Duration - RaceWindow arvados.Duration - UnsafeDelete bool + arvados.S3VolumeDriverParameters + AuthToken string // populated automatically when IAMRole is used + AuthExpiration time.Time // populated automatically when IAMRole is used cluster *arvados.Cluster volume arvados.Volume @@ -188,8 +177,7 @@ func (v *S3Volume) bootstrapIAMCredentials() error { func (v *S3Volume) newS3Client() *s3.S3 { auth := aws.NewAuth(v.AccessKey, v.SecretKey, v.AuthToken, v.AuthExpiration) client := s3.New(*auth, v.region) - if v.region.EC2Endpoint.Signer == aws.V4Signature { - // Currently affects only eu-central-1 + if !v.V2Signature { client.Signature = aws.V4Signature } client.ConnectTimeout = time.Duration(v.ConnectTimeout) @@ -598,7 +586,10 @@ func (v *S3Volume) IndexTo(prefix string, writer io.Writer) error { if err != nil { return err } - fmt.Fprintf(writer, "%s+%d %d\n", data.Key, data.Size, t.UnixNano()) + // We truncate sub-second precision here. Otherwise + // timestamps will never match the RFC1123-formatted + // Last-Modified values parsed by Mtime(). + fmt.Fprintf(writer, "%s+%d %d\n", data.Key, data.Size, t.Unix()*1000000000) } return dataL.Error() }