X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/36a6bcdb43e4add604bd8ac6409eda6abc248c8c..37eb070f55b5ae0c622fb4bf0a946c9dd49b2752:/lib/cloud/ec2/ec2.go?ds=sidebyside diff --git a/lib/cloud/ec2/ec2.go b/lib/cloud/ec2/ec2.go index 7c7c48b9b3..b90eff6d57 100644 --- a/lib/cloud/ec2/ec2.go +++ b/lib/cloud/ec2/ec2.go @@ -337,7 +337,8 @@ func (instanceSet *ec2InstanceSet) updateSpotPrices(instances []cloud.Instance) updateTime := time.Now() staleTime := updateTime.Add(-instanceSet.ec2config.SpotPriceUpdateInterval.Duration()) needUpdate := false - var typeFilterValues []*string + allTypes := map[string]bool{} + for _, inst := range instances { ec2inst := inst.(*ec2Instance).instance if aws.StringValue(ec2inst.InstanceLifecycle) == "spot" { @@ -349,12 +350,16 @@ func (instanceSet *ec2InstanceSet) updateSpotPrices(instances []cloud.Instance) if instanceSet.pricesUpdated[pk].Before(staleTime) { needUpdate = true } - typeFilterValues = append(typeFilterValues, ec2inst.InstanceType) + allTypes[*ec2inst.InstanceType] = true } } if !needUpdate { return } + var typeFilterValues []*string + for instanceType := range allTypes { + typeFilterValues = append(typeFilterValues, aws.String(instanceType)) + } // Get 3x update interval worth of pricing data. (Ideally the // AWS API would tell us "we have shown you all of the price // changes up to time T", but it doesn't, so we'll just ask @@ -506,6 +511,9 @@ func (inst *ec2Instance) VerifyHostKey(ssh.PublicKey, *ssh.Client) error { func (inst *ec2Instance) PriceHistory(instType arvados.InstanceType) []cloud.InstancePrice { inst.provider.pricesLock.Lock() defer inst.provider.pricesLock.Unlock() + // Note updateSpotPrices currently populates + // inst.provider.prices only for spot instances, so if + // spot==false here, we will return no data. pk := priceKey{ instanceType: *inst.instance.InstanceType, spot: aws.StringValue(inst.instance.InstanceLifecycle) == "spot",