1
0
Fork 0
mirror of https://github.com/Kozea/Radicale.git synced 2025-07-29 18:08:31 +00:00
Commit graph

198 commits

Author SHA1 Message Date
Unrud
d6435c36c9 Lock the item cache when filling it
Prevents performance losses when many clients request the same missing items in parallel.
2017-07-30 11:00:24 +02:00
Unrud
16abbd9ea6 Refactor: Extract class FileBackedRwLock 2017-07-30 10:57:41 +02:00
Unrud
5d238afb5e Don't check the vobject item in storage.Item
This is the responsibility of the storage plugin.
2017-07-27 19:08:08 +02:00
Unrud
9bde9d82f4 Store item on upload in the item cache
This rejects items that break the item cache before they are stored in the storage.
2017-07-27 19:08:07 +02:00
Unrud
796ba54f42 Clean item cache once per request 2017-07-27 19:08:05 +02:00
Unrud
0a1de26ae5 Refactor: Extract item cache methods 2017-07-27 19:08:04 +02:00
Unrud
46c636e642 Move item cache entry when item is moved 2017-07-27 19:08:02 +02:00
Unrud
316b0a5832 Change owner and is_principal to properties in BaseCollection 2017-07-22 23:32:26 +02:00
Unrud
1ce404ca35 Rename encoding to _encoding in Collection 2017-07-22 23:32:26 +02:00
Unrud
33ad60503f Sort keys of properties JSON file 2017-07-22 23:32:26 +02:00
Unrud
71916452ec Include properties in collection etag 2017-07-22 23:32:26 +02:00
Unrud
05b1e8296c Check collection properties 2017-07-22 23:32:26 +02:00
Unrud
863c70f35f Improve validation of uploaded items and stored items
This reverts commit 4533f76df9.
2017-07-22 23:32:26 +02:00
Unrud
e0045ca98d Don't use VObject for collection serialization 2017-07-22 23:32:26 +02:00
Unrud
debba3c7a1 Don't serialize collection for etag 2017-07-22 23:32:26 +02:00
Unrud
95380c5ce7 Add file name to VObject serialization errors 2017-07-22 23:32:26 +02:00
Unrud
4533f76df9 Accept VLIST items (fixes #661)
Custom format used by SOGo Connector to store lists of contacts
2017-07-21 16:12:19 +02:00
Unrud
4f831de006 Verify number of components in items 2017-07-15 09:42:01 +02:00
Unrud
d3a90d16c3 Improve log message when fsync'ing directory fails (fixes 656) 2017-07-15 09:42:00 +02:00
Unrud
56c88b4c54 Remove workarounds for bugs in VObject
The bugs got fixed in version 0.9.5
2017-07-01 05:45:15 +02:00
Unrud
2b3fd1fb9b Add missing UIDs instead of failing 2017-07-01 01:24:53 +02:00
Unrud
019dc7a39c Use UUID format for random UIDs 2017-07-01 01:24:53 +02:00
Unrud
c135dc026d Fix uploading of whole address books 2017-07-01 01:24:53 +02:00
Unrud
98caa88a25 Include VObject version in item cache hash 2017-06-23 22:04:37 +02:00
Unrud
2b45af92f3 Small improvements for wording in exceptions messages 2017-06-21 09:57:52 +02:00
Unrud
276de4fd3a Allow additional config options for external plugins 2017-06-21 09:54:33 +02:00
Unrud
070a39a51d Improve documentation 2017-06-16 23:28:15 +02:00
Unrud
73a73bb0a5 Improve log message for discovery of unsafe paths 2017-06-16 23:11:43 +02:00
Unrud
67669bd690 Rename path to sane_path 2017-06-16 23:11:29 +02:00
Unrud
5a0d4f7f2f Remove unused variable 2017-06-16 23:11:22 +02:00
Unrud
75605b5f03 Catch all exceptions when loading plugins 2017-06-15 23:54:32 +02:00
Unrud
6f5e30670f Don't change permissions of lock file
The file is part of the storage folder. Setting permissions of the storage folder is not handled by Radicale.
2017-06-15 23:44:39 +02:00
Unrud
6b8de92c57 Small improvements for Collection 2017-06-09 02:59:29 +02:00
Unrud
e09d33f3ee Document properties of BaseCollection 2017-06-09 02:59:29 +02:00
Unrud
79e7232ecb Rename self._meta to self._meta_cache and self._etag to self._etag_cache 2017-06-09 02:59:29 +02:00
Unrud
12871fdcb3 Workaround for bugs in VObject during filtering 2017-06-09 02:59:29 +02:00
Unrud
48d2a33053 Rename upload_all_atomic to _upload_all_atomic 2017-06-09 02:59:29 +02:00
Unrud
dbd06a1952 Default implementation for BaseCollection.serialize 2017-06-09 02:59:29 +02:00
Unrud
47d311b101 Improve doc strings 2017-06-09 02:59:29 +02:00
Unrud
12f9ac44c2 Remove __init__ from BaseCollection
It's not used anywhere
2017-06-09 02:59:29 +02:00
Unrud
bab35e9692 Detect errors in recurrence rules early 2017-06-07 21:54:38 +02:00
Unrud
1b54b23bb3 Add info about disabling locking to error message 2017-06-07 14:14:09 +02:00
Unrud
2860c664d0 Check that vobject_item have a UID 2017-06-06 20:01:09 +02:00
Unrud
e47747d4d4 return None instead of False if UID field is missing 2017-06-06 20:01:06 +02:00
Unrud
bea855cb80 Improve file names used when uploading whole collection
* Use 64 bit random sequence (extremely low chance of collisions)
* Improve error message in case of collisions
* Add file extension to names
2017-06-06 20:01:04 +02:00
Unrud
396b9ffecb Log error message from parser for items in storage 2017-06-02 16:36:02 +02:00
Unrud
a1ebc52b39 Don't delete cache entry that gets overwritten
It's unnecessary.
2017-06-02 14:19:53 +02:00
Unrud
07c792f14e Use %r n error messages for token names 2017-06-02 14:18:39 +02:00
Unrud
9ceae0a751 Make Radicale fast (#569)
* Change get_multi to also return missing items

get_multi is not used anywhere and this makes it easier to use.

* Use get_multi for report requests

* Add get_all to BaseCollection

This can be used for optimization on multifilesystem.

* Use iterator for files

* Remove unnecessary checks

This never happens and would be an error.

* Don't raise exception when calling get with colliding name

This behavior is wrong, it should be handled as if the file doesn't exist.

* Use get_all and get_multi to skip unnecessary checks

Collision checks are slow on big collections.

* Use exception instead of existence checks

It's a bit faster.

* Use os.scandir instead of os.listdir

It's faster and doesn't load all files at once.

* Cache metadata when storage is read-only

Metadata is queried a lot during a request. It's quiet slow to load and parse the file every time.

* Cache the etag when the storage is read-only

The etag is calculated twice for GET requests on collections.

* Add helper method for cleaning caches

* Use item etags to calculate collection etag

It's very slow and unnecessary to parse all files with VObject and serialize them again.

* Cache serialized collections in file system

Serialization is very slow for big collections. This caches the result in a file.

* Add helper function for prefilters

The simplify_prefilters functions converts XML filters to a simple tag and time range, which can be easily matched against the tag and time range that are extracted from vobject_items by the function find_tag_and_time_range.

* Add ability to cache etag and serialization of item

Parsing items with vobject is very slow and not required for many requests.
Caching can be used to speed it up.

* Cache metadata and serialization from items in file system

Store the serialized text and the tag and time range from vobject_items in the cache.
The metadata is used for prefilters.

* Remove the cache for the serialization of collections

* Serialize calendars without vobject

Merge the calendar components manually. This is much faster and requires less memory. Caching of the result is not required anymore.

* Allow pre_filtered_list to indicate that filters match

The storage backend can indicate that it evaluated the filters completely.

* Skip filtering with vobject if prefiltering is sufficient

``simplify_prefilters`` indicates if the simplified condition is identical to ``filters``.
This is used in the multifilesystem backend to detect if prefiltering is sufficient.

* Make constants global

* Use generator expressions

* Only extract elements from inside of VCALENDAR

This is unnecessary at the moment, the text representation should never contain anything but VCALENDAR.

* Improve comments

* restore backward compatiblity

* Small improvements for fastbackend
2017-06-02 14:14:55 +02:00
Unrud
f633b48a7a Real sync-collection support for the multifilesystem backend 2017-06-02 12:53:37 +02:00