use PublicInbox::Spawn qw(spawn);
use PublicInbox::Git qw(git_unquote);
use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
-our @EXPORT_OK = qw(crlf_adjust log2stack is_ancestor check_size);
+our @EXPORT_OK = qw(crlf_adjust log2stack is_ancestor check_size nodatacow_dir);
my $X = \%PublicInbox::Search::X;
my ($DB_CREATE_OR_OPEN, $DB_OPEN);
our $DB_NO_SYNC = 0;
1;
}
+sub nodatacow_dir ($) {
+ my ($dir) = @_;
+ opendir my $dh, $dir or die "opendir($dir): $!\n";
+ PublicInbox::Spawn::set_nodatacow(fileno($dh));
+}
+
sub idx_acquire {
my ($self) = @_;
my $flag;
if (!-d $dir && (!$is_shard ||
($is_shard && need_xapian($self)))) {
File::Path::mkpath($dir);
- opendir my $dh, $dir or die "opendir($dir): $!\n";
- PublicInbox::Spawn::set_nodatacow(fileno($dh));
+ nodatacow_dir($dir);
}
}
return unless defined $flag;
use warnings;
use PublicInbox::Spawn qw(which popen_rd);
use PublicInbox::Over;
-use PublicInbox::SearchIdx;
+use PublicInbox::SearchIdx qw(nodatacow_dir);
use File::Temp 0.19 (); # ->newdir
use File::Path qw(remove_tree);
use File::Basename qw(dirname);
my $v = PublicInbox::Search::SCHEMA_VERSION();
my $wip = File::Temp->newdir("xapian$v-XXXXXXXX", DIR => $dir);
$tmp->{$old} = $wip;
+ nodatacow_dir($wip->dirname);
push @queue, [ $old, $wip ];
} else {
opendir my $dh, $old or die "Failed to opendir $old: $!\n";
same_fs_or_die($old, $wip->dirname);
my $cur = "$old/$dn";
push @queue, [ $src // $cur , $wip ];
+ nodatacow_dir($wip->dirname);
$tmp->{$cur} = $wip;
}
# mark old shards to be unlinked
$ft = File::Temp->newdir("$new.compact-XXXXXX", DIR => $dir);
setup_signals();
$tmp = $ft->dirname;
+ nodatacow_dir($tmp);
} else {
$tmp = $new;
}