nextcloud / nextcloud/calendar

Calendar freezes

Open
#6,235 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. to triage bug hotspot: recurring events performance 🚀
Dominant language
JavaScript
Stars
1.2k
Forks
332
Avg merge
16h 13m
Merged PRs (30d)
137

Description

Steps to reproduce

We're unsure what triggered this initially and cannot reproduce it outside of this server. A user was making a regular change to an event when the issues started.

  1. Enable calendar app
  2. Go to calendar in the web interface.
Expected behavior

Calendars should load, webUI should function, and the calendars should sync with thunderbird and DAVx5

Actual behaviour

When opening the calendar app, the web interface freezes, multiple calendars are indicated with a loading circle, and the entire web interface becomes unresponsive. No calendar can sync to a client.

When the Dashboard was enabled, the whole web interface would immediately freeze when it tried to fetch calendar events.

Everything else works fine when the Calendar app is disabled.

Calendar app version

4.7.14

CalDAV-clients used

DAVx5, thunderbird, web

Browser

various

Client operating system

various

Server operating system

Docker/k8s

Web server

Nginx

Database engine version

MySQL

PHP engine version

PHP 8.1

Nextcloud version

27.1.10.2

Updated from an older installed version or fresh install

Updated from an older version

List of activated apps
Enabled:
  - activity: 2.19.0
  - audioplayer: 3.4.1
  - calendar: 4.7.14
  - circles: 27.0.1
  - cloud_federation_api: 1.10.0
  - comments: 1.17.0
  - contacts: 5.5.3
  - contactsinteraction: 1.8.0
  - dav: 1.27.0
  - deck: 1.11.5
  - federatedfilesharing: 1.17.0
  - federation: 1.17.0
  - files: 1.22.0
  - files_external: 1.19.0
  - files_pdfviewer: 2.8.0
  - files_reminders: 1.0.0
  - files_rightclick: 1.6.0
  - files_sharing: 1.19.0
  - files_trashbin: 1.17.0
  - files_versions: 1.20.0
  - files_versions_s3: 0.2.2
  - firstrunwizard: 2.16.0
  - forms: 3.4.7
  - group_everyone: 0.1.13
  - groupquota: 0.2.1
  - logreader: 2.12.0
  - lookup_server_connector: 1.15.0
  - nextcloud_announcements: 1.16.0
  - notes: 4.10.1
  - notifications: 2.15.0
  - oauth2: 1.15.2
  - onlyoffice: 9.3.0
  - password_policy: 1.17.0
  - photos: 2.3.0
  - polls: 7.1.4
  - privacy: 1.11.0
  - provisioning_api: 1.17.0
  - recommendations: 1.6.0
  - related_resources: 1.2.0
  - serverinfo: 1.17.0
  - settings: 1.9.0
  - sharebymail: 1.17.0
  - spreed: 17.1.10
  - systemtags: 1.17.0
  - tasks: 0.15.0
  - text: 3.8.0
  - theming: 2.2.0
  - twofactor_backupcodes: 1.16.0
  - twofactor_totp: 9.0.0
  - user_status: 1.7.0
  - viewer: 2.1.0
  - weather_status: 1.7.0
  - workflowengine: 2.9.0
Disabled:
  - admin_audit: 1.17.0
  - approval: 1.1.1 (installed 1.1.1)
  - bruteforcesettings: 2.7.0
  - dashboard: 7.7.0 (installed 7.5.0)
  - encryption: 2.15.0
  - files_lock: 27.0.7 (installed 27.0.7)
  - support: 1.10.1 (installed 1.4.0)
  - survey_client: 1.15.0 (installed 1.7.0)
  - suspicious_login: 5.0.0
  - updatenotification: 1.17.0 (installed 1.8.0)
  - user_ldap: 1.17.0
  - user_saml: 5.2.7 (installed 5.2.7)
Nextcloud configuration
{
    "system": {
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "localhost",
            "XXXXXXXXXXX",
            "XXXXXXXXXXXXX.thegood.cloud"
        ],
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/apps2",
                "url": "\/apps2",
                "writable": true
            }
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "objectstore": {
            "class": "\\OC\\Files\\ObjectStore\\S3",
            "arguments": {
                "bucket": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
                "autocreate": true,
                "key": "***REMOVED SENSITIVE VALUE***",
                "secret": "***REMOVED SENSITIVE VALUE***",
                "hostname": "XXXXXXXXXXXXXXX.thegood.cloud",
                "port": 443,
                "use_ssl": true,
                "region": "default",
                "use_path_style": true
            }
        },
        "dbtype": "mysql",
        "version": "27.1.10.2",
        "overwrite.cli.url": "https:\/\/XXXXXXXXXXXXXXX",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "logtimezone": "Europe\/Amsterdam",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "port": "6379",
            "password": "***REMOVED SENSITIVE VALUE***"
        },
        "memcache.local": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "auth.bruteforce.protection.enabled": "false",
        "upgrade.disable-web": "true",
        "mail_smtpmode": "smtp",
        "mail_smtpauthtype": "LOGIN",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpauth": 1,
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": "465",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpsecure": "ssl",
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "twofactor_enforced": "true",
        "twofactor_enforced_groups": [
            "tgl_admin",
            "admin"
        ],
        "twofactor_enforced_excluded_groups": [
            "all",
            "mt",
            "temp"
        ],
        "mail_sendmailmode": "smtp",
        "loglevel": 0,
        "maintenance": false,
        "skeletondirectory": "\/var\/www\/html\/data\/skeleton-tgc",
        "knowledgebaseenabled": false,
        "integrity.check.disabled": true,
        "default_phone_region": "NL",
        "profile.enabled": false,
        "enable_previews": true,
        "enabledPreviewProviders": {
            "1": "OC\\Preview\\Movie",
            "2": "OC\\Preview\\MKV",
            "3": "OC\\Preview\\MP4",
            "4": "OC\\Preview\\AVI",
            "5": "OC\\Preview\\PNG",
            "6": "OC\\Preview\\JPEG",
            "7": "OC\\Preview\\GIF",
            "8": "OC\\Preview\\BMP",
            "9": "OC\\Preview\\XBitmap",
            "10": "OC\\Preview\\MP3",
            "11": "OC\\Preview\\TXT",
            "12": "OC\\Preview\\MarkDown",
            "13": "OC\\Preview\\OpenDocument",
            "14": "OC\\Preview\\Krita",
            "15": "OC\\Preview\\Illustrator",
            "16": "OC\\Preview\\HEIC",
            "17": "OC\\Preview\\Photoshop",
            "18": "OC\\Preview\\StarOffice",
            "19": "OC\\Preview\\SVG",
            "20": "OC\\Preview\\TIFF",
            "21": "OC\\Preview\\Font"
        },
        "onlyoffice": {
            "editors_check_interval": 0
        }
    }
}
Web server error log

No response

Log file
[dav] Warning: Sabre\VObject\ParseException: This parser only supports VCARD and VCALENDAR files at <<closure>>

0. /var/www/html/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 90
   Sabre\VObject\Parser\MimeDir->parseDocument()
1. /var/www/html/3rdparty/sabre/vobject/lib/Reader.php line 47
   Sabre\VObject\Parser\MimeDir->parse()
2. /var/www/html/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php line 247
   Sabre\VObject\Reader::read()
3. /var/www/html/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php line 86
   OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService->queryWebcalFeed()
4. /var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 115
   OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService->refreshSubscription()
5. /var/www/html/lib/public/BackgroundJob/Job.php line 81
   OCA\DAV\BackgroundJob\RefreshWebcalJob->run()
6. /var/www/html/lib/public/BackgroundJob/Job.php line 67
   OCP\BackgroundJob\Job->start()
7. /var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 108
   OCP\BackgroundJob\Job->execute()
8. /var/www/html/cron.php line 152
   OCA\DAV\BackgroundJob\RefreshWebcalJob->execute()

at 2024-08-06T10:21:03+02:00


[dav] Warning: InvalidArgumentException: SSL CA bundle not found: /tmp/oc_tmp_lf2KBf-.crt at <<closure>>

 0. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php line 59
    GuzzleHttp\Handler\CurlFactory->applyHandlerOptions()
 1. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlHandler.php line 43
    GuzzleHttp\Handler\CurlFactory->create("*** sensitive parameters replaced ***")
 2. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/Proxy.php line 28
    GuzzleHttp\Handler\CurlHandler->__invoke()
 3. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/Proxy.php line 48
    GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}("*** sensitive parameters replaced ***")
 4. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php line 256
    GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}("*** sensitive parameters replaced ***")
 5. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php line 240
    GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
 6. /var/www/html/3rdparty/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php line 35
    GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
 7. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php line 31
    GuzzleHttp\PrepareBodyMiddleware->__invoke()
 8. /var/www/html/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php line 71
    GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
 9. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php line 63
    GuzzleHttp\RedirectMiddleware->__invoke()
10. /var/www/html/3rdparty/guzzlehttp/guzzle/src/HandlerStack.php line 75
    GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
11. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php line 331
    GuzzleHttp\HandlerStack->__invoke()
12. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php line 168
    GuzzleHttp\Client->transfer()
13. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php line 187
    GuzzleHttp\Client->requestAsync("*** sensitive parameters replaced ***")
14. /var/www/html/lib/private/Http/Client/Client.php line 230
    GuzzleHttp\Client->request()
15. /var/www/html/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php line 214
    OC\Http\Client\Client->get()
16. /var/www/html/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php line 86
    OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService->queryWebcalFeed()
17. /var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 115
    OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService->refreshSubscription()
18. /var/www/html/lib/public/BackgroundJob/Job.php line 81
    OCA\DAV\BackgroundJob\RefreshWebcalJob->run()
19. /var/www/html/lib/public/BackgroundJob/Job.php line 67
    OCP\BackgroundJob\Job->start()
20. /var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 108
    OCP\BackgroundJob\Job->execute()
21. /var/www/html/cron.php line 152
    OCA\DAV\BackgroundJob\RefreshWebcalJob->execute()

at 2024-08-06T11:51:04+02:00
Browser log

No response

Additional info

We first encountered this issue in Nextcloud v25 with the 4.6.8 calendar app. We had a upgrade scheduled and found no issues upgrading to 26 and then to 27 but the same issue persists. Most of the calendars are shared internally. When looking at the calendars in the webinterface, the shared calendars seem to perpetually load while the 'personal' calendar does not.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php at lines 214 and 247, then trace the call from RefreshWebcalJob.php through cron.php. Compare the logged WebcalCaching failures with the calendar-loading and client-sync behavior; done means the web interface remains responsive and calendars load and sync normally.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, mysql, php
Domain
backend, databases, web-dev
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.