Merge pull request #9667 from hashicorp/b-aws-lambda-mutex
provider/aws: Limit AWS Lambda source uploads
This commit is contained in:
commit
f446f7f2be
|
@ -17,6 +17,8 @@ import (
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const awsMutexLambdaKey = `aws_lambda_function`
|
||||||
|
|
||||||
func resourceAwsLambdaFunction() *schema.Resource {
|
func resourceAwsLambdaFunction() *schema.Resource {
|
||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
Create: resourceAwsLambdaFunctionCreate,
|
Create: resourceAwsLambdaFunctionCreate,
|
||||||
|
@ -154,6 +156,11 @@ func resourceAwsLambdaFunctionCreate(d *schema.ResourceData, meta interface{}) e
|
||||||
|
|
||||||
var functionCode *lambda.FunctionCode
|
var functionCode *lambda.FunctionCode
|
||||||
if v, ok := d.GetOk("filename"); ok {
|
if v, ok := d.GetOk("filename"); ok {
|
||||||
|
// Grab an exclusive lock so that we're only reading one function into
|
||||||
|
// memory at a time.
|
||||||
|
// See https://github.com/hashicorp/terraform/issues/9364
|
||||||
|
awsMutexKV.Lock(awsMutexLambdaKey)
|
||||||
|
defer awsMutexKV.Unlock(awsMutexLambdaKey)
|
||||||
file, err := loadFileContent(v.(string))
|
file, err := loadFileContent(v.(string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Unable to load %q: %s", v.(string), err)
|
return fmt.Errorf("Unable to load %q: %s", v.(string), err)
|
||||||
|
@ -361,6 +368,11 @@ func resourceAwsLambdaFunctionUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
}
|
}
|
||||||
|
|
||||||
if v, ok := d.GetOk("filename"); ok {
|
if v, ok := d.GetOk("filename"); ok {
|
||||||
|
// Grab an exclusive lock so that we're only reading one function into
|
||||||
|
// memory at a time.
|
||||||
|
// See https://github.com/hashicorp/terraform/issues/9364
|
||||||
|
awsMutexKV.Lock(awsMutexLambdaKey)
|
||||||
|
defer awsMutexKV.Unlock(awsMutexLambdaKey)
|
||||||
file, err := loadFileContent(v.(string))
|
file, err := loadFileContent(v.(string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Unable to load %q: %s", v.(string), err)
|
return fmt.Errorf("Unable to load %q: %s", v.(string), err)
|
||||||
|
|
Loading…
Reference in New Issue