Skip to content

Commit e1094a7

Browse files
CarlSchwanbackportbot[bot]
authored andcommitted
perf: Don't update etag of folder marked as IReliableETagStorage
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
1 parent 8698ea8 commit e1094a7

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

lib/private/Files/Cache/Propagator.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ public function commitBatch(): void {
194194
// Ensure rows are always locked in the same order
195195
uasort($this->batch, static fn (array $a, array $b) => $a['hash'] <=> $b['hash']);
196196

197+
// storages with reliable etags maintain their own etag, so don't churn one
198+
// here on every batched row (matches the check in propagateChange())
199+
$reliableEtag = $this->storage->instanceOfStorage(IReliableEtagStorage::class);
200+
197201
try {
198202
$this->connection->beginTransaction();
199203

@@ -218,17 +222,21 @@ public function commitBatch(): void {
218222
$query = $this->connection->getQueryBuilder();
219223
$query->update('filecache')
220224
->set('mtime', $query->func()->greatest('mtime', $query->createParameter('time')))
221-
->set('etag', $query->expr()->literal(uniqid()))
222225
->where($query->expr()->eq('storage', $query->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
223226
->andWhere($query->expr()->eq('fileid', $query->createParameter('fileid')));
227+
if (!$reliableEtag) {
228+
$query->set('etag', $query->expr()->literal(uniqid()));
229+
}
224230

225231
$queryWithSize = $this->connection->getQueryBuilder();
226232
$queryWithSize->update('filecache')
227233
->set('mtime', $queryWithSize->func()->greatest('mtime', $queryWithSize->createParameter('time')))
228-
->set('etag', $queryWithSize->expr()->literal(uniqid()))
229234
->set('size', $queryWithSize->func()->add('size', $queryWithSize->createParameter('size')))
230235
->where($queryWithSize->expr()->eq('storage', $queryWithSize->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
231236
->andWhere($queryWithSize->expr()->eq('fileid', $queryWithSize->createParameter('fileid')));
237+
if (!$reliableEtag) {
238+
$queryWithSize->set('etag', $queryWithSize->expr()->literal(uniqid()));
239+
}
232240

233241
while ($row = $result->fetchAssociative()) {
234242
$item = $this->batch[$row['path']];
@@ -249,17 +257,21 @@ public function commitBatch(): void {
249257
$query = $this->connection->getQueryBuilder();
250258
$query->update('filecache')
251259
->set('mtime', $query->func()->greatest('mtime', $query->createParameter('time')))
252-
->set('etag', $query->expr()->literal(uniqid()))
253260
->where($query->expr()->eq('storage', $query->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
254261
->andWhere($query->expr()->eq('path_hash', $query->createParameter('hash')));
262+
if (!$reliableEtag) {
263+
$query->set('etag', $query->expr()->literal(uniqid()));
264+
}
255265

256266
$queryWithSize = $this->connection->getQueryBuilder();
257267
$queryWithSize->update('filecache')
258268
->set('mtime', $queryWithSize->func()->greatest('mtime', $queryWithSize->createParameter('time')))
259-
->set('etag', $queryWithSize->expr()->literal(uniqid()))
260269
->set('size', $queryWithSize->func()->add('size', $queryWithSize->createParameter('size')))
261270
->where($queryWithSize->expr()->eq('storage', $queryWithSize->createNamedParameter($storageId, IQueryBuilder::PARAM_INT)))
262271
->andWhere($queryWithSize->expr()->eq('path_hash', $queryWithSize->createParameter('hash')));
272+
if (!$reliableEtag) {
273+
$queryWithSize->set('etag', $queryWithSize->expr()->literal(uniqid()));
274+
}
263275

264276
foreach ($this->batch as $item) {
265277
if ($item['size']) {

0 commit comments

Comments
 (0)