Header And Logo

PostgreSQL
| The world's most advanced open source database.

Defines | Functions

reinit.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define UNLOGGED_RELATION_CLEANUP   0x0001
#define UNLOGGED_RELATION_INIT   0x0002

Functions

void ResetUnloggedRelations (int op)

Define Documentation

#define UNLOGGED_RELATION_CLEANUP   0x0001
#define UNLOGGED_RELATION_INIT   0x0002

Function Documentation

void ResetUnloggedRelations ( int  op  ) 

Definition at line 49 of file reinit.c.

References AllocateDir(), ALLOCSET_DEFAULT_INITSIZE, ALLOCSET_DEFAULT_MAXSIZE, ALLOCSET_DEFAULT_MINSIZE, AllocSetContextCreate(), CurrentMemoryContext, dirent::d_name, DEBUG1, elog, FreeDir(), MemoryContextDelete(), MemoryContextSwitchTo(), NULL, ReadDir(), ResetUnloggedRelationsInTablespaceDir(), snprintf(), TABLESPACE_VERSION_DIRECTORY, UNLOGGED_RELATION_CLEANUP, and UNLOGGED_RELATION_INIT.

Referenced by StartupXLOG().

{
    char        temp_path[MAXPGPATH];
    DIR        *spc_dir;
    struct dirent *spc_de;
    MemoryContext tmpctx,
                oldctx;

    /* Log it. */
    elog(DEBUG1, "resetting unlogged relations: cleanup %d init %d",
         (op & UNLOGGED_RELATION_CLEANUP) != 0,
         (op & UNLOGGED_RELATION_INIT) != 0);

    /*
     * Just to be sure we don't leak any memory, let's create a temporary
     * memory context for this operation.
     */
    tmpctx = AllocSetContextCreate(CurrentMemoryContext,
                                   "ResetUnloggedRelations",
                                   ALLOCSET_DEFAULT_MINSIZE,
                                   ALLOCSET_DEFAULT_INITSIZE,
                                   ALLOCSET_DEFAULT_MAXSIZE);
    oldctx = MemoryContextSwitchTo(tmpctx);

    /*
     * First process unlogged files in pg_default ($PGDATA/base)
     */
    ResetUnloggedRelationsInTablespaceDir("base", op);

    /*
     * Cycle through directories for all non-default tablespaces.
     */
    spc_dir = AllocateDir("pg_tblspc");

    while ((spc_de = ReadDir(spc_dir, "pg_tblspc")) != NULL)
    {
        if (strcmp(spc_de->d_name, ".") == 0 ||
            strcmp(spc_de->d_name, "..") == 0)
            continue;

        snprintf(temp_path, sizeof(temp_path), "pg_tblspc/%s/%s",
                 spc_de->d_name, TABLESPACE_VERSION_DIRECTORY);
        ResetUnloggedRelationsInTablespaceDir(temp_path, op);
    }

    FreeDir(spc_dir);

    /*
     * Restore memory context.
     */
    MemoryContextSwitchTo(oldctx);
    MemoryContextDelete(tmpctx);
}