VEVENTs in recurring events have different UIDs



  • Hi,

    I was unable to find a report about this.

    Calendar syncing fails with a Every VEVENT in this object must have identical UIDs 400 Bad Request error.

    This is the full log:

    I/davdroid.DavSyncAdapter(12053): Performing sync for authority com.android.calendar
    D/davdroid.DavSyncAdapter(12053): Creating new DavHttpClient
    I/davdroid.DavHttpClient(12053): Wire logging active, disabling HTTP compression
    D/davdroid.DavSyncAdapter(12053): Server supports VCard version 4.0
    V/davdroid.URIUtils(12053): Normalized URL https://dav.fruux.com/calendars/a3298258249/d48283a1-1187-4f2e-9892-1d4e8d893ad9/ -> https://dav.fruux.com/calendars/a3298258249/d48283a1-1187-4f2e-9892-1d4e8d893ad9/
    D/davdroid.WebDavResource(12053): Using preemptive authentication (not compatible with Digest auth)
    I/davdroid.SyncManager(12053): Remotely removing 0 deleted resource(s) (if not changed)
    I/davdroid.SyncManager(12053): Uploading 0 new resource(s) (if not existing)
    D/davdroid.LocalCalendar(12053): 2 event(s) marked as dirty because of dirty/deleted exceptions
    I/davdroid.SyncManager(12053): Uploading 2 modified resource(s) (if not changed)
    V/davdroid.URIUtils(12053): Normalized URL 20150310T175647Z-360_d79caf70cb162dcb.ics -> 20150310T175647Z-360_d79caf70cb162dcb.ics
    D/HttpClient(12053): Re-using cached 'basic' auth scheme for https://dav.fruux.com:443
    D/HttpClient(12053): Connection request: [route: HttpRoute[{s}->https://dav.fruux.com:443]][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 3]
    D/HttpClient(12053): Connection leased: [id: 1][route: HttpRoute[{s}->https://dav.fruux.com:443]][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 3]
    D/HttpClient(12053): Opening connection HttpRoute[{s}->https://dav.fruux.com:443]
    D/HttpClient(12053): Connecting to dav.fruux.com/52.28.30.211:443
    D/HttpClient(12053): Connecting socket to dav.fruux.com/52.28.30.211:443 with timeout 20000
    D/HttpClient(12053): Enabled protocols: [TLSv1, TLSv1.1, TLSv1.2]
    D/HttpClient(12053): Enabled cipher suites:[TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA]
    D/HttpClient(12053): Enabling SNI for dav.fruux.com
    D/HttpClient(12053): Starting handshake
    D/HttpClient(12053): Secure session established
    D/HttpClient(12053):  negotiated protocol: TLSv1.2
    D/HttpClient(12053):  negotiated cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
    D/HttpClient(12053):  peer principal: CN=*.fruux.com, OU=Domain Control Validated - RapidSSL(R), OU=See www.rapidssl.com/resources/cps (c)13, OU=GT76240421
    D/HttpClient(12053):  peer alternative names: [*.fruux.com, fruux.com]
    D/HttpClient(12053):  issuer principal: CN=RapidSSL SHA256 CA - G3, O=GeoTrust Inc., C=US
    D/HttpClient(12053): Connection established 192.168.178.52:54865<->52.28.30.211:443
    D/HttpClient(12053): Executing request PUT /calendars/a3298258249/d48283a1-1187-4f2e-9892-1d4e8d893ad9/20150310T175647Z-360_d79caf70cb162dcb.ics HTTP/1.1
    D/HttpClient(12053): Target auth state: CHALLENGED
    D/HttpClient(12053): Proxy auth state: UNCHALLENGED
    D/Wire    (12053): http-outgoing-1 >> "PUT /calendars/a3298258249/d48283a1-1187-4f2e-9892-1d4e8d893ad9/20150310T175647Z-360_d79caf70cb162dcb.ics HTTP/1.1[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "If-Match: "11165587-15032543"[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "Content-Type: text/calendar[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "Content-Length: 4156[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "Host: dav.fruux.com[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "Connection: Keep-Alive[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "User-Agent: DAVdroid/0.8.0[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "Authorization: Basic XXX[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VCALENDAR[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "VERSION:2.0[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "PRODID:-//bitfire web engineering//DAVdroid 0.8.0 (ical4j 1.0.x)//EN[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART;TZID=Europe/Berlin:20150316T183000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DURATION:PT5400S[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RRULE:FREQ=WEEKLY;WKST=MO;BYDAY=MO[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "SUMMARY:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "STATUS:CONFIRMED[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ORGANIZER:mailto:fruux[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "LAST-MODIFIED:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TRIGGER:-PT60M[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ACTION:DISPLAY[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DESCRIPTION:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150325T203136Z-29304@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RECURRENCE-ID:20150330T163000Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART;TZID=Europe/Berlin:20150330T183000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTEND;TZID=Europe/Berlin:20150330T200000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "SUMMARY:(Yoga)[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "STATUS:CONFIRMED[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ORGANIZER:mailto:fruux[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "LAST-MODIFIED:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150330T114112Z-6759@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RECURRENCE-ID:20150406T163000Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART;TZID=Europe/Berlin:20150406T183000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTEND;TZID=Europe/Berlin:20150406T200000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "SUMMARY:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "STATUS:CANCELLED[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ORGANIZER:mailto:fruux[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "LAST-MODIFIED:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TRIGGER:-PT60M[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ACTION:DISPLAY[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DESCRIPTION:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150420T220858Z-24302@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RECURRENCE-ID:20150525T163000Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART;TZID=Europe/Berlin:20150525T183000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTEND;TZID=Europe/Berlin:20150525T200000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "SUMMARY:Yoga?[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "STATUS:CANCELLED[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ORGANIZER:mailto:fruux[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "LAST-MODIFIED:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TRIGGER:-PT60M[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ACTION:DISPLAY[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DESCRIPTION:Yoga?[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RECURRENCE-ID:20150601T163000Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART;TZID=Europe/Berlin:20150601T183000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTEND;TZID=Europe/Berlin:20150601T200000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "SUMMARY:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "STATUS:CANCELLED[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ORGANIZER:mailto:fruux[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "LAST-MODIFIED:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TRIGGER:-PT60M[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "ACTION:DISPLAY[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DESCRIPTION:Yoga[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VALARM[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VTIMEZONE[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZID:Europe/Berlin[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZURL:http://tzurl.org/zoneinfo/Europe/Berlin[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "X-LIC-LOCATION:Europe/Berlin[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CEST[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19810329T020000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CET[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19961027T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+005328[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CET[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:18930401T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:18930401T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CEST[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19160501T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19160501T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19170416T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19180415T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19400401T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19430329T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19440403T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19450402T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19460414T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19470406T040000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19480418T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19490410T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19800406T020000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CET[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19161001T010000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19161001T010000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19170917T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19180916T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19421102T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19431004T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19441002T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19451118T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19461007T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19471005T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19481003T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19491002T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19800928T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19810927T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19820926T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19830925T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19840930T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19850929T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19860928T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19870927T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19880925T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19890924T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19900930T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19910929T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19920927T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19930926T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19940925T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19950924T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0300[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CEMT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19450524T020000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19450524T020000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19470511T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0300[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0200[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CEST[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19450924T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19450924T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19470629T030000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:DAYLIGHT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "BEGIN:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETFROM:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZOFFSETTO:+0100[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "TZNAME:CET[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTART:19460101T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19460101T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "RDATE:19800101T000000[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:STANDARD[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VTIMEZONE[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VCALENDAR[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "HTTP/1.1 400 Bad Request[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "Content-Type: application/xml; charset=utf-8[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "Date: Sun, 31 May 2015 16:51:43 GMT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "Server: nginx[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "X-Responding-Server: production-2[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "X-Sabre-Version: 3.0.0-beta3[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "Content-Length: 301[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "Connection: keep-alive[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "[\r][\n]"
    D/Wire    (12053): http-outgoing-1 << "<?xml version="1.0" encoding="utf-8"?>[\n]"
    D/Wire    (12053): http-outgoing-1 << "<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">[\n]"
    D/Wire    (12053): http-outgoing-1 << " <s:sabredav-version>3.0.0-beta3</s:sabredav-version>[\n]"
    D/Wire    (12053): http-outgoing-1 << " <s:exception>Sabre\DAV\Exception\BadRequest</s:exception>[\n]"
    D/Wire    (12053): http-outgoing-1 << " <s:message>Every VEVENT in this object must have identical UIDs</s:message>[\n]"
    D/Wire    (12053): http-outgoing-1 << "</d:error>[\n]"
    D/HttpClient(12053): Connection can be kept alive indefinitely
    D/HttpClient(12053): Authentication succeeded
    D/HttpClient(12053): http-outgoing-1: Shutdown connection
    D/HttpClient(12053): Connection discarded
    D/HttpClient(12053): http-outgoing-1: Close connection
    D/HttpClient(12053): Connection released: [id: 1][route: HttpRoute[{s}->https://dav.fruux.com:443]][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 3]
    E/davdroid.DavSyncAdapter(12053): Hard HTTP error 400
    E/davdroid.DavSyncAdapter(12053): at.bitfire.davdroid.webdav.HttpException: 400 Bad Request
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.webdav.WebDavResource.checkResponse(WebDavResource.java:431)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.webdav.WebDavResource.checkResponse(WebDavResource.java:405)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.webdav.WebDavResource.put(WebDavResource.java:382)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.resource.RemoteCollection.update(RemoteCollection.java:201)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.syncadapter.SyncManager.pushDirty(SyncManager.java:169)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.syncadapter.SyncManager.synchronize(SyncManager.java:50)
    E/davdroid.DavSyncAdapter(12053):     at at.bitfire.davdroid.syncadapter.DavSyncAdapter.onPerformSync(DavSyncAdapter.java:146)
    E/davdroid.DavSyncAdapter(12053):     at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)
    I/davdroid.DavSyncAdapter(12053): Sync complete for com.android.calendar
    D/davdroid.DavSyncAdapter(12053): Closing httpClient
    D/HttpClient(12053): Connection manager is shutting down
    D/HttpClient(12053): Connection manager shut down
    

    This seems to happen because a recurring calendar entry has been modified. Deleting the corresponding event helped, but the error only changed to another recurring event of which one occurence has been canceled, which I can't see to modify (already deleted so many entries because of this...)

    Davdroid version is 0.8 on android 4.4.2.
    The proprietary source com.fruux.android app syncs the calendar without a problem.

    I'd be very glad about help on this!
    Yannik


  • developer

    Does this also happen for unmodified recurring events?

    If not, could you please provide reproducible steps on how to modify the recurring events so that I can try?



  • Hi,

    by simply adding a new recurring event to a fresh calendar and then modifying one of the recurring events I couldn't reproduce it. There seems to be an additional, unknown circumstance that leads to this.

    However, the problem still persists with the other calendar. Maybe we can work from there?

    Thanks in advance



  • I have the same problem.
    I am using OwnCloud as server app.

    I have created an recurring event (weekly/until forever),
    tapped on an event next week, delete this and future events.

    This is when I started getting "Syncronization failed - 400 Bad request" errors in my notification tray,
    and other events will not be synced as well. It seems to me, as if it was trying to fetch calendar entries in the future because it still expects them to be until forever.

    screenshot_2015-06-23-12-38-30



  • @rfc2822 Any news on this?



  • I can confirm this issue. These '400: Bad request' errors started showing up after upgrading from a prior version of DAVdroid (possibly 0.7.3? I can't guarantee) to the next and has not been gone ever since.

    The server (an owncloud instance) returns the following error:

    HTTP/1.1 400 Every VEVENT in this object must have identical UIDs
    

    when the following request (shown in the apache logs) is made:

    PUT /remote.php/caldav/calendars/username/calendarname/00d2f53a-e25e-4b90-a189-ad380137bf3e.ics HTTP/1.1" 400 1322 "-" "DAVdroid/0.8.1"
    

    This was triggered by upon deleting "this and future events" from a recurring event. The changes to these recurring events are therefore not reflected on the server. All other events are not affected and still being synced successfully.

    Could it be that DAVdroid violates the caldav standard and tries to modify multiple recurring events in a single batch though this is not allowed?

    Edit:
    It looks like VEVENTS have multiple UID attributes that are different, which is not allowed. See the log of yannik above:

    D/Wire    (12053): http-outgoing-1 >> "BEGIN:VEVENT[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "DTSTAMP:20150531T165141Z[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "UID:20150325T203136Z-29304@d79caf70cb162dcb[\r][\n]"
    ...
    D/Wire    (12053): http-outgoing-1 >> "UID:20150310T175647Z-360@d79caf70cb162dcb[\r][\n]"
    D/Wire    (12053): http-outgoing-1 >> "END:VEVENT[\r][\n]"
    

    Edit 2:
    Looking through the code, I do not see where the second UID came from. But that probably doesn't mean too much, since I am also unable to find the code responsible for adding multiple VEvents to one VCalendar ;)
    You could, however, use ical4j's validate() method right before serialization to make sure the logical structure of all VEvents is correct. This way, any problems (like 2 UIDs) should be detected by the client and are not handed back by the server.


  • developer

    Looking through the code, I do not see where the second UID came from. But that probably doesn't mean too much, since I am also unable to find the code responsible for adding multiple VEvents to one VCalendar ;)

    It's done in Event::toEntity. The line where the UID is added is: https://github.com/bitfireAT/davdroid/blob/a796a1e9b38a22a943314183957ac4c12af82520/app/src/main/java/at/bitfire/davdroid/resource/Event.java#L261 Maybe the UID should be cleared before setting it.

    However, I can't reproduce the issue yet although I played around with "delete this and future events".

    Is it possible that you provide details steps to reproduce?



  • Ah, yes of course! Until now I thought when truncating a recurring event, that only the master VEvent is being changed, but it looks like a recurrence exception is added (maybe there is another precondition which we have not found yet). Clearing the first UID property of the recurrence exception VEvent should fix this issue!

    I will try to get a procedure to reproduce the error anyway, so you can test it yourself.



  • Got it!

    The following steps are able to reproduce this issue on a new, clean account with a fresh, empty calendar on Owncloud 8.1. I assume that DAVdroid is not installed on the test device, and no DAVdroid accounts are present.

    1. Install DAVdroid 0.6.9.
    2. Create a DAVdroid account for the test calendar. Enable syncing.
    3. Create a new recurring event (duration 1 hour 30 minutes, in the future), repeating weekly without an end, with one alarm. I used aCalendar to do so.
    4. Sync the account.
    5. Remove the event from the second week it should occur on (remove ONLY THIS event).
    6. Sync the account.
    7. Upgrade to DAVdroid 0.8.1
    8. Remove the event starting from the fourth week it should occur on (remove THIS and FUTURE events). The event should now have the following pattern: Week 1 listed - week 2 deleted - week 3 listed - week 4 and later deleted.
    9. Sync the account. HTTP 400 error occurs.

    Sorry if these are not the easiest steps. I had to try many different approaches to get at least one positive result. Also, it looks like the error cannot be reproduced by using the latest version of DAVdroid alone.

    Also I noted that it looks like the form DAVdroid stores recurring event exceptions in is incompatible with other clients (like owncloud web client and Thunderbird Lightning). But this is something for another issue.

    Edit: created #579

    I'd guess that the UID generation changed between the two versions of DAVdroid, hence event exceptions have a distinct UID in older versions, but share the same UID with their master event in newer. Now, that might not be a problem, but then the serialization changed and introduced the bug of two UIDs per event exception - which is still OK when both UIDs are the same, but breaks when the UIDs are different (carried over from old versions). Please excuse when what I'm thinking is completely wrong, I just try to make sense of what I see ;)


  • developer

    Also, it looks like the error cannot be reproduced by using the latest version of DAVdroid alone.

    I have now tested with the current version and can't reproduce this issue. I have added a check in the latest commit that makes absolutely sure that exception VEVENTs always get the UID of the master event, even if other UIDs are in the local database.


Log in to reply
 

Looks like your connection to Bitfire App Forums was lost, please wait while we try to reconnect.