lib/repo: Add a DEVINO_CANONICAL commit modifier flag
I was seeing the `Writing OSTree commit...` phase of rpm-ostree
being very slow lately. This turns out to be more fallout from
https://github.com/ostreedev/ostree/pull/1170
AKA commit: 8fe4536
Loading the xattrs is slow on my system (F27AW, XFS+LVM, NVMe). I haven't fully
traced through why, but AIUI at least on XFS the xattrs are often stored outside
of the inode so it's a little bit like doing an `open()+read()`. Plus there's
the LSM overhead, etc.
The thing is that for rpm-ostree's package layering use case, we
basically always want to treat the on-disk state as canonical. (There's
a subtle case here if one does overrides for something that contains
policy but we'll fix that).
Anyways, so we're in a state now where we do the slow but correct thing by
default, which seems sane. But let's allow the app to opt-in to telling us
"really trust devino". The difference between a `stat()` + hash table lookup
versus the full xattr load on my test case of `rpm-ostree install
./tree-1.7.0-10.fc27.x86_64.rpm` is absolutely dramatic; consistently on the
order of 10s without this support, and <1s with (800ms).
Closes: #1357
Approved by: jlebon
This commit is contained in:
1 parent
5ef8faff9a
commit
7c8ea25306
4 files changed
+85
-33
No files matched your search
@@ -25,7 +25,7 @@ skip_without_user_xattrs
|
||||
|
||||
setup_test_repository "bare-user"
|
||||
|
||||
extra_basic_tests=5
|
||||
extra_basic_tests=6
|
||||
. $(dirname $0)/basic-test.sh
|
||||
|
||||
# Reset things so we don't inherit a lot of state from earlier tests
|
||||
@@ -99,3 +99,23 @@ assert_file_has_content ls.txt '^-007.. 0 0 .*/usr/bin/systemd'
|
||||
$OSTREE ls rootfs /usr/lib/dbus-daemon-helper >ls.txt
|
||||
assert_file_has_content ls.txt '^-007.. 0 81 .*/usr/lib/dbus-daemon-helper'
|
||||
echo "ok bare-user link-checkout-speedup maintains uids"
|
||||
|
||||
cd ${test_tmpdir}
|
||||
rm -rf test2-checkout
|
||||
$OSTREE checkout -H -U test2 test2-checkout
|
||||
# With --link-checkout-speedup, specifying --owner-uid should "win" by default.
|
||||
myid=$(id -u)
|
||||
newid=$((${myid} + 1))
|
||||
$OSTREE commit ${COMMIT_ARGS} --owner-uid ${newid} --owner-gid ${newid} \
|
||||
--link-checkout-speedup -b test2-linkcheckout-test --tree=dir=test2-checkout
|
||||
$OSTREE ls test2-linkcheckout-test /baz/cow > ls.txt
|
||||
assert_file_has_content ls.txt "^-006.. ${newid} ${newid} .*/baz/cow"
|
||||
|
||||
# But --devino-canonical should override that
|
||||
$OSTREE commit ${COMMIT_ARGS} --owner-uid ${newid} --owner-gid ${newid} \
|
||||
-I -b test2-devino-test --tree=dir=test2-checkout
|
||||
$OSTREE ls test2-devino-test /baz/cow > ls.txt
|
||||
assert_file_has_content ls.txt "^-006.. ${myid} ${myid} .*/baz/cow"
|
||||
|
||||
$OSTREE refs --delete test2-{linkcheckout,devino}-test
|
||||
echo "ok commit with -I"
|
||||
Reference in new issue
Block a user