Обсуждение: BDR: DDL lock problem with function inside a schema
Hello All, I am doing some tests with BDR to study the ability of replacing bucardo with BDR. I experience some DDL locks problem when a function is in a schema, and I try to remove the whole schema. Node 1: ----------- mydb=# CREATE SCHEMA IF NOT EXISTS test; mydb=# CREATE OR REPLACE FUNCTION test.nothing() RETURNS void AS $$ BEGIN END; $$ LANGUAGE plpgsql; CREATE FUNCTION mydb=# drop schema test cascade ; NOTICE: drop cascades to function test.nothing() DROP SCHEMA mydb=# \dn List of schemas Name | Owner --------+---------- bdr | postgres public | postgres (2 rows) Then if I switch to node 2 --------------------------------- List of schemas Name | Owner --------+---------- bdr | postgres public | postgres test | dbadmin (3 rows) mydb=# drop schema test cascade ; ERROR: database is locked against ddl by another node HINT: Node (6158090345987221693,1,17189) in the cluster is already performing DDL After that, I am not able to recover the situation: I tried to restart postgres on both nodes, but nothing work for me. After that, it is not possible anymore to do DDL operations: - this "blocks" on node 1 (I do CTRL C to cancel the query in psql) -on node 2, the message above "ERROR: database is locked against ddl by another node" is displayed. Additionally, I am not able to detach / reattach the node. One workaround could be to remove first the function on _both_ nodes, then to remove the schema, but what makes me not confident is that I don't know how to recover the situation when such DDL locks operation appear. Questions: --------------- -Is it a known bug? If yes should I report it (and where)? -How to recover such DDL lock problems operation without recreating the database? In other words, what is the proper way to cleanly restart both nodes? -Is it a well known method to properly detach and attach nodes? Thanks and Regards, Sylvain
Questions:
---------------
-Is it a known bug? If yes should I report it (and where)?
Please open a report on github for this - https://github.com/2ndQuadrant/bdr/issues
-How to recover such DDL lock problems operation without recreating the database? In other words, what is the proper way to cleanly restart both nodes?
Restarting both nodes should be sufficient, and I am surprised to see that is not the case here. This needs more investigation.
-Is it a well known method to properly detach and attach nodes?
I'm not sure I understand.
If you mean join and remove nodes, join with bdr.bdr_group_join, remove with bdr.bdr_part_by_node_names .
Le 09/06/2015 02:29, Craig Ringer a écrit :
=> https://github.com/2ndQuadrant/bdr/issues/87
Questions:
---------------
-Is it a known bug? If yes should I report it (and where)?Please open a report on github for this - https://github.com/2ndQuadrant/bdr/issues
-How to recover such DDL lock problems operation without recreating the database? In other words, what is the proper way to cleanly restart both nodes?Restarting both nodes should be sufficient, and I am surprised to see that is not the case here. This needs more investigation.-Is it a well known method to properly detach and attach nodes?I'm not sure I understand.If you mean join and remove nodes, join with bdr.bdr_group_join, remove with bdr.bdr_part_by_node_names .
I was trying to find a way to recover the situation. I though that detaching all nodes with bdr.bdr_part_by_node_names(), then reattaching then with bdr.bdr_group_join() could help, but I did not succeed to do it.
In fact, this question is orthogonal / not related to the problem : I just would like to detach /attach a node dynamically. Is it well supported / planned to be supported ?
Thanks and Regards,
Sylvain