Skip to content

Deadlock on destroy #98

Open
Open
@jerome-quere

Description

@jerome-quere

Hello,

I triggered a deadlock when I try to run terraform destroy. I try to isolate as much as possible by reducing my TF file. With the provided file, it's a 50% chance of deadlock when trying to destroy.

Terraform Version

$> terraform -v                                                                                                                                                                                        Terraform v1.0.1
on darwin_amd64
+ provider registry.terraform.io/cyrilgdn/postgresql v1.13.0

Affected Resource(s)

  • postgresql_database

Terraform Configuration Files

terraform {
  required_providers {
    postgresql = {
      source  = "cyrilgdn/postgresql"
      version = "1.13.0"
    }
  }
}

provider "postgresql" {
  host            = "localhost"
  port            = 5432
  username        = "terraform"
  password        = "terraform"
  sslmode         = "disable"
  superuser       = false
  max_connections = 1
}

resource "postgresql_database" "test" {
  name = "test"
}

resource "postgresql_role" "test" {
  name        = "test"
  login       = true
  password    = "test"
  search_path = ["test"]
}

resource "postgresql_schema" "test" {
  name         = postgresql_database.test.name
  database     = postgresql_database.test.name
  drop_cascade = true
}

Expected Behavior

Should destroy all ressources

Actual Behavior

postgresql_database.test: Still destroying... [id=test, 30m0s elapsed]

Steps to Reproduce

$> terrafrom apply -auto-approve 
$> terraform destroy     

Sometime it take 2 or 3 times to trigger the dead lock

Other informations

SELECT version();
                                         version                                          
------------------------------------------------------------------------------------------
 PostgreSQL 13.2 on x86_64-pc-linux-gnu, compiled by Debian clang version 10.0.1 , 64-bit

 SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;

  locktype  | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid  |      mode       | granted | fastpath | datid | datname  | pid  | leader_pid | usesysid |  usename  |  application_name  | client_addr | client_hostname | client_port |         backend_start         |          xact_start           |          query_start          |         state_change          | wait_event_type | wait_event |        state        | backend_xid | backend_xmin |                                                            query                                                            |  backend_type  
------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+-----------------+---------+----------+-------+----------+------+------------+----------+-----------+--------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-----------------+------------+---------------------+-------------+--------------+-----------------------------------------------------------------------------------------------------------------------------+----------------
 relation   |    16547 |    12250 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | t        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |    16547 |    12141 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | t        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 virtualxid |          |          |      |       | 5/9186     |               |         |       |          | 5/9186             | 8375 | ExclusiveLock   | t       | t        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |    14040 |    12087 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | t        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 virtualxid |          |          |      |       | 6/9483     |               |         |       |          | 6/9483             | 8345 | ExclusiveLock   | t       | t        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2965 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     1261 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2676 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |        0 |     1260 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2672 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 advisory   |    14040 |          |      |       |            |               |       0 | 16441 |        1 | 6/9483             | 8345 | ExclusiveLock   | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2695 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2677 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |        0 |     2676 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     1262 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |        0 |     2694 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     1260 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |        0 |     2671 |      |       |            |               |         |       |          | 5/9186             | 8375 | AccessShareLock | t       | f        | 16547 | test     | 8375 |            |    16441 | terraform | psql               |             |                 |          -1 | 2021-06-30 17:41:57.416802+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479555+00 | 2021-06-30 17:41:57.479557+00 |                 |            | active              |             |         9866 | SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;                                               | client backend
 relation   |        0 |     2964 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
 relation   |        0 |     2677 |      |       |            |               |         |       |          | 6/9483             | 8345 | AccessShareLock | t       | f        | 14040 | postgres | 8345 |            |    16441 | terraform | Terraform provider |             |                 |          -1 | 2021-06-30 17:40:35.42992+00  | 2021-06-30 17:40:35.47188+00  | 2021-06-30 17:40:35.552341+00 | 2021-06-30 17:40:35.552367+00 | Client          | ClientRead | idle in transaction |             |         9850 | SELECT pg_advisory_xact_lock(member::bigint) FROM pg_auth_members JOIN pg_roles ON roleid = pg_roles.oid WHERE rolname = $1 | client backend
(20 rows)



Thank you for your work !

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions