[openstack-dev] [oslo.db] Proposal: Get rid of deleted column

Jay Pipes jaypipes at gmail.com
Mon Aug 19 07:39:50 UTC 2013


I'm throwing this up here to get some feedback on something that's 
always bugged me about the model base used in many of the projects.

There's a mixin class that looks like so:

class SoftDeleteMixin(object):
     deleted_at = Column(DateTime)
     deleted = Column(Integer, default=0)

     def soft_delete(self, session=None):
         """Mark this object as deleted."""
         self.deleted = self.id
         self.deleted_at = timeutils.utcnow()
         self.save(session=session)

Once mixed in to a concrete model class, the primary join is typically 
modified to include the deleted column, like so:

class ComputeNode(BASE, NovaBase):
     <snip>...
     service = relationship(Service,
                            backref=backref('compute_node'),
                            foreign_keys=service_id,
                            primaryjoin='and_('
                                 'ComputeNode.service_id == Service.id,'
                                 'ComputeNode.deleted == 0)')

My proposal is to get rid of the deleted column in the SoftDeleteMixin 
class entirely, as it is redundant with the deleted_at column. Instead 
of doing a join condition on deleted == 0, one would instead just do the 
join condition on deleted_at is None, which translates to the SQL: AND 
deleted_at IS NULL.

There isn't much of a performance benefit -- you're only reducing the 
row size by 4 bytes. But, you'd remove the redundant data from all the 
tables, which would make the normal form freaks like myself happy ;)

Thoughts?

-jay



More information about the OpenStack-dev mailing list