Browse Source

Workaround older gcc bug with namespacing std::hash

pull/1161/head
Antonio SJ Musumeci 1 year ago
parent
commit
26fd11cb4d
  1. 48
      man/mergerfs.1
  2. 18
      src/fs_wait_for_mount.cpp

48
man/mergerfs.1

@ -1866,24 +1866,8 @@ of rsync or run rsync with the tool \[lq]nocache\[rq].
\f[B]filesystem\f[R] itself.
Not the pool with the cache filesystem.
You could have data loss if the source is the cache pool.
.IP
.nf
\f[C]
#!/bin/bash
if [ $# != 3 ]; then
echo \[dq]usage: $0 <cache-fs> <backing-pool> <days-old>\[dq]
exit 1
fi
CACHE=\[dq]${1}\[dq]
BACKING=\[dq]${2}\[dq]
N=${3}
find \[dq]${CACHE}\[dq] -type f -atime +${N} -printf \[aq]%P\[rs]n\[aq] | \[rs]
rsync --files-from=- -axqHAXWES --preallocate --remove-source-files \[dq]${CACHE}/\[dq] \[dq]${BACKING}/\[dq]
\f[R]
.fi
.PP
mergerfs.time-based-mover
.SS percentage full expiring
.PP
Move the oldest file from the cache to the backing pool.
@ -1893,32 +1877,8 @@ Continue till below percentage threshold.
\f[B]filesystem\f[R] itself.
Not the pool with the cache filesystem.
You could have data loss if the source is the cache pool.
.IP
.nf
\f[C]
#!/bin/bash
if [ $# != 3 ]; then
echo \[dq]usage: $0 <cache-fs> <backing-pool> <percentage>\[dq]
exit 1
fi
CACHE=\[dq]${1}\[dq]
BACKING=\[dq]${2}\[dq]
PERCENTAGE=${3}
set -o errexit
while [ $(df --output=pcent \[dq]${CACHE}\[dq] | grep -v Use | cut -d\[aq]%\[aq] -f1) -gt ${PERCENTAGE} ]
do
FILE=$(find \[dq]${CACHE}\[dq] -type f -printf \[aq]%A\[at] %P\[rs]n\[aq] | \[rs]
sort | \[rs]
head -n 1 | \[rs]
cut -d\[aq] \[aq] -f2-)
test -n \[dq]${FILE}\[dq]
rsync -axqHAXWESR --preallocate --remove-source-files \[dq]${CACHE}/./${FILE}\[dq] \[dq]${BACKING}/\[dq]
done
\f[R]
.fi
.PP
mergerfs.percent-full-mover
.SH PERFORMANCE
.PP
mergerfs is at its core just a proxy and therefore its theoretical max

18
src/fs_wait_for_mount.cpp

@ -19,6 +19,7 @@
#include "fs_wait_for_mount.hpp"
#include "syslog.hpp"
#include <functional>
#include <thread>
#include <unordered_set>
@ -30,15 +31,18 @@ namespace fs
constexpr std::chrono::milliseconds SLEEP_DURATION = std::chrono::milliseconds(333);
template<>
struct std::hash<fs::Path>
namespace std
{
std::size_t
operator()(fs::Path const &path_) const noexcept
template<>
struct hash<fs::Path>
{
return std::hash<std::string>{}(path_.string());
}
};
std::size_t
operator()(fs::Path const &path_) const noexcept
{
return std::hash<std::string>{}(path_.string());
}
};
}
static
void

Loading…
Cancel
Save