owncloud / core

:cloud: ownCloud web server core (Files, DAV, etc.)
https://owncloud.com
GNU Affero General Public License v3.0
8.36k stars 2.06k forks source link

[QA] files_external causes exceptions when disabled after use #40055

Open jnweiger opened 2 years ago

jnweiger commented 2 years ago

Seen in 10.10.0RC1


{"reqId":"YnPltQ5C4Sbqgs0PTB36swAAAAY","level":0,"time":"2022-05-05T14:56:53+00:00","remoteAddr":"2.247.255.187","user":"admin","app":"webdav","method":"PROPFIND","url":"\/remote.php\/dav\/files\/admin\/SFTP","message":"Exception: HTTP\/1.1 503 Storage is temporarily not available: {\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\ServiceUnavailable\",\"Message\":\"Storage is temporarily not available\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Tree.php(70): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\ObjectTree->getNodeForPath()\\n#1 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/FilesPlugin.php(183): OCA\\\\DAV\\\\Tree->getNodeForPath()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\FilesPlugin->checkPropFind()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#5 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(349): Sabre\\\\DAV\\\\Server->start()\\n#6 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#7 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#8 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/ObjectTree.php\",\"Line\":181}"}
{"reqId":"YnPltQ5C4Sbqgs0PTB36swAAAAY","level":0,"time":"2022-05-05T14:56:53+00:00","remoteAddr":"2.247.255.187","user":"admin","app":"webdav","method":"PROPFIND","url":"\/remote.php\/dav\/files\/admin\/SFTP","message":"Caused by: {\"Exception\":\"OCP\\\\Files\\\\StorageNotAvailableException\",\"Message\":\"\",\"Code\":1,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Wrapper.php(532): OC\\\\Files\\\\Storage\\\\FailedStorage->getAvailability()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Wrapper.php(532): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->getAvailability()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Availability.php(63): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->getAvailability()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Availability.php(74): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Availability->isAvailable()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Availability.php(392): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Availability->checkAvailability()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Wrapper.php(385): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Availability->hasUpdated()\\n#6 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Wrapper.php(385): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->hasUpdated()\\n#7 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/Wrapper\\\/Wrapper.php(385): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->hasUpdated()\\n#8 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Watcher.php(130): OC\\\\Files\\\\Storage\\\\Wrapper\\\\Wrapper->hasUpdated()\\n#9 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1413): OC\\\\Files\\\\Cache\\\\Watcher->needsUpdate()\\n#10 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1453): OC\\\\Files\\\\View->getCacheEntry()\\n#11 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/ObjectTree.php(179): OC\\\\Files\\\\View->getFileInfo()\\n#12 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Tree.php(70): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\ObjectTree->getNodeForPath()\\n#13 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/FilesPlugin.php(183): OCA\\\\DAV\\\\Tree->getNodeForPath()\\n#14 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\FilesPlugin->checkPropFind()\\n#15 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#17 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(349): Sabre\\\\DAV\\\\Server->start()\\n#18 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#19 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#20 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Storage\\\/FailedStorage.php\",\"Line\":206}"}
{"reqId":"YnPltQ5C4Sbqgs0PTB36swAAAAY","level":0,"time":"2022-05-05T14:56:53+00:00","remoteAddr":"2.247.255.187","user":"admin","app":"webdav","method":"PROPFIND","url":"\/remote.php\/dav\/files\/admin\/SFTP","message":"Caused by: {\"Exception\":\"OCP\\\\Files\\\\StorageNotAvailableException\",\"Message\":\"\",\"Code\":1,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/External\\\/ConfigAdapter.php(110): OC\\\\Files\\\\External\\\\InvalidStorage->__construct()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/External\\\/ConfigAdapter.php(138): OC\\\\Files\\\\External\\\\ConfigAdapter->constructStorage()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Config\\\/MountProviderCollection.php(82): OC\\\\Files\\\\External\\\\ConfigAdapter->getMountsForUser()\\n#3 [internal function]: OC\\\\Files\\\\Config\\\\MountProviderCollection->OC\\\\Files\\\\Config\\\\{closure}(*** sensitive parameters replaced ***)\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Config\\\/MountProviderCollection.php(83): array_map()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Filesystem.php(447): OC\\\\Files\\\\Config\\\\MountProviderCollection->getMountsForUser()\\n#6 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Filesystem.php(374): OC\\\\Files\\\\Filesystem::initMountPoints()\\n#7 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/util.php(311): OC\\\\Files\\\\Filesystem::init()\\n#8 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Filesystem.php(264): OC_Util::setupFS()\\n#9 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1449): OC\\\\Files\\\\Filesystem::getMountManager()\\n#10 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_versions\\\/lib\\\/MetaStorage.php(80): OC\\\\Files\\\\View->getFileInfo()\\n#11 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_versions\\\/lib\\\/AppInfo\\\/Application.php(71): OCA\\\\Files_Versions\\\\MetaStorage->__construct()\\n#12 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/pimple\\\/pimple\\\/src\\\/Pimple\\\/Container.php(122): OCA\\\\Files_Versions\\\\AppInfo\\\\Application->OCA\\\\Files_Versions\\\\AppInfo\\\\{closure}(*** sensitive parameters replaced ***)\\n#13 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/AppFramework\\\/Utility\\\/SimpleContainer.php(108): Pimple\\\\Container->offsetGet()\\n#14 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_versions\\\/lib\\\/AppInfo\\\/Application.php(76): OC\\\\AppFramework\\\\Utility\\\\SimpleContainer->query()\\n#15 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_versions\\\/appinfo\\\/app.php(28): OCA\\\\Files_Versions\\\\AppInfo\\\\Application->__construct()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/app.php(253): require_once('\\\/var\\\/www\\\/ownclo...')\\n#17 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/app.php(192): OC_App::requireAppFile()\\n#18 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/app.php(125): OC_App::loadApp()\\n#19 \\\/var\\\/www\\\/owncloud\\\/remote.php(150): OC_App::loadApps()\\n#20 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/External\\\/InvalidStorage.php\",\"Line\":31}"}
{"reqId":"YnPltWzTLc9D2u9hinRifQAAAAs","level":0,"time":"2022-05-05T14:56:53+00:00","remoteAddr":"2.247.255.187","user":"admin","app":"OC\\User\\Session::validateToken","method":"PROPFIND","url":"\/remote.php\/dav\/files\/admin\/","message":"token f6d479b71693002be81199e1bbdfc4c0e846bab50d2883c3331b4049a5d18c472d416ed311e61e96c77415f25d3e760a1f3e41280cd4dfd6f769e9437cd5da2f with token id 1 found, validating"}
{"reqId":"YnPltWzTLc9D2u9hinRifgAAAAs","level":0,"time":"2022-05-05T14:56:53+00:00","remoteAddr":"2.247.255.187","user":"admin","app":"OC\\User\\Session::validateToken","method":"GET","url":"\/index.php\/apps
jvillafanez commented 2 years ago

It might be better to hide / ignore the mount point if the files_external app is disabled.

A potential patch could be the following:

diff --git a/lib/private/Files/External/ConfigAdapter.php b/lib/private/Files/External/ConfigAdapter.php
index a2deef4eb1..3d86d51b10 100644
--- a/lib/private/Files/External/ConfigAdapter.php
+++ b/lib/private/Files/External/ConfigAdapter.php
@@ -34,6 +34,7 @@ use OCP\Files\External\Service\IUserStoragesService;
 use OCP\Files\External\Service\IUserGlobalStoragesService;
 use OCP\Files\External\IStorageConfig;
 use OC\Files\Storage\FailedStorage;
+use OC\Files\External\InvalidStorage;
 use OCP\Files\StorageNotAvailableException;
 use OCP\IConfig;
 use OCP\Files\ObjectStore\IObjectStore;
@@ -133,6 +134,10 @@ class ConfigAdapter implements IMountProvider {
                $this->userGlobalStoragesService->setUser($user);

                foreach ($this->userGlobalStoragesService->getUniqueStorages() as $storage) {
+      if (\trim($storage->getBackend()->getStorageClass(), '\\') === InvalidStorage::class) {
+        \OCP\Util::writeLog('core', "Storage invalid on mount point /{$user->getUID()}/files{$storage->getMountPoint()}", \OCP\Util::DEBUG);
+        continue;
+      }
                        try {
                                $this->prepareStorageConfig($storage, $user);
                                $impl = $this->constructStorage($storage);

Note that the patch isn't fully tested and might have side effects, that's why there isn't a PR yet. It might take some time to fully evaluate the proposed solution.

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 10 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] commented 1 year ago

This issue has been automatically closed.

jnweiger commented 1 year ago

stale bot should not close QA issues.

phil-davis commented 1 year ago

https://github.com/owncloud/core/blob/master/.github/workflows/stale.yml has label "QA:Team" exempt-issue-labels. I added that label to this issue.

@jnweiger If you add that label to QA issues, then the bot will know not to close them.