mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 21:41:18 +02:00
dc6c4c9dc2
SharedFileSet allows temporary files to be created by one backend and then exported for read-only access by other backends, with clean-up managed by reference counting associated with a DSM segment. This includes changes to fd.c and buffile.c to support the new kind of temporary file. This will be used by an upcoming patch adding support for parallel hash joins. Author: Thomas Munro Reviewed-By: Peter Geoghegan, Andres Freund, Robert Haas, Rushabh Lathia Discussion: https://postgr.es/m/CAEepm=2W=cOkiZxcg6qiFQP-dHUe09aqTrEMM7yJDrHMhDv_RA@mail.gmail.com https://postgr.es/m/CAH2-WznJ_UgLux=_jTgCQ4yFz0iBntudsNKa1we3kN1BAG=88w@mail.gmail.com
46 lines
1.5 KiB
C
46 lines
1.5 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* sharedfileset.h
|
|
* Shared temporary file management.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/storage/sharedfilespace.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef SHAREDFILESET_H
|
|
#define SHAREDFILESET_H
|
|
|
|
#include "storage/dsm.h"
|
|
#include "storage/fd.h"
|
|
#include "storage/spin.h"
|
|
|
|
/*
|
|
* A set of temporary files that can be shared by multiple backends.
|
|
*/
|
|
typedef struct SharedFileSet
|
|
{
|
|
pid_t creator_pid; /* PID of the creating process */
|
|
uint32 number; /* per-PID identifier */
|
|
slock_t mutex; /* mutex protecting the reference count */
|
|
int refcnt; /* number of attached backends */
|
|
int ntablespaces; /* number of tablespaces to use */
|
|
Oid tablespaces[8]; /* OIDs of tablespaces to use. Assumes that
|
|
* it's rare that there more than temp
|
|
* tablespaces. */
|
|
} SharedFileSet;
|
|
|
|
extern void SharedFileSetInit(SharedFileSet *fileset, dsm_segment *seg);
|
|
extern void SharedFileSetAttach(SharedFileSet *fileset, dsm_segment *seg);
|
|
extern File SharedFileSetCreate(SharedFileSet *fileset, const char *name);
|
|
extern File SharedFileSetOpen(SharedFileSet *fileset, const char *name);
|
|
extern bool SharedFileSetDelete(SharedFileSet *fileset, const char *name,
|
|
bool error_on_failure);
|
|
extern void SharedFileSetDeleteAll(SharedFileSet *fileset);
|
|
|
|
#endif
|