Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incompatibility with Nextcloud 28.0.2 - Makes Files not showing up in Files Web Interface #137

Closed
CarlosVGonzalez opened this issue Feb 13, 2024 · 21 comments · Fixed by #139

Comments

@CarlosVGonzalez
Copy link

CarlosVGonzalez commented Feb 13, 2024

After Nextcloud update to version v28.0.2 the Photo Sphere v1.28.0 extension make files not showing up on Nextcloud Web Interface Files tab (All Files), disabling Photo Shere Nextcloud extension makes Nextcloud function correctly.

@R0Wi
Copy link
Member

R0Wi commented Feb 13, 2024

Do you have any further information like browser- and backend-logs?

@CarlosVGonzalez
Copy link
Author

I have tried several (Firefox, Chrome, Brave, Edge) web browsers with empty cache and all them presented the same problem. I don't have backend logs now, will check later, behaviour can be replicated enabling/disabling the extension.

@CarlosVGonzalez
Copy link
Author

This log line might help:

{"reqId" xxxxxxxxxxxxxxxx level 3 time 2024-02-14T19:51:30+00:00 remoteAddr xxx.xx.xxx.xx user xxxxxxxx app webdav method PROPFIND url /nextcloud/remote.php/dav/files/xxxxxxx/ message OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned userAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 version 28.0.2.5 exception {"Exception" TypeError Message OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned Code 0 Trace [{"file" /var/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php line 109 function getXmpMetadataCached class OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin type ->"},{"file /var/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php line 102 function handleGetXmpMetadata class OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/PropFind.php line 95 function OCA\Files_PhotoSpheres\Sabre\{closure} class OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin type -> args ["*** sensitive parameters replaced ***"]} {"file" /var/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php line 103 function handle class Sabre\DAV\PropFind type ->"},{"file /var/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php line 89 function handleGetProperties class OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 1052 function emit class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 984 function getPropertiesByNode class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 1662 function getPropertiesIteratorForPath class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 1647 function writeMultiStatus class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php line 346 function generateMultiStatus class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php line 89 function httpPropFind class Sabre\DAV\CorePlugin type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 472 function emit class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 253 function invokeMethod class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 321 function start class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/apps/dav/lib/Server.php line 370 function exec class Sabre\DAV\Server type ->"},{"file /var/www/nextcloud/apps/dav/appinfo/v2/remote.php line 35 function exec class OCA\DAV\Server type ->"},{"file /var/www/nextcloud/remote.php line 172 args ["/var/www/nextcloud/apps/dav/appinfo/v2/remote.php"] function require_once"}],"File /var/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php Line 147 message OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned exception {} CustomMessage "OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin getXmpMetadataCached() Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel array returned"}}

@burner-
Copy link

burner- commented Feb 17, 2024

I can confim that this problem is reproducable and goes away with disabbling this plugin.
Looks that there is also some conversation of it
https://forum.cloudron.io/topic/11092/images-no-longer-visible-in-file-view-symlink-problem

@blauvster
Copy link

I also have the same issue.

{"reqId":"UOifkXyos44DZPKDyZO4","level":3,"time":"2024-02-17T19:39:20+00:00","remoteAddr":"192.168.8.60","user":"tom","app":"webdav","method":"PROPFIND","url":"/remote.php/dav/files/tom/","message":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36","version":"28.0.2.5","exception":{"Exception":"TypeError","Message":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned","Code":0,"Trace":[{"file":"/var/lib/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php","line":109,"function":"getXmpMetadataCached","class":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin","type":"->"},{"file":"/var/lib/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php","line":102,"function":"handleGetXmpMetadata","class":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/PropFind.php","line":95,"function":"OCA\Files_PhotoSpheres\Sabre\{closure}","class":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/lib/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php","line":101,"function":"handle","class":"Sabre\DAV\PropFind","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"handleGetProperties","class":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":1052,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":984,"function":"getPropertiesByNode","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":1662,"function":"getPropertiesIteratorForPath","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":1647,"function":"writeMultiStatus","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\DAV\CorePlugin","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/apps/dav/lib/Server.php","line":370,"function":"exec","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\DAV\Server","type":"->"},{"file":"/usr/share/webapps/nextcloud/remote.php","line":172,"args":["/usr/share/webapps/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/lib/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.php","Line":147,"message":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned","exception":[],"CustomMessage":"OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned"},"id":"65d10c78be443"}

@R0Wi
Copy link
Member

R0Wi commented Feb 18, 2024

Sorry for the inconvenience folks. Hope I will find some time soon to look deeper into this. Will keep you posted.

@R0Wi
Copy link
Member

R0Wi commented Feb 26, 2024

Hey guys, I just tried to reproduce the issue on a fresh NC28 docker installation. Unfortunately I wasn't able to - everything worked like expected. Could you please give me some more insights about your setup? Do you have APCU/OPCache installed? Are we talking about a native installation or a docker based one?

@CarlosVGonzalez
Copy link
Author

Hi, I have a native installation, and the server is configured to use redis cache, php.ini has zend_extension=opcache enabled. I am using debian based Ubuntu with kernel 5.15.0-97

@blauvster
Copy link

I have a native install as well, in an Alpine LXC. Using opcache and redis. Install based on:
https://github.com/tteck/Proxmox/blob/main/install/alpine-nextcloud-install.sh

@blauvster
Copy link

Hello R0Wi, I commented out the return type specification of the two caching functions and everything is working as it should:
image

@laurensbl
Copy link

laurensbl commented Feb 28, 2024

Same here. Native install as well, Ubuntu 22.04.4 LTS PHP 8.1 Redis OPcache in Proxmox 8.1.4 container (kernel 6.5.13-1-pve (2024-02-05T13:50Z).

@R0Wi
Copy link
Member

R0Wi commented Feb 29, 2024

Could one of you please share the section of the config.php where the different cache-types are configured? I'm suspecting the Redis cache to cause the issue here.

@laurensbl
Copy link

laurensbl commented Feb 29, 2024

config.php:

'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => true,
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => 
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'dbindex' => 0,
'password' => '<pass-obfuscated>',
'timeout' => 0.0,
),

php.ini (only non-default settings shown):

session.save_handler = redis
session.save_path = "unix:///var/run/redis/redis-server.sock?persistent=1&weight=1&database=0&auth=<pass-obfuscated>"

; From nextcloud documentation (https://docs.nextcloud.com/server/21/admin_manual/configuration_server/caching_configuration.html):
;
; (...)
; Adding the following settings in your php.ini file will prevent session
; corruption when using Redis as your session handler:
redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000

Edit: Just to be sure (didn't expect any change and it didn't): I changed the path in php.ini from /var/run to /run.

@laurensbl
Copy link

Alas, updated to NC 28.0.3, no change, still no files shown with Photo Sphere Viewer enabled.

[webdav] Error: OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned
	PROPFIND /remote.php/dav/files/<path-obfuscated>/
	from <ip4-obfuscated> by laurens at 29 feb 2024 22:02:35


 TypeError OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin::getXmpMetadataCached(): Return value must be of type ?OCA\Files_PhotoSpheres\Model\XmpResultModel, array returned

    /srv/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.phpline 109
    OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin->getXmpMetadataCached()

    /srv/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.phpline 102
    OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin->handleGetXmpMetadata()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/PropFind.phpline 95
    OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin->OCA\Files_PhotoSpheres\Sabre\{closure}(
      "*** sensitive parameters replaced ***"
    )

    /srv/www/nextcloud/apps/files_photospheres/lib/Sabre/PhotosphereViewerPlugin.phpline 103
    SabreDAV\PropFind->handle()

    /srv/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.phpline 89
    OCA\Files_PhotoSpheres\Sabre\PhotosphereViewerPlugin->handleGetProperties()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 1052
    SabreDAV\Server->emit()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 984
    SabreDAV\Server->getPropertiesByNode()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 1662
    SabreDAV\Server->getPropertiesIteratorForPath()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 1647
    SabreDAV\Server->writeMultiStatus()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.phpline 346
    SabreDAV\Server->generateMultiStatus()

    /srv/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.phpline 89
    SabreDAV\CorePlugin->httpPropFind()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 472
    SabreDAV\Server->emit()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 253
    SabreDAV\Server->invokeMethod()

    /srv/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.phpline 321
    SabreDAV\Server->start()

    /srv/www/nextcloud/apps/dav/lib/Server.phpline 373
    SabreDAV\Server->exec()

    /srv/www/nextcloud/apps/dav/appinfo/v2/remote.phpline 35
    OCA\DAV\Server->exec()

    /srv/www/nextcloud/remote.phpline 172
    undefinedundefinedrequire_once(
      "/srv/www/nextcloud/apps/dav/appinfo/v2/remote.php"
    )

@blauvster
Copy link

From my Nextcloud config.php:

  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => 'localhost',
    'port' => 6379,
    'dbindex' => 0,
    'timeout' => 1.5,

From my debugging it looks like this guy is returning an array data type:

$cachedXmpMeta = $this->cache->get($id);

And since it doesn't match the specified return data type, XmpResultModel, it is erroring out. Maybe the Nextcloud docker image has the PHP error handling a little less strict than the default 8.2 settings? I don't know if there is a good way to type cast it into the XmpResultModel but removing the return definition worked for me.

@R0Wi
Copy link
Member

R0Wi commented Mar 1, 2024

It seems that Redis behaves differently compared to APCU in this case. Since I was using APCU all the time, I wasn't able to reproduce the issue. Will try to find a proper solution ASAP

@laurensbl
Copy link

It seems that Redis behaves differently compared to APCU in this case. Since I was using APCU all the time, I wasn't able to reproduce the issue. Will try to find a proper solution ASAP

Seems so indeed. Switched to APCu and files are shown normally again when Photo Sphere Viewer is enabled. Problem gone.

'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => true,
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => 
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'dbindex' => 0,
'password' => '<pass-obfuscated>',
'timeout' => 0.0,
),

R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
@R0Wi R0Wi linked a pull request Mar 9, 2024 that will close this issue
R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
R0Wi added a commit that referenced this issue Mar 9, 2024
* Redis returns array instead of deserialized object
@R0Wi
Copy link
Member

R0Wi commented Mar 9, 2024

Sorry for the delay. Should be fixed in v1.28.1. Feel free to reopen if you're still facing the issue.

Some details: Redis indeed behaves a bit differently compared to APCU. It returns an array instead of a deserialized object which has been cached before. This should now be covered but in my opinion this is also a Nextcloud issue. From my point of view it shouldn't make any difference which particular cache the system is using - The technical NC interface should always behave the same.

@R0Wi R0Wi closed this as completed Mar 9, 2024
@CarlosVGonzalez
Copy link
Author

Thank you for the work to solve the problem, I also have the same opinion, Nextcloud interface shouldn't be sensible for the cache system.

@burner-
Copy link

burner- commented Mar 10, 2024

did you open ticket of this to NC? I totally agree that interface should stay as same regardless of backend. It whould be good to open ticket for nc and cross link these. It may help in future if some other module hits to same issue and nc still had not fix it.

@R0Wi
Copy link
Member

R0Wi commented Mar 11, 2024

did you open ticket of this to NC? I totally agree that interface should stay as same regardless of backend. It whould be good to open ticket for nc and cross link these. It may help in future if some other module hits to same issue and nc still had not fix it.

Didn't yet find the time, unfortunately. But that's on my TODO list 😉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants