mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Refactor sharedfileset.c to separate out fileset implementation.
Move fileset related implementation out of sharedfileset.c to allow its usage by backends that don't want to share filesets among different processes. After this split, fileset infrastructure is used by both sharedfileset.c and worker.c for the named temporary files that survive across transactions. Author: Dilip Kumar, based on suggestion by Andres Freund Reviewed-by: Hou Zhijie, Masahiko Sawada, Amit Kapila Discussion: https://postgr.es/m/E1mCC6U-0004Ik-Fs@gemulon.postgresql.org
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
#ifndef BUFFILE_H
|
||||
#define BUFFILE_H
|
||||
|
||||
#include "storage/sharedfileset.h"
|
||||
#include "storage/fileset.h"
|
||||
|
||||
/* BufFile is an opaque type whose details are not known outside buffile.c. */
|
||||
|
||||
@@ -46,11 +46,11 @@ extern int BufFileSeekBlock(BufFile *file, long blknum);
|
||||
extern int64 BufFileSize(BufFile *file);
|
||||
extern long BufFileAppend(BufFile *target, BufFile *source);
|
||||
|
||||
extern BufFile *BufFileCreateShared(SharedFileSet *fileset, const char *name);
|
||||
extern void BufFileExportShared(BufFile *file);
|
||||
extern BufFile *BufFileOpenShared(SharedFileSet *fileset, const char *name,
|
||||
int mode);
|
||||
extern void BufFileDeleteShared(SharedFileSet *fileset, const char *name);
|
||||
extern void BufFileTruncateShared(BufFile *file, int fileno, off_t offset);
|
||||
extern BufFile *BufFileCreateFileSet(FileSet *fileset, const char *name);
|
||||
extern void BufFileExportFileSet(BufFile *file);
|
||||
extern BufFile *BufFileOpenFileSet(FileSet *fileset, const char *name,
|
||||
int mode);
|
||||
extern void BufFileDeleteFileSet(FileSet *fileset, const char *name);
|
||||
extern void BufFileTruncateFileSet(BufFile *file, int fileno, off_t offset);
|
||||
|
||||
#endif /* BUFFILE_H */
|
||||
|
||||
40
src/include/storage/fileset.h
Normal file
40
src/include/storage/fileset.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* fileset.h
|
||||
* Management of named temporary files.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/storage/fileset.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FILESET_H
|
||||
#define FILESET_H
|
||||
|
||||
#include "storage/fd.h"
|
||||
|
||||
/*
|
||||
* A set of temporary files.
|
||||
*/
|
||||
typedef struct FileSet
|
||||
{
|
||||
pid_t creator_pid; /* PID of the creating process */
|
||||
uint32 number; /* per-PID identifier */
|
||||
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. */
|
||||
} FileSet;
|
||||
|
||||
extern void FileSetInit(FileSet *fileset);
|
||||
extern File FileSetCreate(FileSet *fileset, const char *name);
|
||||
extern File FileSetOpen(FileSet *fileset, const char *name,
|
||||
int mode);
|
||||
extern bool FileSetDelete(FileSet *fileset, const char *name,
|
||||
bool error_on_failure);
|
||||
extern void FileSetDeleteAll(FileSet *fileset);
|
||||
|
||||
#endif
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "storage/dsm.h"
|
||||
#include "storage/fd.h"
|
||||
#include "storage/fileset.h"
|
||||
#include "storage/spin.h"
|
||||
|
||||
/*
|
||||
@@ -24,24 +25,13 @@
|
||||
*/
|
||||
typedef struct SharedFileSet
|
||||
{
|
||||
pid_t creator_pid; /* PID of the creating process */
|
||||
uint32 number; /* per-PID identifier */
|
||||
FileSet fs;
|
||||
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,
|
||||
int mode);
|
||||
extern bool SharedFileSetDelete(SharedFileSet *fileset, const char *name,
|
||||
bool error_on_failure);
|
||||
extern void SharedFileSetDeleteAll(SharedFileSet *fileset);
|
||||
extern void SharedFileSetUnregister(SharedFileSet *input_fileset);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user