Update 29.0.2 -> 29.0.3 fails with exception and stacktrace

Nextcloud version (eg, 29.0.5): 29.0.2
Operating system and version (eg, Ubuntu 29.04): Ubuntu 22.04.4
Apache or nginx version (eg, Apache 2.4.25): Nginx 1.18.0
PHP version (eg, 8.3): 8.2.20

The issue you are facing:

Trying to upgrade from 29.0.2 to 29.0.3 fails with a crash of occ upgrade and Nextcloud is not usable afterwards.

Is this the first time you’ve seen this error? (Y/N): N
I first tried the update via the web Updater, restored my backup after the failure and tried the same from CLI. There was no error shown in the web updater until maintenance mode was disabled and it returned to the main web page. Only with the CLI updater I then saw the below stacktrace.

Steps to replicate it:

  1. sudo -u www-data php /var/www/nextcloud/updater/updater.phar
  2. Start update? [y/N] y
  3. Should the “occ upgrade” command be executed? [Y/n] y

CLI output of the occ upgrade:

An unhandled exception has been thrown:
InvalidArgumentException: app cannot be an empty string in /var/www/nextcloud/lib/private/AppConfig.php:1189
Stack trace:
#0 /var/www/nextcloud/lib/private/AppConfig.php(516): OC\AppConfig->assertParams()
#1 /var/www/nextcloud/lib/private/AppConfig.php(276): OC\AppConfig->getValueType()
#2 /var/www/nextcloud/lib/private/legacy/OC_App.php(736): OC\AppConfig->searchValues()
#3 /var/www/nextcloud/lib/private/Server.php(694): OC_App::getAppVersions()
#4 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}()
#5 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}()
#6 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet()
#7 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query()
#8 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query()
#9 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(197): OC\AppFramework\Utility\SimpleContainer->get()
#10 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}()
#11 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}()
#12 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet()
#13 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query()
#14 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query()
#15 /var/www/nextcloud/lib/private/Server.php(1094): OC\AppFramework\Utility\SimpleContainer->get()
#16 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}()
#17 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}()
#18 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet()
#19 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query()
#20 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query()
#21 /var/www/nextcloud/lib/private/Files/View.php(110): OC\AppFramework\Utility\SimpleContainer->get()
#22 /var/www/nextcloud/lib/private/Server.php(482): OC\Files\View->__construct()
#23 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}()
#24 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}()
#25 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet()
#26 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query()
#27 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query()
#28 /var/www/nextcloud/lib/private/Server.php(1445): OC\AppFramework\Utility\SimpleContainer->get()
#29 /var/www/nextcloud/lib/base.php(641): OC\Server->boot()
#30 /var/www/nextcloud/lib/base.php(1181): OC::init()
#31 /var/www/nextcloud/console.php(48): require_once('...')
#32 /var/www/nextcloud/occ(11): require_once('...')
#33 {main}

After disabling the maintenance mode, the Nextcloud webpage is shoing below error message:

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

The output of your config.php file in /path/to/nextcloud (make sure you remove any identifiable information!):

<?php
$CONFIG = array (
  'instanceid' => '**********',
  'passwordsalt' => '**********',
  'secret' => '**********',
  'trusted_domains' =>
  array (
    0 => 'my.sever.domain',
  ),
  'trusted_proxies' =>
  array (
    0 => '127.0.0.1/8',
    1 => '::1/128',
    2 => '192.168.178.15',
  ),
  'datadirectory' => '/cloud/data',
  'overwrite.cli.url' => 'https://my.server.domain',
  'dbtype' => 'mysql',
  'version' => '29.0.2.2',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nextcloud',
  'dbpassword' => '**********',
  'logtimezone' => 'UTC',
  'installed' => true,
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'filelocking.enabled' => 'true',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
    'dbindex' => 0,
    'password' => '**********',
    'timeout' => 1.5,
  ),
  'enable_previews' => true,
  'preview_max_x' => 1024,
  'preview_max_y' => 1024,
  'preview_max_scale_factor' => 10,
  'preview_max_filesize_image' => 50,
  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\PNG',
    1 => 'OC\\Preview\\JPEG',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\HEIC',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\MP3',
    7 => 'OC\\Preview\\TXT',
    8 => 'OC\\Preview\\MarkDown',
    9 => 'OC\\Preview\\Image',
    10 => 'OC\\Preview\\TIFF',
  ),
  'debug' => false,
  'logfile' => '/var/log/nextcloud/nextcloud.log',
  'loglevel' => 2,
  'mail_from_address' => 'admin',
  'mail_smtpmode' => 'smtp',
  'mail_domain' => 'mail.server',
  'mail_smtpauthtype' => 'LOGIN',
  'mail_smtphost' => 'smtp.mail.server',
  'theme' => '',
  'maintenance' => false,
  'appstore.experimental.enabled' => true,
  'htaccess.RewriteBase' => '/',
  'updater.release.channel' => 'stable',
  'remember_login_cookie_lifetime' => 1296000,
  'mysql.utf8mb4' => true,
  'trashbin_retention_obligation' => 'auto, 90',
  'encryption.key_storage_migrated' => false,
  'app_install_overwrite' =>
  array (
    0 => 'twofactor_nextcloud_notification',
    1 => 'previewgenerator',
    2 => 'breezedark',
    3 => 'files_retention',
  ),
  'mail_sendmailmode' => 'smtp',
  'default_phone_region' => 'DE',
  'mail_smtpauth' => 1,
  'mail_smtpname' => 'admin@mail.server',
  'mail_smtppassword' => '**********',
  'mail_smtpport' => '465',
  'mail_smtpsecure' => 'ssl',
  'maintenance_window_start' => 1,
  'memories.db.triggers.fcu' => true,
  'memories.exiftool' => '/var/www/nextcloud/apps/memories/bin-ext/exiftool-amd64-glibc',
  'memories.vod.path' => '/var/www/nextcloud/apps/memories/bin-ext/go-vod-amd64',
  'memories.gis_type' => 1,
);

/var/www/nextcloud/apps

activity              dav                     files_sharing            notes             recommendations    text
admin_audit           encryption              files_trashbin           notifications     related_resources  theming
bookmarks             federatedfilesharing    files_versions           notify_push       richdocuments      twofactor_backupcodes
bruteforcesettings    federation              firstrunwizard           oauth2            serverinfo         twofactor_nextcloud_notification
calendar              files                   groupfolders             password_policy   settings           twofactor_totp
circles               files_automatedtagging  logreader                phonetrack        sharebymail        updatenotification
cloud_federation_api  files_downloadlimit     lookup_server_connector  photos            support            user_ldap
comments              files_external          mail                     previewgenerator  survey_client      user_status
contacts              files_pdfviewer         maps                     privacy           suspicious_login   viewer
contactsinteraction   files_reminders         memories                 provisioning_api  systemtags         weather_status
dashboard             files_retention         nextcloud_announcements  recognize         tasks              workflowengine

i have exactly the same error… :neutral_face:
tried update from 28.0.6, 28.0.7 and 29.0.2. also changed from php8.2 to php8.3. Always the same error message

1 Like

Unfavorably, the stack trace is not that meaningful :frowning:

It’s showing the path from occ through our dependency container stack and that it fails somewhere.

It would be helpful to also show the arguments for the function calls. I guess you have zend.exception_ignore_args set to true and therefore the arguments are hidden.

Could you try to run occ like

php -d zend.exception_ignore_args=0 occ upgrade

to generate a more meaningful stack trace?

Before posting the stack trace here, please make sure to look for database credentials or other passwords.

I tried with zend.exception_ignore_args=0, bu no significant difference as far as I can see:

sudo -u www-data php -d zend.exception_ignore_args=0 occ upgrade
An unhandled exception has been thrown:
InvalidArgumentException: app cannot be an empty string in /var/www/nextcloud/lib/private/AppConfig.php:1189
Stack trace:
#0 /var/www/nextcloud/lib/private/AppConfig.php(516): OC\AppConfig->assertParams('', '...')
#1 /var/www/nextcloud/lib/private/AppConfig.php(276): OC\AppConfig->getValueType('', '...', false)
#2 /var/www/nextcloud/lib/private/legacy/OC_App.php(736): OC\AppConfig->searchValues('...')
#3 /var/www/nextcloud/lib/private/Server.php(694): OC_App::getAppVersions()
#4 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#5 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#6 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('...')
#7 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('...', true)
#8 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('...')
#9 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(197): OC\AppFramework\Utility\SimpleContainer->get('...')
#10 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#11 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#12 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('...')
#13 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('...', true)
#14 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('...')
#15 /var/www/nextcloud/lib/private/Server.php(1094): OC\AppFramework\Utility\SimpleContainer->get('...')
#16 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#17 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#18 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('...')
#19 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('...', true)
#20 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('...')
#21 /var/www/nextcloud/lib/private/Files/View.php(110): OC\AppFramework\Utility\SimpleContainer->get('...')
#22 /var/www/nextcloud/lib/private/Server.php(482): OC\Files\View->__construct()
#23 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#24 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#25 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('...')
#26 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('...', true)
#27 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('...')
#28 /var/www/nextcloud/lib/private/Server.php(1445): OC\AppFramework\Utility\SimpleContainer->get('...')
#29 /var/www/nextcloud/lib/base.php(641): OC\Server->boot()
#30 /var/www/nextcloud/lib/base.php(1181): OC::init()
#31 /var/www/nextcloud/console.php(48): require_once('...')
#32 /var/www/nextcloud/occ(11): require_once('...')
php -d zend.exception_ignore_args=0 -d zend.exception_string_param_max_len=2000 occ upgrade

Maybe? :wink:

Yes, this provides more information, but not sure what to do next.

root@hp250:/var/www/nextcloud# sudo -u www-data php -d zend.exception_ignore_args=0 -d zend.exception_string_param_max_len=2000 occ upgrade
An unhandled exception has been thrown:
InvalidArgumentException: app cannot be an empty string in /var/www/nextcloud/lib/private/AppConfig.php:1189
Stack trace:
#0 /var/www/nextcloud/lib/private/AppConfig.php(516): OC\AppConfig->assertParams('', 'installed_version')
#1 /var/www/nextcloud/lib/private/AppConfig.php(276): OC\AppConfig->getValueType('', 'installed_version', false)
#2 /var/www/nextcloud/lib/private/legacy/OC_App.php(736): OC\AppConfig->searchValues('installed_version')
#3 /var/www/nextcloud/lib/private/Server.php(694): OC_App::getAppVersions()
#4 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#5 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#6 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('OC\\Memcache\\Factory')
#7 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('OC\\Memcache\\Factory', true)
#8 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('OC\\Memcache\\Factory')
#9 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(197): OC\AppFramework\Utility\SimpleContainer->get('OC\\Memcache\\Factory')
#10 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#11 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(118): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#12 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('OCP\\ICacheFactory')
#13 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('OCP\\ICacheFactory', true)
#14 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('OCP\\ICacheFactory')
#15 /var/www/nextcloud/lib/private/Server.php(1094): OC\AppFramework\Utility\SimpleContainer->get('OCP\\ICacheFactory')
#16 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#17 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#18 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('OCP\\Lock\\ILockingProvider')
#19 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('OCP\\Lock\\ILockingProvider', true)
#20 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('OCP\\Lock\\ILockingProvider')
#21 /var/www/nextcloud/lib/private/Files/View.php(110): OC\AppFramework\Utility\SimpleContainer->get('OCP\\Lock\\ILockingProvider')
#22 /var/www/nextcloud/lib/private/Server.php(482): OC\Files\View->__construct()
#23 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(175): OC\Server->OC\{closure}(Object(OC\Server))
#24 /var/www/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(122): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(Pimple\Container))
#25 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(142): Pimple\Container->offsetGet('OC\\Files\\Node\\HookConnector')
#26 /var/www/nextcloud/lib/private/ServerContainer.php(173): OC\AppFramework\Utility\SimpleContainer->query('OC\\Files\\Node\\HookConnector', true)
#27 /var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(64): OC\ServerContainer->query('OC\\Files\\Node\\HookConnector')
#28 /var/www/nextcloud/lib/private/Server.php(1445): OC\AppFramework\Utility\SimpleContainer->get('OC\\Files\\Node\\HookConnector')
#29 /var/www/nextcloud/lib/base.php(641): OC\Server->boot()
#30 /var/www/nextcloud/lib/base.php(1181): OC::init()
#31 /var/www/nextcloud/console.php(48): require_once('/var/www/nextcloud/lib/base.php')
#32 /var/www/nextcloud/occ(11): require_once('/var/www/nextcloud/console.php')

Those apps are enabled even if the app is incompatible with the nextcloud server version. Mind removing the section and see if that changes the problem?

1 Like

Thanks for the hint, but actually this apps are not incompatible anymore or not used.
To be sure, I removed that config and re-tried, but same failure with exception unfortunately.

Seems to be introduced in [stable29] fix(appconfig): format app values by backportbot[bot] · Pull Request #44894 · nextcloud/server · GitHub, because now getValueType is used, which asserts the parameters (https://github.com/nextcloud/server/blob/5270ffc3a5ad590c780d792cc004fdd00c366233/lib/private/AppConfig.php#L489) and does not allow an empty app string (server/lib/private/AppConfig.php at 5270ffc3a5ad590c780d792cc004fdd00c366233 · nextcloud/server · GitHub).

Since the searchValues also asserts the parameters, but in contrast allows an empty app string (server/lib/private/AppConfig.php at 5270ffc3a5ad590c780d792cc004fdd00c366233 · nextcloud/server · GitHub), maybe the assert in the getValueType should also allow it?

I assume @kesselb might know better than me :slight_smile:

2 Likes

I’m not sure.

The faulty code is called in server/lib/private/AppConfig.php at 11323fbb5561962e3fda5b816fe34544ef938624 · nextcloud/server · GitHub

That means we have an item in $cache with an empty string as key. That seems wrong. The installed_version belongs to an app and an app should always have an id, an empty string is not an id :wink:

But we are very early in the boostraping phase, so maybe it’s just the wrong AppConfig instanced used here.

Agreed, but in the calling function we specifically allow an empty app string: server/lib/private/AppConfig.php at 11323fbb5561962e3fda5b816fe34544ef938624 · nextcloud/server · GitHub

So there seems to cases were we expect an empty id? :face_with_monocle:

Could try to replace the searchValue method in lib/private/AppConfig.php with the one below and try to run the upgrade again? It should print the cache object for app, maybe that gives us an idea.

	public function searchValues(string $key, bool $lazy = false, ?int $typedAs = null): array {
		$this->assertParams('', $key, true);
		$this->loadConfig($lazy);

		/** @var array<array-key, array<array-key, mixed>> $cache */
		if ($lazy) {
			$cache = $this->lazyCache;
		} else {
			$cache = $this->fastCache;
		}

		$values = [];
		foreach (array_keys($cache) as $app) {
			if (empty($app)) {
				var_dump($app, $cache[$app]);
			}
			if (isset($cache[$app][$key])) {
				$values[$app] = $this->convertTypedValue($cache[$app][$key], $typedAs ?? $this->getValueType((string)$app, $key, $lazy));
			}
		}

		return $values;
	}
1 Like

With the modified function I get this extra output:

string(0) ""
array(2) {
  ["enabled"]=>
  string(2) "no"
  ["installed_version"]=>
  string(1) "0"
}
An unhandled exception has been thrown:
InvalidArgumentException: app cannot be an empty string in /var/www/nextcloud/lib/private/AppConfig.php:1192
...

Since this seems to be related to a disabled app, below the list of my disabled apps from occ app:list

Disabled:
  - bruteforcesettings: 2.9.0 (installed 1.0.2)
  - dashboard: 7.9.0 (installed 7.0.0)
  - encryption: 2.17.0 (installed 2.7.0)
  - suspicious_login: 7.0.0
  - user_ldap: 1.20.0
  - weather_status: 1.9.0 (installed 1.2.0)

Hi,

Can you check database table oc_appconfig and see if there are rows with an empty appid?