Обсуждение: pgsql: Change the relation_open protocol so that we obtain lock on a

Поиск
Список
Период
Сортировка

pgsql: Change the relation_open protocol so that we obtain lock on a

От
tgl@postgresql.org (Tom Lane)
Дата:
Log Message:
-----------
Change the relation_open protocol so that we obtain lock on a relation
(table or index) before trying to open its relcache entry.  This fixes
race conditions in which someone else commits a change to the relation's
catalog entries while we are in process of doing relcache load.  Problems
of that ilk have been reported sporadically for years, but it was not
really practical to fix until recently --- for instance, the recent
addition of WAL-log support for in-place updates helped.

Along the way, remove pg_am.amconcurrent: all AMs are now expected to support
concurrent update.

Modified Files:
--------------
    pgsql/contrib/userlock:
        user_locks.c (r1.21 -> r1.22)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/contrib/userlock/user_locks.c.diff?r1=1.21&r2=1.22)
    pgsql/doc/src/sgml:
        catalogs.sgml (r2.128 -> r2.129)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/catalogs.sgml.diff?r1=2.128&r2=2.129)
        indexam.sgml (r2.15 -> r2.16)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/indexam.sgml.diff?r1=2.15&r2=2.16)
    pgsql/src/backend/access/gin:
        ginvacuum.c (r1.4 -> r1.5)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginvacuum.c.diff?r1=1.4&r2=1.5)
    pgsql/src/backend/access/gist:
        gistvacuum.c (r1.25 -> r1.26)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gist/gistvacuum.c.diff?r1=1.25&r2=1.26)
    pgsql/src/backend/access/heap:
        heapam.c (r1.217 -> r1.218)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/heapam.c.diff?r1=1.217&r2=1.218)
        tuptoaster.c (r1.62 -> r1.63)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/tuptoaster.c.diff?r1=1.62&r2=1.63)
    pgsql/src/backend/access/index:
        genam.c (r1.57 -> r1.58)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/index/genam.c.diff?r1=1.57&r2=1.58)
        indexam.c (r1.93 -> r1.94)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/index/indexam.c.diff?r1=1.93&r2=1.94)
    pgsql/src/backend/bootstrap:
        bootstrap.c (r1.222 -> r1.223)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/bootstrap/bootstrap.c.diff?r1=1.222&r2=1.223)
    pgsql/src/backend/catalog:
        catalog.c (r1.66 -> r1.67)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/catalog.c.diff?r1=1.66&r2=1.67)
        heap.c (r1.310 -> r1.311)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/heap.c.diff?r1=1.310&r2=1.311)
        index.c (r1.271 -> r1.272)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/index.c.diff?r1=1.271&r2=1.272)
    pgsql/src/backend/commands:
        cluster.c (r1.151 -> r1.152)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/cluster.c.diff?r1=1.151&r2=1.152)
        sequence.c (r1.137 -> r1.138)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/sequence.c.diff?r1=1.137&r2=1.138)
        tablecmds.c (r1.197 -> r1.198)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablecmds.c.diff?r1=1.197&r2=1.198)
        trigger.c (r1.204 -> r1.205)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/trigger.c.diff?r1=1.204&r2=1.205)
        typecmds.c (r1.95 -> r1.96)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/typecmds.c.diff?r1=1.95&r2=1.96)
        vacuum.c (r1.336 -> r1.337)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c.diff?r1=1.336&r2=1.337)
        vacuumlazy.c (r1.75 -> r1.76)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuumlazy.c.diff?r1=1.75&r2=1.76)
    pgsql/src/backend/executor:
        execUtils.c (r1.137 -> r1.138)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execUtils.c.diff?r1=1.137&r2=1.138)
        nodeBitmapIndexscan.c (r1.19 -> r1.20)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/nodeBitmapIndexscan.c.diff?r1=1.19&r2=1.20)
        nodeIndexscan.c (r1.115 -> r1.116)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/nodeIndexscan.c.diff?r1=1.115&r2=1.116)
    pgsql/src/backend/optimizer/util:
        plancat.c (r1.121 -> r1.122)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/plancat.c.diff?r1=1.121&r2=1.122)
        relnode.c (r1.79 -> r1.80)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/relnode.c.diff?r1=1.79&r2=1.80)
    pgsql/src/backend/postmaster:
        autovacuum.c (r1.25 -> r1.26)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/autovacuum.c.diff?r1=1.25&r2=1.26)
    pgsql/src/backend/storage/large_object:
        inv_api.c (r1.118 -> r1.119)

(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/large_object/inv_api.c.diff?r1=1.118&r2=1.119)
    pgsql/src/backend/storage/lmgr:
        lmgr.c (r1.85 -> r1.86)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/lmgr/lmgr.c.diff?r1=1.85&r2=1.86)
        lock.c (r1.169 -> r1.170)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/lmgr/lock.c.diff?r1=1.169&r2=1.170)
    pgsql/src/backend/utils/cache:
        catcache.c (r1.131 -> r1.132)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/catcache.c.diff?r1=1.131&r2=1.132)
        relcache.c (r1.246 -> r1.247)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/relcache.c.diff?r1=1.246&r2=1.247)
    pgsql/src/include/access:
        genam.h (r1.64 -> r1.65)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/genam.h.diff?r1=1.64&r2=1.65)
        relscan.h (r1.48 -> r1.49)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/relscan.h.diff?r1=1.48&r2=1.49)
    pgsql/src/include/catalog:
        catalog.h (r1.35 -> r1.36)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/catalog.h.diff?r1=1.35&r2=1.36)
        catversion.h (r1.344 -> r1.345)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/catversion.h.diff?r1=1.344&r2=1.345)
        pg_am.h (r1.45 -> r1.46)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_am.h.diff?r1=1.45&r2=1.46)
    pgsql/src/include/optimizer:
        plancat.h (r1.39 -> r1.40)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/plancat.h.diff?r1=1.39&r2=1.40)
    pgsql/src/include/storage:
        lmgr.h (r1.54 -> r1.55)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/lmgr.h.diff?r1=1.54&r2=1.55)
        lock.h (r1.96 -> r1.97)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/storage/lock.h.diff?r1=1.96&r2=1.97)
    pgsql/src/include/utils:
        relcache.h (r1.54 -> r1.55)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/relcache.h.diff?r1=1.54&r2=1.55)