19620: Remove old "v1" S3 keepstore driver.
[arvados.git] / services / keepstore / s3aws_volume.go
index f7cff6d33ea4d7c764ba74f06e49c8815f021fa9..8f2c27539109fbac45b844ac31281d9b4c3a76cd 100644 (file)
@@ -33,6 +33,21 @@ import (
        "github.com/sirupsen/logrus"
 )
 
+func init() {
+       driver["S3"] = newS3AWSVolume
+}
+
+const (
+       s3DefaultReadTimeout    = arvados.Duration(10 * time.Minute)
+       s3DefaultConnectTimeout = arvados.Duration(time.Minute)
+       maxClockSkew            = 600 * time.Second
+       nearlyRFC1123           = "Mon, 2 Jan 2006 15:04:05 GMT"
+)
+
+var (
+       ErrS3TrashDisabled = fmt.Errorf("trash function is disabled because Collections.BlobTrashLifetime=0 and DriverParameters.UnsafeDelete=false")
+)
+
 // S3AWSVolume implements Volume using an S3 bucket.
 type S3AWSVolume struct {
        arvados.S3VolumeDriverParameters
@@ -58,24 +73,6 @@ type s3AWSbucket struct {
        mu     sync.Mutex
 }
 
-// chooseS3VolumeDriver distinguishes between the old goamz driver and
-// aws-sdk-go based on the UseAWSS3v2Driver feature flag
-func chooseS3VolumeDriver(cluster *arvados.Cluster, volume arvados.Volume, logger logrus.FieldLogger, metrics *volumeMetricsVecs) (Volume, error) {
-       v := &S3Volume{cluster: cluster, volume: volume, metrics: metrics}
-       // Default value will be overriden if it happens to be defined in the config
-       v.S3VolumeDriverParameters.UseAWSS3v2Driver = true
-       err := json.Unmarshal(volume.DriverParameters, v)
-       if err != nil {
-               return nil, err
-       }
-       if v.UseAWSS3v2Driver {
-               logger.Debugln("Using AWS S3 v2 driver")
-               return newS3AWSVolume(cluster, volume, logger, metrics)
-       }
-       logger.Debugln("Using goamz S3 driver")
-       return newS3Volume(cluster, volume, logger, metrics)
-}
-
 const (
        PartSize         = 5 * 1024 * 1024
        ReadConcurrency  = 13
@@ -184,19 +181,25 @@ func (v *S3AWSVolume) check(ec2metadataHostname string) error {
                        if v.Endpoint != "" && service == "s3" {
                                return aws.Endpoint{
                                        URL:           v.Endpoint,
-                                       SigningRegion: v.Region,
+                                       SigningRegion: region,
                                }, nil
                        } else if service == "ec2metadata" && ec2metadataHostname != "" {
                                return aws.Endpoint{
                                        URL: ec2metadataHostname,
                                }, nil
+                       } else {
+                               return defaultResolver.ResolveEndpoint(service, region)
                        }
-
-                       return defaultResolver.ResolveEndpoint(service, region)
                }
                cfg.EndpointResolver = aws.EndpointResolverFunc(myCustomResolver)
        }
-
+       if v.Region == "" {
+               // Endpoint is already specified (otherwise we would
+               // have errored out above), but Region is also
+               // required by the aws sdk, in order to determine
+               // SignatureVersions.
+               v.Region = "us-east-1"
+       }
        cfg.Region = v.Region
 
        // Zero timeouts mean "wait forever", which is a bad