Skip to content

Cascade deletion won't delete GridFS file blocks used by FileField #2433

@StoneMoe

Description

@StoneMoe

GridFS data blocks delete by:

for name, field in self._fields.items():
if isinstance(field, FileField):
getattr(self, name).delete()

then
def delete(self):
# Delete file from GridFS, FileField still remains
self.fs.delete(self.grid_id)
self.grid_id = None
self.gridout = None
self._mark_as_changed()

So calling Document.delete() won't ran into this issue, but cascade delete will, because:

refs = document_cls.objects(
**{field_name + "__in": self, "pk__nin": cascade_refs}
)
if refs.count() > 0:
refs.delete(write_concern=write_concern, cascade_refs=cascade_refs)

this will call pymongo's delete directly, which will bypass file block delete logic that i referenced above

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions