wsd: support --cleanup in loolwsd

Leaving behind jails with bind-mount
entries makes build-workspace removal
complicated, and jenkins builds start failing.

The cleanup stage is integrated in Makefiles
and should be transparent.

In the event that manual cleanup is necessary,
'loolwsd --cleanup' can be invoked.

Change-Id: Ia4b99b0c66e56dfa2d50e79b0ba98f714cf32886
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/97470
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
private/tml/ios-gen2
Ashod Nakashian 2020-06-28 11:30:22 -04:00 committed by Ashod Nakashian
parent 5c9988f2e3
commit 9a427524d1
6 changed files with 75 additions and 64 deletions

View File

@ -321,6 +321,8 @@ EXTRA_DIST = discovery.xml \
scripts/unocommands.py \
$(man_MANS)
CLEANUP_COMMAND=if test -s ./loolwsd; then echo "Cleaning up..." && ./loolwsd --cleanup --o:logging.level=trace; fi
if HAVE_LO_PATH
SYSTEM_STAMP = @SYSTEMPLATE_PATH@/system_stamp
@ -328,13 +330,16 @@ CAPABILITIES = $(if @ENABLE_SETCAP@,true,false)
RUN_GDB = $(if $(GDB_FRONTEND),$(GDB_FRONTEND),gdb --tui --args)
$(SYSTEM_STAMP) : ${top_srcdir}/loolwsd-systemplate-setup
if test -s ./loolwsd; then ./loolwsd --cleanup; fi
if test "z@SYSTEMPLATE_PATH@" != "z"; then rm -rf "@SYSTEMPLATE_PATH@"; fi
${top_srcdir}/loolwsd-systemplate-setup "@SYSTEMPLATE_PATH@" "@LO_PATH@" && touch $@
@JAILS_PATH@ :
mkdir -p $@
$(CLEANUP_COMMAND)
clean-local:
$(CLEANUP_COMMAND)
if test "z@JAILS_PATH@" != "z"; then rm -rf "@JAILS_PATH@"; fi
if test "z@SYSTEMPLATE_PATH@" != "z"; then rm -rf "@SYSTEMPLATE_PATH@"; fi
rm -f $(abs_srcdir)/compile_commands.json
@ -457,8 +462,9 @@ endif
# installing. When building for packaging, no need for this, as the
# capabilities won't survive packaging anyway. Instead, handle it when
# installing the RPM or Debian package.
.PHONY: caps_bins
all-local: loolforkit loolmount @JAILS_PATH@ $(SYSTEM_STAMP)
caps_bins: loolforkit loolmount
if ENABLE_SETCAP
sudo @SETCAP@ cap_fowner,cap_mknod,cap_sys_chroot=ep loolforkit
sudo @SETCAP@ cap_sys_admin=ep loolmount
@ -466,6 +472,9 @@ else
echo "Skipping capability setting"
endif
all-local: loolwsd caps_bins @JAILS_PATH@ $(SYSTEM_STAMP)
$(CLEANUP_COMMAND)
# just run the build without any tests
build-nocheck: all-am

View File

@ -1140,7 +1140,7 @@ if test "$enable_androidapp" = "yes"; then
$srcdir/android/lib/src/main/cpp/CMakeLists.txt:android/lib/src/main/cpp/CMakeLists.txt.in])
fi
AC_CONFIG_FILES([test/run_unit.sh:test/run_unit.sh.in],[chmod +x test/run_unit.sh])
AC_CONFIG_FILES([test/run_unit.sh],[chmod +x test/run_unit.sh])
AC_OUTPUT

View File

@ -189,8 +189,11 @@ else
SYSTEM_STAMP =
endif
CLEANUP_COMMAND=if test -s ../loolwsd; then echo "Cleaning up..." && ../loolwsd --cleanup --o:logging.level=trace; fi
if HAVE_LO_PATH
check-local:
$(CLEANUP_COMMAND)
./fakesockettest
@fc-cache "@LO_PATH@"/share/fonts/truetype
@ -228,71 +231,57 @@ TESTS = \
# Start forced grouping of tests using stamp files
# unit-base.log
unit-tiletest.log : unit-base.log
unit-integration.log : unit-base.log
unit-httpws.log : unit-base.log
unit-crash.log : unit-base.log
group1.log: unit-httpws.log unit-crash.log unit-tiletest.log unit-integration.log
touch $@
unit-typing.log : group1.log
unit-convert.log : group1.log
unit-tilecache.log : group1.log
unit-timeout.log : group1.log
group1a.log: unit-typing.log unit-convert.log unit-tilecache.log unit-timeout.log
touch $@
# isolate this one - it's not a happy test.
unit-copy-paste.log : group1a.log
group2.log: unit-copy-paste.log
group0.log: unit-copy-paste.log
touch $@
unit-prefork.log : group2.log
unit-oauth.log : group2.log
unit-wopi.log : group2.log
unit-wopi-saveas.log : group2.log
unit-wopi-ownertermination.log : group2.log
unit-wopi-versionrestore.log : group2.log
unit-wopi-documentconflict.log : group2.log
unit_wopi_renamefile.log : group2.log
unit_wopi_watermark.log : group2.log
# group1.log
unit-crash.log : group0.log
unit-tiletest.log : group0.log
unit-insert-delete.log : group0.log
unit-each-view.log : group0.log
unit-httpws.log : group0.log
unit-close.log : group0.log
unit-wopi-documentconflict.log : group0.log
unit-prefork.log : group0.log
unit-wopi-versionrestore.log : group0.log
unit-wopi-temp.log : group0.log
unit_wopi_renamefile.log : group0.log
unit_wopi_watermark.log : group0.log
unit-wopi.log : group0.log
unit-wopi-ownertermination.log : group0.log
unit-load-torture.log : group0.log
group3.log: unit-oauth.log unit-wopi.log unit-wopi-saveas.log unit-wopi-ownertermination.log unit-wopi-versionrestore.log unit-wopi-documentconflict.log unit_wopi_renamefile.log unit_wopi_watermark.log
unit-wopi-saveas.log : group0.log
unit-password-protected.log : group0.log
unit-http.log : group0.log
unit-tiff-load.log : group0.log
unit-render-shape.log : group0.log
unit-oauth.log : group0.log
unit-large-paste.log : group0.log
unit-paste.log : group0.log
unit-rendering-options.log : group0.log
unit-session.log : group0.log
unit-uno-command.log : group0.log
unit-load.log : group0.log
unit-cursor.log : group0.log
unit-calc.log : group0.log
unit-bad-doc-load.log : group0.log
unit-hosting.log : group0.log
unit-wopi-loadencoded.log : group0.log
unit-integration.log : group0.log
unit-convert.log : group0.log
unit-typing.log : group0.log
unit-tilecache.log : group0.log
unit-timeout.log : group0.log
unit-base.log: group0.log
group1.log: unit-crash.log unit-tiletest.log unit-insert-delete.log unit-each-view.log unit-httpws.log unit-close.log unit-wopi-documentconflict.log unit-prefork.log unit-wopi-versionrestore.log unit-wopi-temp.log unit_wopi_renamefile.log unit_wopi_watermark.log unit-wopi.log unit-wopi-ownertermination.log unit-load-torture.log unit-wopi-saveas.log unit-password-protected.log unit-http.log unit-tiff-load.log unit-render-shape.log unit-oauth.log unit-large-paste.log unit-paste.log unit-rendering-options.log unit-session.log unit-uno-command.log unit-load.log unit-cursor.log unit-calc.log unit-bad-doc-load.log unit-hosting.log unit-wopi-loadencoded.log unit-integration.log unit-convert.log unit-typing.log unit-tilecache.log unit-timeout.log unit-base.log
$(CLEANUP_COMMAND)
touch $@
unit-http.log : group3.log
unit-tiff-load.log : group3.log
unit-large-paste.log : group3.log
unit-paste.log : group3.log
unit-load-torture.log : group3.log
unit-rendering-options.log : group3.log
unit-password-protected.log : group3.log
unit-render-shape.log : group3.log
unit-each-view.log : group3.log
group4.log: unit-http.log unit-tiff-load.log unit-large-paste.log unit-paste.log unit-load-torture.log unit-rendering-options.log unit-password-protected.log unit-render-shape.log unit-each-view.log
touch $@
unit-session.log : group4.log
unit-uno-command.log : group4.log
unit-load.log : group4.log
unit-cursor.log : group4.log
unit-calc.log : group4.log
unit-insert-delete.log : group4.log
group5.log: unit-session.log unit-uno-command.log unit-load.log unit-cursor.log unit-calc.log unit-insert-delete.log
touch $@
unit-close.log : group5.log
unit-bad-doc-load.log : group5.log
unit-hosting.log : group5.log
unit-wopi-loadencoded.log : group5.log
unit-wopi-temp.log : group5.log
# end forced grouping
endif

View File

@ -74,7 +74,6 @@ echo "Running $tst | $tst_log ...";
if ${trace} \
${abs_top_builddir}/loolwsd --o:sys_template_path="$systemplate_path" \
--o:child_root_path="$jails_path" \
--o:mount_jail_tree=false \
--o:storage.filesystem[@allow]=true \
--o:logging.level=trace \
--o:ssl.key_file_path="${abs_top_builddir}/etc/key.pem" \
@ -91,7 +90,6 @@ else
echo "Test failed on unit: $tst re-run with:"
echo " $ gdb --args ${abs_top_builddir}/loolwsd --o:sys_template_path=\"$systemplate_path\" \\"
echo " --o:child_root_path=\"$jails_path\" \\"
echo " --o:mount_jail_tree=false \\"
echo " --o:storage.filesystem[@allow]=true \\"
echo " --o:storage.ssl.enable=false \\"
echo " --o:logging.level=trace \\"

View File

@ -731,6 +731,7 @@ std::string LOOLWSD::LogLevel = "trace";
std::string LOOLWSD::UserInterface = "classic";
bool LOOLWSD::AnonymizeUserData = false;
bool LOOLWSD::CheckLoolUser = true;
bool LOOLWSD::CleanupOnly = false; //< If we should cleanup and exit.
bool LOOLWSD::IsProxyPrefixEnabled = false;
#if ENABLE_SSL
Util::RuntimeConstant<bool> LOOLWSD::SSLEnabled;
@ -1188,6 +1189,13 @@ void LOOLWSD::initialize(Application& self)
}
else
{
if (CleanupOnly)
{
// Cleanup and exit.
JailUtil::cleanupJails(ChildRoot);
std::exit(EX_OK);
}
if (ChildRoot[ChildRoot.size() - 1] != '/')
ChildRoot += '/';
@ -1475,7 +1483,7 @@ void LOOLWSD::defineOptions(OptionSet& optionSet)
.required(false)
.repeatable(false));
optionSet.addOption(Option("version-hash", "", "Display product version-hash information.")
optionSet.addOption(Option("version-hash", "", "Display product version-hash information and exit.")
.required(false)
.repeatable(false));
@ -1483,6 +1491,10 @@ void LOOLWSD::defineOptions(OptionSet& optionSet)
.required(false)
.repeatable(false));
optionSet.addOption(Option("cleanup", "", "Cleanup jails and other temporary data and exit.")
.required(false)
.repeatable(false));
optionSet.addOption(Option("port", "", "Port number to listen to (default: " +
std::to_string(DEFAULT_CLIENT_PORT_NUMBER) + "),")
.required(false)
@ -1565,6 +1577,8 @@ void LOOLWSD::handleOption(const std::string& optionName,
}
else if (optionName == "version")
DisplayVersion = true;
else if (optionName == "cleanup")
CleanupOnly = true; // Flag for later as we need the config.
else if (optionName == "port")
ClientPortNumber = std::stoi(value);
else if (optionName == "disable-ssl")

View File

@ -245,6 +245,7 @@ public:
static std::string LogLevel;
static bool AnonymizeUserData;
static bool CheckLoolUser;
static bool CleanupOnly;
static bool IsProxyPrefixEnabled;
static std::atomic<unsigned> NumConnections;
static std::unique_ptr<TraceFileWriter> TraceDumper;