files:transfer-ownership fails with "not enough free space" when the target quota is unlimited

Abierto Apto para principiantes
#64,019 1 comentario 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
php
Área
backend

Línea de trabajo

Comienza en apps/files/lib/Service/OwnershipTransferService.php, especialmente en OwnershipTransferService::analyse() alrededor de la comprobación del espacio libre, y sigue los valores de cuota descritos en el issue. Reproduce el problema con un almacén de objetos como almacenamiento principal y una cuota de destino ilimitada usando occ files:transfer-ownership; la tarea estará terminada cuando una transferencia no vacía ya no se cancele porque la cuota de destino sea ilimitada o no se pueda calcular.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

0. Needs triage bug
Bug description

occ files:transfer-ownership aborts with Target user does not have enough free space available. when the destination user has unlimited quota on an instance using object storage as primary storage — it fails precisely because the target has no limit.

Cause

OwnershipTransferService::analyse():

$freeSpace = $view->free_space($destinationUid . '/files/');
if ($size > $freeSpace && $freeSpace !== FileInfo::SPACE_UNKNOWN) {

free_space() returns negative sentinels, but the guard exempts only SPACE_UNKNOWN (-2). For a quota-less user, Quota::free_space() passes through to ObjectStoreStorage::free_space(), which returns SPACE_UNLIMITED (-3) when no totalSizeLimit is set. $size > -3 is true for any non-empty source, so it throws. SPACE_NOT_COMPUTED (-1) has the same flaw.

Not reachable on local primary storage, where an unlimited-quota user gets real disk free space — which is probably why it hasn't surfaced before.

Steps to reproduce
  1. Object store as primary storage, no totalSizeLimit.
  2. Destination user quota none.
  3. occ files:transfer-ownership --path="<non-empty folder>" <source> <destination>
Workaround

Set a finite quota on the destination, transfer, set it back to none.

Version

34.0.3, and present on master @ 22bd34a.

Lenguaje dominante
PHP
Estrellas
36.9k
Forks
5.2k
Merge medio
2 d
PR fusionados (30 d)
725

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de nextcloud/server

Todos los issues de nextcloud/server

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.