nextcloud / nextcloud/calendar

calendar subscriptions are spread tenfold on other users as well filling database tables (oc_calendarobjects_props / oc_calendarchanges)

Open
#8,646 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. to triage bug needs info
Dominant language
JavaScript
Stars
1.2k
Forks
332
Avg merge
16h 13m
Merged PRs (30d)
137

Description

Steps to reproduce
  1. As I do not know what componente is doing this (cron jobs?)
  2. I cannot give a description how to get there. Sorry.
Expected behavior

For users on the server that do not have calendar sync enabled / configured, no large count of data should land in the db (calendar tables)

Actual behavior

Here are some DB queries and results to show what I am talking about.
Meanwhile NC has become almost unusable as it doing (unnecessary) things in the db, I presume.

(Query table sizes left out)
TABLE_NAME Size (MB)
oc_calendarobjects_props 1523.97
oc_calendarchanges 658.91
oc_filecache 36.70
oc_calendarobjects 8.67
oc_files_metadata 7.72
oc_cards 6.56
oc_activity 6.22
oc_files_metadata_index 0.92
oc_cards_properties 0.50
oc_files_trash 0.31
oc_bookmarks 0.30
oc_polls_votes_copy 0.30
oc_authtoken 0.20
oc_bookmarks_tree 0.20
oc_calendar_reminders 0.20

select calendarid, oc2.principaluri, oc2.displayname, oc2.uri, count(*)
from oc_calendarchanges oc1
left join oc_calendars oc2 on oc2.id=oc1.calendarid
group by calendarid

calendarid principaluri displayname uri count(*)
1 principals/users/user1 USER1 personal 999
4 principals/users/user2 default default 1346041
5 principals/users/user3 default default 2673908
6 principals/users/user4 User4 default 1347002
16 principals/users/user1 X+XX_gemeinsam xxx_gemeinsam 8727
17 principals/users/user1 Geburtstage geburtstage 321

--

select calendarid, oc2.principaluri, oc2.displayname, oc2.uri, count(*)
from oc_calendarobjects oc1
left join oc_calendars oc2 on oc2.id=oc1.calendarid
group by calendarid ;

calendarid principaluri displayname uri count(*)
1 principals/users/user1 USER1 personal 795
4 principals/users/user2 default default 36
5 principals/users/user3 default default 72
6 principals/users/user4 User4 default 448
16 principals/users/user1 X+XX_gemeinsam xxx_gemeinsam 3669
17 principals/users/user1 Geburtstage geburtstage 122

--

select calendarid, oc2.principaluri, oc2.displayname, uri, count(*)
from oc_calendarobjects_props oc1
left join oc_calendars oc2 on oc2.id=oc1.calendarid
group by calendarid ;

calendarid principaluri displayname uri count(*)
1 principals/users/user1 USER1 personal 1838
4 principals/users/user2 default default 2355854
5 principals/users/user3 default default 4011416
6 principals/users/user4 User4 default 2356733
16 principals/users/user1 X+XX_gemeinsam xxx_gemeinsam 6962
17 principals/users/user1 Geburtstage geburtstage 225

(NB: calendarobject have doubled since yesterday for user3 even after marking the calendar as deleted with occ dav:delete-calendar ...
I can add query results to find the culprit here.
Is there a way to really delete a calendar?

Calendar app version

6.5.1

CalDAV-clients used

iphone iOS26

Browser

Firefox 153

Client operating system

MacOS26.5.2

Server operating system

FreeBSD14.4p7

Web server

Apache

Database engine version

MariaDB

PHP engine version

PHP 8.4

Nextcloud version

32.0.13

Updated from an older installed version or fresh install

Updated from an older version

List of activated apps
Enabled:
  - activity: 5.0.0
  - admin_audit: 1.22.0
  - bookmarks: 16.2.4
  - calendar: 6.5.1
  - cloud_federation_api: 1.16.0
  - contacts: 8.3.16
  - dashboard: 7.12.0
  - dav: 1.34.2
  - federatedfilesharing: 1.22.0
  - federation: 1.22.0
  - files: 2.4.0
  - files_downloadlimit: 5.0.0
  - files_pdfviewer: 5.0.0
  - files_sharing: 1.24.1
  - files_trashbin: 1.22.0
  - firstrunwizard: 5.0.0
  - logreader: 5.0.0
  - lookup_server_connector: 1.20.0
  - nextcloud_announcements: 4.0.0
  - notifications: 5.0.0
  - oauth2: 1.20.0
  - password_policy: 4.0.0
  - photos: 5.0.0
  - polls: 9.1.4
  - privacy: 4.0.0
  - profile: 1.1.0
  - provisioning_api: 1.22.0
  - recommendations: 5.0.0
  - serverinfo: 4.0.0
  - settings: 1.15.1
  - sharebymail: 1.22.0
  - text: 6.0.2
  - theming: 2.7.0
  - twofactor_backupcodes: 1.21.0
  - updatenotification: 1.22.0
  - user_pwauth: 2.8.4
  - user_status: 1.12.0
  - viewer: 5.0.0
  - workflowengine: 2.14.0
Disabled:
  - app_api: 32.0.0 (installed 4.0.6)
  - bruteforcesettings: 5.0.0 (installed 2.4.0)
  - circles: 32.0.0 (installed 0.14.2)
  - comments: 1.22.0 (installed 1.20.1)
  - contactsinteraction: 1.13.1 (installed 1.9.0)
  - encryption: 2.20.0
  - files_external: 1.24.1
  - files_reminders: 1.5.0 (installed 1.3.0)
  - files_versions: 1.25.0 (installed 1.23.0)
  - notes: 5.0.2 (installed 5.0.2)
  - related_resources: 3.0.0 (installed 1.5.0)
  - support: 4.0.0 (installed 2.0.0)
  - survey_client: 4.0.0 (installed 1.8.0)
  - suspicious_login: 10.0.0
  - systemtags: 1.22.0 (installed 1.20.0)
  - twofactor_nextcloud_notification: 6.0.0
  - twofactor_totp: 14.0.0
  - user_ldap: 1.23.0
  - weather_status: 1.12.0 (installed 1.0.0)
  - webhook_listeners: 1.3.0 (installed 1.1.0-dev)
Nextcloud configuration
{
    "system": {
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "cmb.ch"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "overwrite.cli.url": "https:\/\/cmb.ch\/nc",
        "dbtype": "mysql",
        "version": "32.0.13.1",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "default_phone_region": "CH",
        "mail_smtpmode": "sendmail",
        "forcessl": true,
        "theme": "",
        "maintenance": false,
        "logfile": "\/var\/log\/nextcloud\/nextcloud.log",
        "logfile_audit": "\/var\/log\/nextcloud\/nextcloud.audit.log",
        "loglevel": 1,
        "trashbin_retention_obligation": "auto, 14",
        "log.condition": {
            "users": [
                "cmb"
            ],
            "apps": [
                "files"
            ]
        },
        "updater.release.channel": "stable",
        "filelocking.enabled": true,
        "localstorage.allowsymlinks": true,
        "enable_previews": true,
        "preview_max_x": 384,
        "preview_max_y": 512,
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "port": 0,
            "timeout": 0,
            "password": "***REMOVED SENSITIVE VALUE***"
        },
        "mysql.utf8mb4": true,
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_sendmailmode": "smtp",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "maintenance_window_start": 1
    }
}
Web server error log
no obvious error in log
Log file

Browser log

Additional info

No response

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

No source files, tests, or entry points are named. Start by reproducing the reported growth with the listed queries and the occ dav:delete-calendar command, then trace which process writes to oc_calendarobjects_props and oc_calendarchanges. Done means the responsible path and a reliable prevention or cleanup behavior are identified and verified.

Written by the indexing model from the issue text.

Assessment

Tech stack
mariadb, php
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.