@@ -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