nextcloud / server

☁️ Nextcloud server, a safe home for all your data
https://nextcloud.com
GNU Affero General Public License v3.0
26.49k stars 3.98k forks source link

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

Closed sushidave closed 1 month ago

sushidave commented 7 years ago

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 #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 commented 7 years ago

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 commented 7 years ago

@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 commented 7 years ago

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 commented 6 years ago

cc @georgehrke @rullzer

jypma commented 5 years ago

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.

sushidave commented 5 years ago

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

georgehrke commented 5 years ago

@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 commented 5 years ago

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 commented 5 years ago

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"
}
georgehrke commented 5 years ago

@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 commented 5 years ago

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 commented 3 years ago

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 commented 3 years ago

@steff517 Thanks for sharing your solution 🙏

rubo77 commented 3 years ago

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 commented 3 years ago

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
brlnr23 commented 3 years ago

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
floriangosse commented 2 years ago

I've the problem with events coming from an external calendar source. In my case it's a Google calendar that seems to cause the error.

mikhail5555 commented 2 years ago

I still have this log poping up all the time, however the url is empty, so it's impossisble to find the responsible calendar event id.

Log:

{
    "reqId": "V3kAH4N6hKpwPCxB76sw",
    "level": 3,
    "time": "2021-12-08T14:47:00+00:00",
    "remoteAddr": "",
    "user": "--",
    "app": "dav",
    "method": "",
    "url": "--",
    "message":
    {
        "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": 2461,
                "function": "__construct",
                "class": "Sabre\\VObject\\Recur\\EventIterator",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/CalDAV/CalDavBackend.php",
                "line": 1107,
                "function": "getDenormalizedData",
                "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/CalDAV/WebcalCaching/RefreshWebcalService.php",
                "line": 145,
                "function": "createCalendarObject",
                "class": "OCA\\DAV\\CalDAV\\CalDavBackend",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
                "line": 116,
                "function": "refreshSubscription",
                "class": "OCA\\DAV\\CalDAV\\WebcalCaching\\RefreshWebcalService",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/lib/public/BackgroundJob/Job.php",
                "line": 80,
                "function": "run",
                "class": "OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php",
                "line": 109,
                "function": "execute",
                "class": "OCP\\BackgroundJob\\Job",
                "type": "->"
            },
            {
                "file": "/config/www/nextcloud/cron.php",
                "line": 128,
                "function": "execute",
                "class": "OCA\\DAV\\BackgroundJob\\RefreshWebcalJob",
                "type": "->"
            }
        ],
        "File": "/config/www/nextcloud/3rdparty/sabre/vobject/lib/Recur/EventIterator.php",
        "Line": 192,
        "CustomMessage": "--"
    },
    "userAgent": "--",
    "version": "21.0.7.0",
    "id": "61b0e199c4a01"
}
Ezwen commented 2 years ago

I also now have such FATAL errors everywhere in my logs. Some recurring events that I have cannot be deleted nor edited, neither from the Nextcloud calendar web UI nor from any other Caldav client. I am really lost, I don't know how to solve this, and I have no idea how I triggered this problem in the first place.

rubo77 commented 2 years ago

@Ezwen , as workaround just delete the corresponding recurring calender entry, (e.g. with a two-weekly period)

Ezwen commented 2 years ago

@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 commented 2 years ago

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

paradeiser commented 2 years ago

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 commented 1 year ago

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

mikhail5555 commented 1 year ago
{
   "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 commented 1 year ago

Hi, please update to 25.0.7 or better 26.0.2 and report back if it fixes the issue. Thank you!

My goal is to add a label like e.g. 26-feedback to this ticket of an up-to-date major Nextcloud version where the bug could be reproduced. However this is not going to work without your help. So thanks for all your effort!

If you don't manage to reproduce the issue in time and the issue gets closed but you can reproduce the issue afterwards, feel free to create a new bug report with up-to-date information by following this link: https://github.com/nextcloud/server/issues/new?assignees=&labels=bug%2C0.+Needs+triage&template=BUG_REPORT.yml&title=%5BBug%5D%3A+

sushidave commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

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 commented 11 months ago

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 commented 8 months ago

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 commented 8 months ago

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 commented 8 months ago

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

https://github.com/nextcloud/server/blob/9b6551d4c8b62d10ad72c59d8cd9e69234cd76f0/apps/dav/lib/CalDAV/CalDavBackend.php#L2804

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 commented 1 month ago

This should now be resolved by the PR linked above.

sushidave commented 1 month ago

@SebastianKrupinski Thanks for resolving.

SebastianKrupinski commented 1 month ago

@sushidave you're welcome