Skip to content

Commit

Permalink
Remove HAVE_WORKING_LINK
Browse files Browse the repository at this point in the history
Previously, hard links were not used on Windows and Cygwin, but they
support them just fine in currently supported OS versions, so we can
use them there as well.

Since all supported platforms now support hard links, we can remove
the alternative code paths.

Rename durable_link_or_rename() to durable_rename_excl() to make the
purpose more clear without referencing the implementation details.

Discussion: https://www.postgresql.org/message-id/flat/72fff73f-dc9c-4ef4-83e8-d2e60c98df48%402ndquadrant.com
  • Loading branch information
petere committed Mar 11, 2020
1 parent d114cc5 commit aaa3aed
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 28 deletions.
4 changes: 2 additions & 2 deletions src/backend/access/transam/timeline.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
* Perform the rename using link if available, paranoidly trying to avoid
* overwriting an existing file (there shouldn't be one).
*/
durable_link_or_rename(tmppath, path, ERROR);
durable_rename_excl(tmppath, path, ERROR);

/* The history file can be archived immediately. */
if (XLogArchivingActive())
Expand Down Expand Up @@ -507,7 +507,7 @@ writeTimeLineHistoryFile(TimeLineID tli, char *content, int size)
* Perform the rename using link if available, paranoidly trying to avoid
* overwriting an existing file (there shouldn't be one).
*/
durable_link_or_rename(tmppath, path, ERROR);
durable_rename_excl(tmppath, path, ERROR);
}

/*
Expand Down
4 changes: 2 additions & 2 deletions src/backend/access/transam/xlog.c
Original file line number Diff line number Diff line change
Expand Up @@ -3591,11 +3591,11 @@ InstallXLogFileSegment(XLogSegNo *segno, char *tmppath,
* Perform the rename using link if available, paranoidly trying to avoid
* overwriting an existing file (there shouldn't be one).
*/
if (durable_link_or_rename(tmppath, path, LOG) != 0)
if (durable_rename_excl(tmppath, path, LOG) != 0)
{
if (use_lock)
LWLockRelease(ControlFileLock);
/* durable_link_or_rename already emitted log message */
/* durable_rename_excl already emitted log message */
return false;
}

Expand Down
21 changes: 5 additions & 16 deletions src/backend/storage/file/fd.c
Original file line number Diff line number Diff line change
Expand Up @@ -765,10 +765,11 @@ durable_unlink(const char *fname, int elevel)
}

/*
* durable_link_or_rename -- rename a file in a durable manner.
* durable_rename_excl -- rename a file in a durable manner, without
* overwriting an existing target file
*
* Similar to durable_rename(), except that this routine tries (but does not
* guarantee) not to overwrite the target file.
* Similar to durable_rename(), except that this routine will fail if the
* target file already exists.
*
* Note that a crash in an unfortunate moment can leave you with two links to
* the target file.
Expand All @@ -779,7 +780,7 @@ durable_unlink(const char *fname, int elevel)
* valid upon return.
*/
int
durable_link_or_rename(const char *oldfile, const char *newfile, int elevel)
durable_rename_excl(const char *oldfile, const char *newfile, int elevel)
{
/*
* Ensure that, if we crash directly after the rename/link, a file with
Expand All @@ -788,7 +789,6 @@ durable_link_or_rename(const char *oldfile, const char *newfile, int elevel)
if (fsync_fname_ext(oldfile, false, false, elevel) != 0)
return -1;

#ifdef HAVE_WORKING_LINK
if (link(oldfile, newfile) < 0)
{
ereport(elevel,
Expand All @@ -798,17 +798,6 @@ durable_link_or_rename(const char *oldfile, const char *newfile, int elevel)
return -1;
}
unlink(oldfile);
#else
/* XXX: Add racy file existence check? */
if (rename(oldfile, newfile) < 0)
{
ereport(elevel,
(errcode_for_file_access(),
errmsg("could not rename file \"%s\" to \"%s\": %m",
oldfile, newfile)));
return -1;
}
#endif

/*
* Make change persistent in case of an OS crash, both the new entry and
Expand Down
7 changes: 0 additions & 7 deletions src/include/pg_config_manual.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,6 @@
#undef HAVE_UNIX_SOCKETS
#endif

/*
* Define this if your operating system supports link()
*/
#if !defined(WIN32) && !defined(__CYGWIN__)
#define HAVE_WORKING_LINK 1
#endif

/*
* USE_POSIX_FADVISE controls whether Postgres will attempt to use the
* posix_fadvise() kernel call. Usually the automatic configure tests are
Expand Down
2 changes: 1 addition & 1 deletion src/include/storage/fd.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ extern void fsync_fname(const char *fname, bool isdir);
extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel);
extern int durable_rename(const char *oldfile, const char *newfile, int loglevel);
extern int durable_unlink(const char *fname, int loglevel);
extern int durable_link_or_rename(const char *oldfile, const char *newfile, int loglevel);
extern int durable_rename_excl(const char *oldfile, const char *newfile, int loglevel);
extern void SyncDataDirectory(void);
extern int data_sync_elevel(int elevel);

Expand Down

0 comments on commit aaa3aed

Please sign in to comment.