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

Prevent Sabre\VObject\Recur\NoInstancesException: This recurrence rule does not generate any valid instances from being fatal to CalDAV sync #5641

Closed
sushidave opened this issue Jul 6, 2017 · 36 comments
Assignees
Labels
0. Needs triage Pending check for reproducibility or if it fits our roadmap 25-feedback bug feature: caldav Related to CalDAV internals feature: dav low

Comments

@sushidave
Copy link

sushidave commented Jul 6, 2017

Steps to reproduce

  1. Sign-in into Nextcloud as an admin
  2. Check the Nextcloud log

Expected behaviour

Log shows no fatal errors

Actual behaviour

Log shows same fatal error every 30 seconds, see Nextcloud log below

Server configuration

Operating system:
Linux 3.10.0

Web server:
Apache

Database:
mysql 10.1.21

PHP version:
5.6.30

Nextcloud version: (see Nextcloud admin page)
11.0.3

Updated from an older Nextcloud/ownCloud or fresh install:
Updated

Where did you install Nextcloud from:
nextcloud.com

Signing status:

Signing status No errors have been found.

List of activated apps:

App list - Activity 2.4.1 - Auditing / Logging 1.1.0 - Collaborative Tags 1.1.3 - Comments 1.1.0 - Deleted files 1.1.0 - Federation 1.1.1 - File sharing 1.1.1 - First run wizard 2.0 - Gallery 16.0.0 - Log reader 2.0.0 - Mail template editor 0.2 - Nextcloud announcements 1.0 - Notifications 1.0.1 - Password policy 1.1.0 - PDF viewer 1.0.1 - Server info 1.1.1 - Share by mail 1.0.1 - Text editor 2.2 - Theming 1.1.1 - Update notification 1.1.1 - Usage service 0.1.5 - Versions 1.4.0 - Audio player 2.0.2 - Bookmarks 0.10.0 - Calendar 1.5.3 - Contacts 1.5.3 - Direct Menu 0.10.2 - Keeweb 0.4.0 - Mail 0.6.4 - Tasks 0.9.5 - Video calls 1.2.0

Nextcloud configuration:

Config report 'instanceid' => '********', 'passwordsalt' => '**************************************', 'secret' => '***********************************************', 'trusted_domains' => array ( 0 => '******************', ), 'datadirectory' => '/home/httpd/vhosts/********/cloud_data', 'dbtype' => 'mysql', 'version' => '11.0.3.2', 'dbname' => '**********', 'dbhost' => 'localhost', 'dbtableprefix' => 'oc_', 'dbuser' => '******', 'dbpassword' => '**********************', 'logtimezone' => 'UTC', 'installed' => true, 'loglevel' => 2, 'maintenance' => false, 'htaccess.RewriteBase' => '/', 'forcessl' => true, 'memcache.local' => '\\OC\\Memcache\\ArrayCache', 'mail_smtpmode' => 'smtp', 'mail_smtpauthtype' => 'LOGIN', 'mail_smtphost' => '*********.net', 'mail_smtpport' => '25', 'mail_smtpsecure' => 'tls', 'mail_from_address' => 'nextcloud', 'mail_domain' => '*************', 'overwrite.cli.url' => 'https://****************:443', 'overwriteprotocol' => 'https', 'theme' => '',

Are you using external storage, if yes which one: local/smb/sftp/...
No
Are you using encryption: yes/no
https
Are you using an external user-backend, if yes which one: LDAP/ActiveDirectory/Webdav/...
No

Logs

Web server error log

Web server error log mod_fcgid: stderr: PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0 (same entry about every 12 minutes)

Nextcloud log (data/nextcloud.log)

Nextcloud log Fatal | Sabre\VObject\Recur\NoInstancesException: This recurrence rule does not generate any valid instances
  1. /home/httpd/vhosts/---.com/cloud.---.com/apps/dav/lib/CalDAV/CalDavBackend.php - line 1680: Sabre\VObject\Recur\EventIterator->__construct(Object(Sabre\VObject\Component\VCalendar), '9C226CCF-F69E-4...')
  2. /home/httpd/vhosts/---.com/cloud.---.com/apps/dav/lib/CalDAV/CalDavBackend.php - line 961: OCA\DAV\CalDAV\CalDavBackend->getDenormalizedData('BEGIN VCALENDAR...')
  3. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/dav/lib/CalDAV/CalendarObject.php - line 106: OCA\DAV\CalDAV\CalDavBackend->updateCalendarObject('7', '9C226CCF-F69E-4...', 'BEGIN VCALENDAR...')
  4. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/dav/lib/DAV/Server.php - line 1106: Sabre\CalDAV\CalendarObject->put('BEGIN VCALENDAR...')
  5. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/dav/lib/DAV/CorePlugin.php - line 513: Sabre\DAV\Server->updateFile('calendars/*****...', Resource id Allow downgrades of maintenance accross vendors #529, NULL)
    [internal function] Sabre\DAV\CorePlugin->httpPut(Object(Sabre\HTTP\Request), Object(Sabre\HTTP\Response))
  6. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/event/lib/EventEmitterTrait.php - line 105: call_user_func_array(Array, Array)
  7. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/dav/lib/DAV/Server.php - line 479: Sabre\Event\EventEmitter->emit('method PUT', Array)
  8. /home/httpd/vhosts/---.com/cloud.---.com/3rdparty/sabre/dav/lib/DAV/Server.php - line 254: Sabre\DAV\Server->invokeMethod(Object(Sabre\HTTP\Request), Object(Sabre\HTTP\Response))
  9. /home/httpd/vhosts/---.com/cloud.---.com/apps/dav/lib/Server.php - line 231: Sabre\DAV\Server->exec()
  10. /home/httpd/vhosts/---.com/cloud.---.com/apps/dav/appinfo/v2/remote.php - line 30: OCA\DAV\Server->exec()
  11. /home/httpd/vhosts/---.com/cloud.---.com/remote.php - line 165: require_once('/home/httpd/vho...')
  12. {main}
@beyercenter
Copy link

beyercenter commented Jul 16, 2017

same here.
There must be some events that are "broken".
If you search in your db for that 9C226CCF-F69E-4... you will probable not find it. So this event is NOT synced (my opinion!!!).
andy idea about how to debug this?
probably we need so find the source of this event and fix it!

Update: maybe this helps (not tested yet): https://forums.bitfire.at/topic/1024/owncloud-this-recurrence-rule-does-not-generate-any-valid-instances
I do not know whats source or client you are using, but if its some Android I would try syncing all events and not only past xyz days/weeks/years.

@sushidave
Copy link
Author

@beyercenter Thank you for your post. I couldn't find a calendar by this ID in the database, indeed. The clients in use are Thunderbird's Lightning 5.4 Add-on as well as iOS 10.3.2 default contacts app.

@sushidave
Copy link
Author

sushidave commented Jul 17, 2017

The UID isn't in the actual database because the event has been deleted in the meantime. But I found it in an ICS file which had been exported from Thunderbird earlier:

BEGIN:VEVENT
CREATED:20170308T003229Z
LAST-MODIFIED:20170612T213334Z
DTSTAMP:20170612T213334Z
UID:9C226CCF-F69E-4E8D-AAD1-141B9F90CE8B
SUMMARY:(Title)
EXDATE:20170308T083000Z
EXDATE:20170309T083000Z
EXDATE:20170310T083000Z
EXDATE:20170311T083000Z
EXDATE:20170312T083000Z
EXDATE:20170313T083000Z
EXDATE:20170314T083000Z
EXDATE:20170315T083000Z
EXDATE:20170316T083000Z
EXDATE:20170317T083000Z
EXDATE:20170318T083000Z
EXDATE:20170319T083000Z
EXDATE:20170320T083000Z
EXDATE:20170321T083000Z
EXDATE:20170322T083000Z
EXDATE:20170323T083000Z
EXDATE:20170324T083000Z
EXDATE:20170325T083000Z
EXDATE:20170326T073000Z
EXDATE:20170327T073000Z
EXDATE:20170328T073000Z
EXDATE:20170329T073000Z
EXDATE:20170330T073000Z
EXDATE:20170331T073000Z
EXDATE:20170401T073000Z
EXDATE:20170402T073000Z
EXDATE:20170403T073000Z
EXDATE:20170404T073000Z
EXDATE:20170405T073000Z
EXDATE:20170406T073000Z
EXDATE:20170407T073000Z
EXDATE:20170408T073000Z
EXDATE:20170409T073000Z
EXDATE:20170410T073000Z
EXDATE:20170411T073000Z
EXDATE:20170412T073000Z
EXDATE:20170413T073000Z
EXDATE:20170414T073000Z
EXDATE:20170415T073000Z
EXDATE:20170416T073000Z
EXDATE:20170417T073000Z
EXDATE:20170418T073000Z
EXDATE:20170419T073000Z
EXDATE:20170420T073000Z
EXDATE:20170421T073000Z
EXDATE:20170422T073000Z
EXDATE:20170423T073000Z
EXDATE:20170425T073000Z
RRULE:FREQ=DAILY;UNTIL=20170514T215959Z
EXDATE:20170424T073000Z
EXDATE:20170426T073000Z
EXDATE:20170427T073000Z
EXDATE:20170428T073000Z
EXDATE:20170429T073000Z
EXDATE:20170430T073000Z
EXDATE:20170501T073000Z
EXDATE:20170502T073000Z
EXDATE:20170503T073000Z
EXDATE:20170504T073000Z
EXDATE:20170505T073000Z
EXDATE:20170508T073000Z
EXDATE:20170509T073000Z
EXDATE:20170510T073000Z
EXDATE:20170511T073000Z
EXDATE:20170506T073000Z
EXDATE:20170507T073000Z
EXDATE:20170512T073000Z
EXDATE:20170513T073000Z
EXDATE:20170514T073000Z
DTSTART;TZID=Europe/Zurich:20170308T093000
DTEND;TZID=Europe/Zurich:20170308T094500
SEQUENCE:54
TRANSP:OPAQUE
X-MOZ-GENERATION:53
END:VEVENT

@MorrisJobke
Copy link
Member

cc @georgehrke @rullzer

@nextcloud-bot nextcloud-bot added the stale Ticket or PR with no recent activity label Jun 20, 2018
@jypma
Copy link

jypma commented Dec 25, 2018

Don't mean to necrobump, but I'm seeing this for some events edited on an iPhone client, nextcloud 11.0.8 (yes I know I should upgrade :-). New events created from the iPhone show just fine.

@nextcloud-bot nextcloud-bot removed the stale Ticket or PR with no recent activity label Dec 25, 2018
@sushidave
Copy link
Author

Thank you @jypma. I'm confirming that an iPhone was used in this case to edit calendar events.

@georgehrke
Copy link
Member

@sushidave @jypma Can you please test this on a supported version of Nextcloud (preferably 15) and report back whether you can still reproduce this?

The error message in question generally means that the client (let it be Thunderbird or iOS) is sending calendar data with a terribly broken recurrence rule. Hence the server will reject it, which is the expected behavior.

To break this down and solve the issue it would be good to know what client is breaking the calendar data. Any chance to correlate the error message in the log with an access log entry that contains a user agent?

@medebb
Copy link

medebb commented Jan 6, 2019

I have the same error here, user agent in nextcloud.log is: "userAgent":"iOS/12.1.1 (16C50) dataaccessd/1.0"
I am on nextcloud 13.0.8.

@karloluiten
Copy link

karloluiten commented Jan 16, 2019

I have the same. My wife (iphone user) has a problem with the calendar. Events put in the cal by her do not end up on the shared calendar.

She uses an iphone, version is below. Nextcloud is 15.0.2.

Formatted error:

{
  "reqId": "XD9ZqwKc4jDdf98l0uoBVwAAAAg",
  "level": 4,
  "time": "2019-01-16T16:19:55+00:00",
  "remoteAddr": "10.0.60.16",
  "user": "eve",
  "app": "webdav",
  "method": "PUT",
  "url": "\\/remote.php\\/dav\\/calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
  "message": {
    "Exception": "Sabre\\VObject\\Recur\\NoInstancesException",
    "Message": "This recurrence rule does not generate any valid instances",
    "Code": 0,
    "Trace": [
      {
        "file": "\\/var\\/www\\/html\\/apps\\/dav\\/lib\\/CalDAV\\/CalDavBackend.php",
        "line": 2250,
        "function": "__construct",
        "class": "Sabre\\VObject\\Recur\\EventIterator",
        "type": "->",
        "args": [
          {
            "name": "VCALENDAR",
            "parent": null,
            "__class__": "Sabre\\VObject\\Component\\VCalendar"
          },
          "JTQ315GJIG8WWW430PTHC"
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/apps\\/dav\\/lib\\/CalDAV\\/CalDavBackend.php",
        "line": 1128,
        "function": "getDenormalizedData",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->",
        "args": [
          "BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-\\/\\/Apple Inc.\\/\\/iOS 12.1.2\\/\\/EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe\\/Amsterdam
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20180902T205540Z
DTEND;TZID=Europe\\/Amsterdam:20190121T180000
DTSTAMP:20190116T161955Z
DTSTART;TZID=Europe\\/Amsterdam:20190121T080000
EXDATE;TZID=Europe\\/Amsterdam:20190121T080000
LAST-MODIFIED:20190103T163329Z
RRULE:FREQ=DAILY;COUNT=1
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:VRIJ - HOLIDAY 
TRANSP:OPAQUE
UID:JTQ315GJIG8WWW430PTHC
URL;VALUE=URI:
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
END:VALARM
END:VEVENT
END:VCALENDAR
"
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/dav\\/lib\\/CalDAV\\/CalendarObject.php",
        "line": 106,
        "function": "updateCalendarObject",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->",
        "args": [
          "2",
          "Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
          "BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-\\/\\/Apple Inc.\\/\\/iOS 12.1.2\\/\\/EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe\\/Amsterdam
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20180902T205540Z
DTEND;TZID=Europe\\/Amsterdam:20190121T180000
DTSTAMP:20190116T161955Z
DTSTART;TZID=Europe\\/Amsterdam:20190121T080000
EXDATE;TZID=Europe\\/Amsterdam:20190121T080000
LAST-MODIFIED:20190103T163329Z
RRULE:FREQ=DAILY;COUNT=1
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:VRIJ - HOLIDAY 
TRANSP:OPAQUE
UID:JTQ315GJIG8WWW430PTHC
URL;VALUE=URI:
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
END:VALARM
END:VEVENT
END:VCALENDAR
"
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php",
        "line": 1130,
        "function": "put",
        "class": "Sabre\\CalDAV\\CalendarObject",
        "type": "->",
        "args": [
          "BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-\\/\\/Apple Inc.\\/\\/iOS 12.1.2\\/\\/EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe\\/Amsterdam
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20180902T205540Z
DTEND;TZID=Europe\\/Amsterdam:20190121T180000
DTSTAMP:20190116T161955Z
DTSTART;TZID=Europe\\/Amsterdam:20190121T080000
EXDATE;TZID=Europe\\/Amsterdam:20190121T080000
LAST-MODIFIED:20190103T163329Z
RRULE:FREQ=DAILY;COUNT=1
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:VRIJ - HOLIDAY 
TRANSP:OPAQUE
UID:JTQ315GJIG8WWW430PTHC
URL;VALUE=URI:
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
END:VALARM
END:VEVENT
END:VCALENDAR
"
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/CorePlugin.php",
        "line": 513,
        "function": "updateFile",
        "class": "Sabre\\DAV\\Server",
        "type": "->",
        "args": [
          "calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
          "BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-\\/\\/Apple Inc.\\/\\/iOS 12.1.2\\/\\/EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe\\/Amsterdam
BEGIN:DAYLIGHT
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20180902T205540Z
DTEND;TZID=Europe\\/Amsterdam:20190121T180000
DTSTAMP:20190116T161955Z
DTSTART;TZID=Europe\\/Amsterdam:20190121T080000
EXDATE;TZID=Europe\\/Amsterdam:20190121T080000
LAST-MODIFIED:20190103T163329Z
RRULE:FREQ=DAILY;COUNT=1
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:VRIJ - HOLIDAY 
TRANSP:OPAQUE
UID:JTQ315GJIG8WWW430PTHC
URL;VALUE=URI:
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
END:VALARM
END:VEVENT
END:VCALENDAR
",
          null
        ]
      },
      {
        "function": "httpPut",
        "class": "Sabre\\DAV\\CorePlugin",
        "type": "->",
        "args": [
          {
            "absoluteUrl": "http:\\/\\/10.0.40.3\\/remote.php\\/dav\\/calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
            "__class__": "Sabre\\HTTP\\Request"
          },
          {
            "__class__": "Sabre\\HTTP\\Response"
          }
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/event\\/lib\\/EventEmitterTrait.php",
        "line": 105,
        "function": "call_user_func_array",
        "args": [
          [
            {
              "__class__": "Sabre\\DAV\\CorePlugin"
            },
            "httpPut"
          ],
          [
            {
              "absoluteUrl": "http:\\/\\/10.0.40.3\\/remote.php\\/dav\\/calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
              "__class__": "Sabre\\HTTP\\Request"
            },
            {
              "__class__": "Sabre\\HTTP\\Response"
            }
          ]
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php",
        "line": 479,
        "function": "emit",
        "class": "Sabre\\Event\\EventEmitter",
        "type": "->",
        "args": [
          "method:PUT",
          [
            {
              "absoluteUrl": "http:\\/\\/10.0.40.3\\/remote.php\\/dav\\/calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
              "__class__": "Sabre\\HTTP\\Request"
            },
            {
              "__class__": "Sabre\\HTTP\\Response"
            }
          ]
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/dav\\/lib\\/DAV\\/Server.php",
        "line": 254,
        "function": "invokeMethod",
        "class": "Sabre\\DAV\\Server",
        "type": "->",
        "args": [
          {
            "absoluteUrl": "http:\\/\\/10.0.40.3\\/remote.php\\/dav\\/calendars\\/eve\\/together_shared_by_admin\\/Nextcloud-8SP6MJJ3AOGRAN2FFMD7P.ics",
            "__class__": "Sabre\\HTTP\\Request"
          },
          {
            "__class__": "Sabre\\HTTP\\Response"
          }
        ]
      },
      {
        "file": "\\/var\\/www\\/html\\/apps\\/dav\\/lib\\/Server.php",
        "line": 301,
        "function": "exec",
        "class": "Sabre\\DAV\\Server",
        "type": "->",
        "args": []
      },
      {
        "file": "\\/var\\/www\\/html\\/apps\\/dav\\/appinfo\\/v2\\/remote.php",
        "line": 35,
        "function": "exec",
        "class": "OCA\\DAV\\Server",
        "type": "->",
        "args": []
      },
      {
        "file": "\\/var\\/www\\/html\\/remote.php",
        "line": 163,
        "args": [
          "\\/var\\/www\\/html\\/apps\\/dav\\/appinfo\\/v2\\/remote.php"
        ],
        "function": "require_once"
      }
    ],
    "File": "\\/var\\/www\\/html\\/3rdparty\\/sabre\\/vobject\\/lib\\/Recur\\/EventIterator.php",
    "Line": 203,
    "CustomMessage": "--"
  },
  "userAgent": "iOS\\/12.1.2 (16C101) dataaccessd\\/1.0",
  "version": "15.0.2.0"
}

@skjnldsv skjnldsv added the 0. Needs triage Pending check for reproducibility or if it fits our roadmap label Jun 12, 2019
@georgehrke
Copy link
Member

georgehrke commented Jul 15, 2019

@karloluiten That is expected in that case. The calendar-data is not valid.

See this part:

DTSTART;TZID=Europe\\/Amsterdam:20190121T080000
EXDATE;TZID=Europe\\/Amsterdam:20190121T080000
LAST-MODIFIED:20190103T163329Z
RRULE:FREQ=DAILY;COUNT=1

The event is supposed to repeat daily, but only once. (meaning only 21st of January 2019)
And for that day, there is an exception (EXDATE), leaving us with 0 occurrences.

Hence the Sabre\VObject\Recur\NoInstancesException is expected and the server rejecting the event is expected behaviour.

@georgehrke
Copy link
Member

I'm closing this ticket, because it's the expected behaviour.
Whenever a client is sending events with an empty recurrence-set (like above), it rejects it.

Please report issues like this to the developer of the client software producing such calendar entries.

@steff517
Copy link

steff517 commented Oct 23, 2020

I ran into the same issue and solved it for me. Here's how:

The error message in the nextcloud.log contains the URI like:

"url":"/123/nextcloud/remote.php/dav/calendars/peter/family/6796a046-z995-4be2-zzba-0fece4fba4c0.ics",
The last part is the ID of the problematifc appointment.
I exported the entire calendar from the nextcloud web-UI as ICS file, opened it up in the text editor and searched for that ID. I could find the name and time of the appointment in that section. Next, I searched that event on my mobile phone and deleted it. Synced again, works!

@sushidave
Copy link
Author

@steff517 Thanks for sharing your solution 🙏

@rubo77
Copy link
Contributor

rubo77 commented Aug 9, 2021

Thx @steff517 THis worked. I found the non-working entry and deleted it on my android ( I use sCalendar ):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:DAVx5/3.3.9-ose ical4j/3.0.21 (org.withouthat.acalendar)
BEGIN:VEVENT
DTSTAMP:20210621T054457Z
UID:bc71eddf-96db-471d-9bf1-2b4493f7400a
SUMMARY:Klavierunterricht
DTSTART;TZID=Europe/Berlin:20210810T134500
DTEND;TZID=Europe/Berlin:20210810T141500
RRULE:FREQ=WEEKLY;BYDAY=TU
STATUS:CONFIRMED
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Klavierunterricht
END:VALARM
END:VEVENT
BEGIN:VTIMEZONE
TZID:Europe/Berlin
LAST-MODIFIED:20201010T011803Z
BEGIN:DAYLIGHT
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

This happened on the latest stable NC 21 with the latest DAVx5

This is reproducible!

I created the bug by editing a weekly repeating entry to a fortnight repeating entry:

Steps to reproduce:

  1. create a weekly repeating entry
  2. delete the 2nd entry
  3. edit the 3rd entry and all followings to repeat only every fortnight

It seems the calendar entry above is somhow broken (how exactly?)

Anyway: one broken calendar entry should not stop the hole syncronization process!

(I guess this should also be reported to the aCalendar app then)

@rubo77 rubo77 reopened this Aug 9, 2021
@rubo77
Copy link
Contributor

rubo77 commented Aug 10, 2021

It seems like there is a problem to syncronize the change I made on the android device. the errorenous entry still has

RRULE:FREQ=WEEKLY;BYDAY=TU

although it should have

RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=TU

@tcitworld tcitworld changed the title CalDAV fatal error: Sabre\VObject\Recur\NoInstancesException: This recurrence rule does not generate any valid instances Prevent Sabre\VObject\Recur\NoInstancesException: This recurrence rule does not generate any valid instances from being fatal to CalDAV sync Aug 17, 2021
@tcitworld tcitworld added 1. to develop Accepted and waiting to be taken care of and removed 0. Needs triage Pending check for reproducibility or if it fits our roadmap labels Aug 17, 2021
@brlnr23
Copy link

brlnr23 commented Aug 19, 2021

I am facing the same issue for a long time, but now I was finally able to grasp the relevant information and comment here ;)

The following event is causing the above mentioned exception, and I have now clue what is wrong with it. This event has been created using an Android device with aCalendar (latest version). It is a recurring event which takes place every last Friday of each month.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//dmfs.org//mimedir.icalendar//EN
BEGIN:VEVENT
DTSTART;VALUE=DATE:20211231
SUMMARY:***BLACKENED***
RRULE:FREQ=MONTHLY;BYDAY=-1FR;UNTIL=20211231T235959Z
EXDATE;VALUE=DATE:20211231
TRANSP:OPAQUE
STATUS:CONFIRMED
DURATION:P1D
LAST-MODIFIED:20210819T025123Z
DTSTAMP:20210819T025123Z
CREATED:20210819T025123Z
UID:0876a26c-8455-457a-bd78-88b5ad9cf7bc.1629341483536
END:VEVENT
END:VCALENDAR

@Ezwen
Copy link

Ezwen commented Mar 7, 2022

@rubo77 Thanks for your message. Unfortunately, Nextcloud would not allow me to delete these entries (infinite spinner after lots and lots of attempts). I ended up having to delete the calendar containing these faulty events, and recreate a new calendar…

@rubo77
Copy link
Contributor

rubo77 commented Mar 7, 2022

Sure, you would have to delete the entry on the console with the direct SQL commands

@paradeiser
Copy link

My logs are full of entries like the one Mikhail5555 mentioned.
no user
no url

Also my binlog files are exploding - could this be the root cause?

How could I trace down the calendar or event causing this problem?


{
	"reqId":"eFDG8IyNBwryGEO4MsWj",
	"level":3,"time":"2022-04-20T08:21:22+00:00",
	"remoteAddr":"",
	"user":"--",
	"app":"dav",
	"method":"",
	"url":"--",
	"message":"This recurrence rule does not generate any valid instances",
	"userAgent":"--",
	"version":"23.0.3.2",
	"exception":{
		"Exception":"Sabre\\VObject\\Recur\\NoInstancesException",
		"Message":"This recurrence rule does not generate any valid instances",
		"Code":0,"Trace":[
			{"file":"/var/www/html/apps/dav/lib/CalDAV/CalDavBackend.php",
			"line":2797,"function":"__construct",
			"class":"Sabre\\VObject\\Recur\\EventIterator",
			"type":"->"},{"file":"/var/www/html/apps/dav/lib/CalDAV/CalDavBackend.php",
			"line":1260,"function":"getDenormalizedData",
			"class":"OCA\\DAV\\CalDAV\\CalDavBackend",
			"type":"->"},{"file":"/var/www/html/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php",
			"line":144,"function":"createCalendarObject",
			"class":"OCA\\DAV\\CalDAV\\CalDavBackend",
			"type":"->"},{"file":"/var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
			"line":115,"function":"refreshSubscription",
			"class":"OCA\\DAV\\CalDAV\\WebcalCaching\\RefreshWebcalService",
			"type":"->"},{"file":"/var/www/html/lib/public/BackgroundJob/Job.php",
			"line":79,"function":"run",
			"class":"OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
			"type":"->"},{"file":"/var/www/html/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
			"line":108,"function":"execute",
			"class":"OCP\\BackgroundJob\\Job",
			"type":"->"},{"file":"/var/www/html/cron.php",
			"line":150,"function":"execute",
			"class":"OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
			"type":"->"}
		],
		"File":"/var/www/html/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
		"Line":192,"CustomMessage":"--"
	}
}

I'm thankful for any hints / tips!
paradeiser

@szaimen szaimen added needs info 0. Needs triage Pending check for reproducibility or if it fits our roadmap and removed 1. to develop Accepted and waiting to be taken care of labels Nov 26, 2022
@szaimen
Copy link
Contributor

szaimen commented Nov 26, 2022

Hi, please update to at least 23.0.12 and report back if it fixes the issue. Thank you!

@mikhail5555
Copy link

{
   "reqId":"FSBZZ3Lz478VgDx3Yw0W",
   "level":3,
   "time":"2022-11-26T20:31:56+00:00",
   "remoteAddr":"",
   "user":"--",
   "app":"dav",
   "method":"",
   "url":"--",
   "message":"This recurrence rule does not generate any valid instances",
   "userAgent":"--",
   "version":"24.0.7.1",
   "exception":{
      "Exception":"Sabre\\VObject\\Recur\\NoInstancesException",
      "Message":"This recurrence rule does not generate any valid instances",
      "Code":0,
      "Trace":[
         {
            "file":"/config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
            "line":2840,
            "function":"__construct",
            "class":"Sabre\\VObject\\Recur\\EventIterator",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
            "line":1259,
            "function":"getDenormalizedData",
            "class":"OCA\\DAV\\CalDAV\\CalDavBackend",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php",
            "line":144,
            "function":"createCalendarObject",
            "class":"OCA\\DAV\\CalDAV\\CalDavBackend",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
            "line":115,
            "function":"refreshSubscription",
            "class":"OCA\\DAV\\CalDAV\\WebcalCaching\\RefreshWebcalService",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/lib/public/BackgroundJob/Job.php",
            "line":79,
            "function":"run",
            "class":"OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
            "line":108,
            "function":"execute",
            "class":"OCP\\BackgroundJob\\Job",
            "type":"->"
         },
         {
            "file":"/config/www/nextcloud/cron.php",
            "line":151,
            "function":"execute",
            "class":"OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
            "type":"->"
         }
      ],
      "File":"/config/www/nextcloud/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
      "Line":192,
      "CustomMessage":"--"
   },
   "id":"638277d3d57f5"
}

@szaimen i just updated to 24.0.7.1 (Hope that also includes any additional logging). The error still occurs

Might be worth adding i use DAVx5 on my phone (not sure if related to this issue, but just throwing it out there)

@szaimen

This comment was marked as resolved.

@sushidave
Copy link
Author

@szaimen
In my case, those fatal errors no longer appeared after the calender event was deleted. Thunderbird is still used to access and edit the calendar but no more app from Apple. The error doesn't appear in the log of the installed Nextcloud version 25.0.5. However, I wonder what others who run into that issue are going to report.
In any case, thank you for your efforts!

@mikhail5555
Copy link

@szaimen
After updating to 25.0.07 i still receive the exact same error:

[dav] Error: Sabre\VObject\Recur\NoInstancesException: This recurrence rule does not generate any valid instances at <<closure>>

0. /config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php line 2765
   Sabre\VObject\Recur\EventIterator->__construct()
1. /config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php line 1220
   OCA\DAV\CalDAV\CalDavBackend->getDenormalizedData()
2. /config/www/nextcloud/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php line 132
   OCA\DAV\CalDAV\CalDavBackend->createCalendarObject()
3. /config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 115
   OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService->refreshSubscription()
4. /config/www/nextcloud/lib/public/BackgroundJob/Job.php line 78
   OCA\DAV\BackgroundJob\RefreshWebcalJob->run()
5. /config/www/nextcloud/lib/public/BackgroundJob/Job.php line 64
   OCP\BackgroundJob\Job->start()
6. /config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php line 108
   OCP\BackgroundJob\Job->execute()
7. /config/www/nextcloud/cron.php line 152
   OCA\DAV\BackgroundJob\RefreshWebcalJob->execute()

at 2023-05-29T04:39:54+00:00

However, i do see that it now also contains a 'source' in the json format:

{
    "reqId": "4zGsFttOKEdfGqv2FzNy",
    "level": 3,
    "time": "2023-05-29T04:39:54+00:00",
    "remoteAddr": "",
    "user": "--",
    "app": "dav",
    "method": "",
    "url": "--",
    "message": "Unable to create calendar object from subscription 11",
    "userAgent": "--",
    "version": "25.0.7.1",
    "exception": {
        "Exception": "Sabre\\VObject\\Recur\\NoInstancesException",
        "Message": "This recurrence rule does not generate any valid instances",
        "Code": 0,
        "Trace": [
            {
                "file": "/config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
                "line": 2765,
                "function": "__construct",
                "class": "Sabre\\VObject\\Recur\\EventIterator",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
                "line": 1220,
                "function": "getDenormalizedData",
                "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php",
                "line": 132,
                "function": "createCalendarObject",
                "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
                "line": 115,
                "function": "refreshSubscription",
                "class": "OCA\\DAV\\CalDAV\\WebcalCaching\\RefreshWebcalService",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/lib/public/BackgroundJob/Job.php",
                "line": 78,
                "function": "run",
                "class": "OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/lib/public/BackgroundJob/Job.php",
                "line": 64,
                "function": "start",
                "class": "OCP\\BackgroundJob\\Job",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
                "line": 108,
                "function": "execute",
                "class": "OCP\\BackgroundJob\\Job",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/cron.php",
                "line": 152,
                "function": "execute",
                "class": "OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
                "type": "->"
            }
        ],
        "File": "/config/www/nextcloud/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
        "Line": 192,
        "message": "Unable to create calendar object from subscription {subscriptionId}",
        "exception": [],
        "source": "https://calendar.google.com/calendar/ical/**MANUALLY REDACTED**/basic.ics",
        "CustomMessage": "Unable to create calendar object from subscription 11"
    },
    "id": "64742c9ac75b0"
}

So i will now be able to check at least what even is causing it. However since its provided by an external google calendar im not sure if I can easily remove it.
Would it help if I could provide you a raw dump of the subscription causing it?

@jgraichen
Copy link

jgraichen commented Jul 19, 2023

I have issues with the sync to Nextcloud 27.0.0 too. It breaks for some users with the same exception, keeping their devices completely out of sync:

{
  "reqId": "gvlxYqtQGHDm5DU7rXCp",
  "level": 3,
  "time": "2023-07-19T02:41:57+00:00",
  "remoteAddr": "*** sensitive parameters replaced ***",
  "user": "cb294902-1b2b-1033-93df-eddfa909fc39",
  "app": "webdav",
  "method": "PUT",
  "url": "/remote.php/dav/calendars/cb294902-1b2b-1033-93df-eddfa909fc39/todos/ba0d6cf1-ca22-4d8b-823e-93712e68b69f.ics",
  "message": {
    "Exception": "Sabre\\VObject\\Recur\\NoInstancesException",
    "Message": "This recurrence rule does not generate any valid instances",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
        "line": 2785,
        "function": "__construct",
        "class": "Sabre\\VObject\\Recur\\EventIterator",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
        "line": 1309,
        "function": "getDenormalizedData",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/3rdparty/sabre/dav/lib/CalDAV/CalendarObject.php",
        "line": 103,
        "function": "updateCalendarObject",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->",
        "args": ["*** sensitive parameters replaced ***"]
      },
      {
        "file": "/var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 1137,
        "function": "put",
        "class": "Sabre\\CalDAV\\CalendarObject",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
        "line": 492,
        "function": "updateFile",
        "class": "Sabre\\DAV\\Server",
        "type": "->",
        "args": ["*** sensitive parameters replaced ***"]
      },
      {
        "file": "/var/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
        "line": 89,
        "function": "httpPut",
        "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": 364,
        "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/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
    "Line": 192,
    "message": "This recurrence rule does not generate any valid instances",
    "exception": {},
    "CustomMessage": "This recurrence rule does not generate any valid instances"
  },
  "userAgent": "DAVx5/4.3.5-gplay (2023/07/10; dav4jvm; okhttp/4.11.0) Android/12",
  "version": "27.0.0.8"
}

They seem to have some event or to-do in their local calendar that Nextcloud does not accept and always aborts the sync. I haven't been able to identify that event yet.

Is there any way to get more details about what event wasn't accepted so that the user can delete it from their local calendar?

@FrederikP
Copy link

Same here on nextcloud 27.0.2

It happens when I sync a google calendar to nextcloud using vdirsyncer. https://github.com/pimutils/vdirsyncer/
It has worked for the same events in the past.

{
    "reqId":"Y5Oz3F0WVIhQmmWCvKKu",
    "level":3,
    "time":"2023-09-18T14:04:09+00:00",
    "remoteAddr":"172.19.0.1",
    "user":"user",
    "app":"webdav",
    "method":"PUT",
    "url":"/remote.php/dav/calendars/user/calendar/9d8b91a2-6dd9-4305-bc0c-85cdbfb67b5b.ics",
    "message":"This recurrence rule does not generate any valid instances",
    "userAgent":"vdirsyncer/0.19.2",
    "version":"27.0.2.1",
    "exception":{
        "Exception":"Sabre\\VObject\\Recur\\NoInstancesException",
        "Message":"This recurrence rule does not generate any valid instances",
        "Code":0,
        "Trace":[
            {
                "file":"/var/www/html/apps/dav/lib/CalDAV/CalDavBackend.php",
                "line":2785,
                "function":"__construct",
                "class":"Sabre\\VObject\\Recur\\EventIterator",
                "type":"->",
                "args":[
                    [
                        [
                            "Sabre\\VObject\\Component\\VEvent",
                            [
                                "Sabre\\VObject\\Component\\VCalendar",
                                "*** sensitive parameters replaced ***",
                                "VCALENDAR"
                            ],
                            "VEVENT"
                        ]
                    ]
                ]
            },
            {
                "file":"/var/www/html/apps/dav/lib/CalDAV/CalDavBackend.php",
                "line":1215,
                "function":"getDenormalizedData",
                "class":"OCA\\DAV\\CalDAV\\CalDavBackend",
                "type":"->",
                "args":[
                    "*** sensitive parameters replaced ***"
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/CalDAV/Calendar.php",
                "line":199,
                "function":"createCalendarObject",
                "class":"OCA\\DAV\\CalDAV\\CalDavBackend",
                "type":"->",
                "args":[
                    "*** sensitive parameters replaced ***"
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
                "line":1098,
                "function":"createFile",
                "class":"Sabre\\CalDAV\\Calendar",
                "type":"->",
                "args":[
                    "*** sensitive parameters replaced ***"
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
                "line":504,
                "function":"createFile",
                "class":"Sabre\\DAV\\Server",
                "type":"->",
                "args":[
                    "*** sensitive parameters replaced ***"
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
                "line":89,
                "function":"httpPut",
                "class":"Sabre\\DAV\\CorePlugin",
                "type":"->",
                "args":[
                    [
                        "Sabre\\HTTP\\Request"
                    ],
                    [
                        "Sabre\\HTTP\\Response"
                    ]
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
                "line":472,
                "function":"emit",
                "class":"Sabre\\DAV\\Server",
                "type":"->",
                "args":[
                    "method:PUT",
                    [
                        [
                            "Sabre\\HTTP\\Request"
                        ],
                        [
                            "Sabre\\HTTP\\Response"
                        ]
                    ]
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
                "line":253,
                "function":"invokeMethod",
                "class":"Sabre\\DAV\\Server",
                "type":"->",
                "args":[
                    [
                        "Sabre\\HTTP\\Request"
                    ],
                    [
                        "Sabre\\HTTP\\Response"
                    ]
                ]
            },
            {
                "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
                "line":321,
                "function":"start",
                "class":"Sabre\\DAV\\Server",
                "type":"->",
                "args":[
                    
                ]
            },
            {
                "file":"/var/www/html/apps/dav/lib/Server.php",
                "line":364,
                "function":"exec",
                "class":"Sabre\\DAV\\Server",
                "type":"->",
                "args":[
                    
                ]
            },
            {
                "file":"/var/www/html/apps/dav/appinfo/v2/remote.php",
                "line":35,
                "function":"exec",
                "class":"OCA\\DAV\\Server",
                "type":"->",
                "args":[
                    
                ]
            },
            {
                "file":"/var/www/html/remote.php",
                "line":172,
                "args":[
                    "/var/www/html/apps/dav/appinfo/v2/remote.php"
                ],
                "function":"require_once"
            }
        ],
        "File":"/var/www/html/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
        "Line":192,
        "message":"This recurrence rule does not generate any valid instances",
        "exception":[
            
        ],
        "CustomMessage":"This recurrence rule does not generate any valid instances"
    },
    "id":"650859eaddc17"
}

@osos
Copy link

osos commented Dec 14, 2023

How can we resolve the issue?

Is there a method to fix it for the specific user(s) having the issue?

Big issue here as my wife is having this is issue resulting in our shared calendar not aligning... I am sure you can imagine this gives me real trouble trying to argue that the appointment was not in my calendar whereas it remains on her iPhone !

@osos
Copy link

osos commented Dec 25, 2023

Here is a fresh logentry with a trace:

{
  "reqId": "***",
  "level": 3,
  "time": "2023-12-24T06:20:02+00:00",
  "remoteAddr": "0.0.0.0",
  "user": "***",
  "app": "webdav",
  "method": "PUT",
  "url": "/remote.php/dav/calendars/***/defaultcalendar/****.ics",
  "message": "This recurrence rule does not generate any valid instances",
  "userAgent": "iOS/17.2 (21C62) dataaccessd/1.0",
  "version": "27.1.5.1",
  "exception": {
    "Exception": "Sabre\\VObject\\Recur\\NoInstancesException",
    "Message": "This recurrence rule does not generate any valid instances",
    "Code": 0,
    "Trace": [
      {
        "file": "/path/apps/dav/lib/CalDAV/CalDavBackend.php",
        "line": 2824,
        "function": "__construct",
        "class": "Sabre\\VObject\\Recur\\EventIterator",
        "type": "->"
      },
      {
        "file": "/path/apps/dav/lib/CalDAV/CalDavBackend.php",
        "line": 1324,
        "function": "getDenormalizedData",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->"
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/CalDAV/CalendarObject.php",
        "line": 103,
        "function": "updateCalendarObject",
        "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 1137,
        "function": "put",
        "class": "Sabre\\CalDAV\\CalendarObject",
        "type": "->"
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
        "line": 492,
        "function": "updateFile",
        "class": "Sabre\\DAV\\Server",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/path/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
        "line": 89,
        "function": "httpPut",
        "class": "Sabre\\DAV\\CorePlugin",
        "type": "->"
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 472,
        "function": "emit",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 253,
        "function": "invokeMethod",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/path/3rdparty/sabre/dav/lib/DAV/Server.php",
        "line": 321,
        "function": "start",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/path/apps/dav/lib/Server.php",
        "line": 365,
        "function": "exec",
        "class": "Sabre\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/path/apps/dav/appinfo/v2/remote.php",
        "line": 35,
        "function": "exec",
        "class": "OCA\\DAV\\Server",
        "type": "->"
      },
      {
        "file": "/path/remote.php",
        "line": 172,
        "args": [
          "/path/apps/dav/appinfo/v2/remote.php"
        ],
        "function": "require_once"
      }
    ],
    "File": "/path/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
    "Line": 192,
    "message": "This recurrence rule does not generate any valid instances",
    "exception": {},
    "CustomMessage": "This recurrence rule does not generate any valid instances"
  }
}

Wondering if this could not be solved with some try-catch handling?

@osos
Copy link

osos commented Dec 25, 2023

I preliminary handled the exception by adding a try catch around the failing new EventIterator:

if ($hasDTSTART) {

if ($hasDTSTART) {
                       $component = $vEvents[0];

                       // Finding the last occurrence is a bit harder
                       if (!isset($component->RRULE) && count($vEvents) === 1) {
                               $firstOccurrence = $component->DTSTART->getDateTime()->getTimeStamp();
                               if (isset($component->DTEND)) {
                                       $lastOccurrence = $component->DTEND->getDateTime()->getTimeStamp();
                               } elseif (isset($component->DURATION)) {
                                       $endDate = clone $component->DTSTART->getDateTime();
                                       $endDate->add(DateTimeParser::parse($component->DURATION->getValue()));
                                       $lastOccurrence = $endDate->getTimeStamp();
                               } elseif (!$component->DTSTART->hasTime()) {
                                       $endDate = clone $component->DTSTART->getDateTime();
                                       $endDate->modify('+1 day');
                                       $lastOccurrence = $endDate->getTimeStamp();
                               } else {
                                       $lastOccurrence = $firstOccurrence;
                               }
                       } else {
                               try {
                                       $it = new EventIterator($vEvents);
                                       $maxDate = new DateTime(self::MAX_DATE);
                                       $firstOccurrence = $it->getDtStart()->getTimestamp();
                                       if ($it->isInfinite()) {
                                               $lastOccurrence = $maxDate->getTimestamp();
                                       } else {
                                               $end = $it->getDtEnd();
                                               while ($it->valid() && $end < $maxDate) {
                                                       $end = $it->getDtEnd();
                                                       $it->next();
                                               }
                                               $lastOccurrence = $end->getTimestamp();
                                       }
                               }
                               catch (Sabre\VObject\Recur\NoInstancesException $ex) {
                                       $maxDate = new DateTime(self::MAX_DATE);
                                       $lastOccurrence = $maxDate->getTimestamp();
                               }
                       }
               }

Hope someone with insight into the nextcloud code will fix it proper.

@SebastianKrupinski
Copy link
Contributor

SebastianKrupinski commented Jul 18, 2024

This should now be resolved by the PR linked above.

@sushidave
Copy link
Author

@SebastianKrupinski Thanks for resolving.

@SebastianKrupinski
Copy link
Contributor

@sushidave you're welcome

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
0. Needs triage Pending check for reproducibility or if it fits our roadmap 25-feedback bug feature: caldav Related to CalDAV internals feature: dav low
Projects
None yet
Development

No branches or pull requests