Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2022-10-03 21:03:29 +0300
committerChristoph Wurst <christoph@winzerhof-wurst.at>2022-10-03 21:03:29 +0300
commite6d8da4cdc78933ca4053486cd1f7e63dbf62294 (patch)
tree17206a087177a97d38fbb0a2b5538aa2bc46f2ee
parentf888f99b0a4f599ea403cdf337935093c5420586 (diff)
Fix causal reads in CalDAV backendfix/caldav-backend-causal-reads
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php49
1 files changed, 29 insertions, 20 deletions
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index a147d785cc7..3d5fdb14588 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -64,6 +64,7 @@ use OCA\DAV\Events\CalendarUpdatedEvent;
use OCA\DAV\Events\SubscriptionCreatedEvent;
use OCA\DAV\Events\SubscriptionDeletedEvent;
use OCA\DAV\Events\SubscriptionUpdatedEvent;
+use OCP\AppFramework\Db\TTransactional;
use OCP\Calendar\Exceptions\CalendarException;
use OCP\DB\Exception;
use OCP\DB\QueryBuilder\IQueryBuilder;
@@ -119,6 +120,9 @@ use function time;
* @package OCA\DAV\CalDAV
*/
class CalDavBackend extends AbstractBackend implements SyncSupport, SubscriptionSupport, SchedulingSupport {
+
+ use TTransactional;
+
public const CALENDAR_TYPE_CALENDAR = 0;
public const CALENDAR_TYPE_SUBSCRIPTION = 1;
@@ -812,15 +816,19 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
}
- $query = $this->db->getQueryBuilder();
- $query->insert('calendars');
- foreach ($values as $column => $value) {
- $query->setValue($column, $query->createNamedParameter($value));
- }
- $query->executeStatement();
- $calendarId = $query->getLastInsertId();
+ [$calendarId, $calendarData] = $this->atomic(function() use ($values) {
+ $query = $this->db->getQueryBuilder();
+ $query->insert('calendars');
+ foreach ($values as $column => $value) {
+ $query->setValue($column, $query->createNamedParameter($value));
+ }
+ $query->executeStatement();
+ $calendarId = $query->getLastInsertId();
+
+ $calendarData = $this->getCalendarById($calendarId);
+ return [$calendarId, $calendarData];
+ }, $this->db);
- $calendarData = $this->getCalendarById($calendarId);
$this->dispatcher->dispatchTyped(new CalendarCreatedEvent((int)$calendarId, $calendarData));
return $calendarId;
@@ -2446,21 +2454,22 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
}
- $valuesToInsert = [];
-
- $query = $this->db->getQueryBuilder();
-
- foreach (array_keys($values) as $name) {
- $valuesToInsert[$name] = $query->createNamedParameter($values[$name]);
- }
+ [$subscriptionId, $subscriptionRow] = $this->atomic(function() use ($values) {
+ $valuesToInsert = [];
+ $query = $this->db->getQueryBuilder();
+ foreach (array_keys($values) as $name) {
+ $valuesToInsert[$name] = $query->createNamedParameter($values[$name]);
+ }
+ $query->insert('calendarsubscriptions')
+ ->values($valuesToInsert)
+ ->executeStatement();
- $query->insert('calendarsubscriptions')
- ->values($valuesToInsert)
- ->executeStatement();
+ $subscriptionId = $query->getLastInsertId();
- $subscriptionId = $query->getLastInsertId();
+ $subscriptionRow = $this->getSubscriptionById($subscriptionId);
+ return [$subscriptionId, $subscriptionRow];
+ }, $this->db);
- $subscriptionRow = $this->getSubscriptionById($subscriptionId);
$this->dispatcher->dispatchTyped(new SubscriptionCreatedEvent($subscriptionId, $subscriptionRow));
return $subscriptionId;