pimutils / pimutils/vdirsyncer

vdirsyncer incorrectly complains that "Storage was completely emptied"

Open
#694 13 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type: 3rd party type: question
Dominant language
Python
Stars
1.9k
Forks
185
Avg merge
11h 49m
Merged PRs (30d)
1

Description

I successfully synced from local (filesystem on Arch Linux) to remote (radicale server 2.1.8) once. Now on the subsequent runs I get the errer shown below. Note that I am able to sync from the radicale server to a phone. So the remote is not actually empty.

Does it have to do with normalization?

This is vdirsyncer 0.16.3.

debug: Using 1 maximal workers.
Syncing addressbook
debug: PROPFIND http://192.168.1.1:5232/user/addressbook.vcf/
debug: {'User-Agent': 'vdirsyncer/0.16.3', 'Content-Type': 'application/xml; charset=UTF-8', 'Depth': '1'}
debug: <?xml version="1.0" encoding="utf-8" ?>
debug:             <D:propfind xmlns:D="DAV:">
debug:                 <D:prop>
debug:                     <D:resourcetype/>
debug:                     <D:getcontenttype/>
debug:                     <D:getetag/>
debug:                 </D:prop>
debug:             </D:propfind>
debug:             
debug: Sending request...
debug: 207
debug: {'Date': 'Fri, 22 Dec 2017 21:01:02 GMT', 'Server': 'WSGIServer/0.2 CPython/3.6.3', 'DAV': '1, 2, 3, calendar-access, addressbook, extended-mkcol', 'Content-Type': 'text/xml; charset=utf-8', 'Content-Encoding': 'gzip', 'Content-Length': '31299'}
debug: <?xml version='1.0' encoding='utf-8'?>
debug: <multistatus xmlns="DAV:"
xmlns:CR="urn:ietf:params:xml:ns:carddav">
  <response>
    <href>/user/addressbook.vcf/</href>
    <propstat>
      <prop>
        <resourcetype>
          <collection />
        </resourcetype>
      </prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
    <propstat>
      <prop>
        <getcontenttype />
        <getetag />
      </prop>
      <status>HTTP/1.1 404 Not Found</status>
    </propstat>
  </response>
  <response>
    <href>
    /user/addressbook.vcf/i1y36nwmmjny43q371o12933nj52x9wg9clw.vcf/</href>
    <propstat>
      <prop>
        <resourcetype>
          <CR:addressbook />
          <collection />
        </resourcetype>
        <getcontenttype>text/vcard</getcontenttype>
        <getetag>"ebf1610a8cd56d4ce5b6aec03d090f23"</getetag>
      </prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
  </response>
  <response>
    <href>
    /user/addressbook.vcf/i6g5lzucj5umfdikxgulldltt78wumrwntby.vcf/</href>
    <propstat>
      <prop>
        <resourcetype>
          <CR:addressbook />
          <collection />
        </resourcetype>
        <getcontenttype>text/vcard</getcontenttype>
        <getetag>"9fc7b2fe0990fceb031f6568b04219dd"</getetag>
      </prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
  </response>

Many more responses like this before "multistatus" is closed:

</multistatus>

Then loads of messages like this:

debug: Already normalized: '/user/addressbook.vcf/n4vq5kmkwk.vcf/'
debug: Skipping '/user/addressbook.vcf/n4vq5kmkwk.vcf/', is collection.

Finally:

error: addressbook: Storage "addressbook_remote" was completely emptied. If you want to delete ALL entries on BOTH sides, then use `vdirsyncer sync --force-delete addressbook`. Otherwise delete the files for addressbook in your status directory.
error: 1 out of 2 tasks failed.

Contributor guide

Open the contributing guide

First steps

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

Research direction

Start by reproducing the vdirsyncer sync failure with Radicale 2.1.8 and the logged PROPFIND response, then trace response normalization and the storage-empty safety check. Done means a non-empty remote address book is not reported as completely emptied, with regression coverage for this response shape.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.