Skip to content

Commit

Permalink
Adding db schema changes for metadata deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
robbarnsley authored and bari12 committed Jul 23, 2024
1 parent 2b628c2 commit 4bf5318
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/rucio/alembicrevision.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.

ALEMBIC_REVISION = 'b5493606bbf5' # the current alembic head revision
ALEMBIC_REVISION = 'b0070f3695c8' # the current alembic head revision
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Copyright European Organization for Nuclear Research (CERN) since 2012
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

''' Add deleted_did_meta table '''

import sqlalchemy as sa
from alembic import context
from alembic.op import create_index, create_primary_key, create_table, drop_table

from rucio.db.sqla.constants import DIDType
from rucio.db.sqla.types import JSON

# Alembic revision identifiers
revision = 'b0070f3695c8'
down_revision = 'b5493606bbf5'


def upgrade():
'''
Upgrade the database to this revision
'''

if context.get_context().dialect.name in ['oracle', 'mysql', 'postgresql']:
create_table('deleted_did_meta',
sa.Column('scope', sa.String(25)),
sa.Column('name', sa.String(255)),
sa.Column('did_type', sa.Enum(DIDType,
name='DEL_DID_META_DID_TYPE_CHK',
create_constraint=True,
values_callable=lambda obj: [e.value for e in obj])),
sa.Column('meta', JSON()),
sa.Column('created_at', sa.DateTime),
sa.Column('updated_at', sa.DateTime),
sa.Column('deleted_at', sa.DateTime))

create_primary_key('DEL_DID_META_PK', 'deleted_did_meta', ['scope', 'name'])
create_index('DEL_DID_META_DID_TYPE_IDX', 'deleted_did_meta', ['did_type'])


def downgrade():
'''
Downgrade the database to the previous revision
'''

if context.get_context().dialect.name in ['oracle', 'mysql', 'postgresql']:
drop_table('deleted_did_meta')
15 changes: 15 additions & 0 deletions lib/rucio/db/sqla/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ def _oracle_json_constraint(target: Table, connection: "Connection", **kw) -> No
if oracle_version >= 12:
if target.name == 'did_meta':
target.append_constraint(CheckConstraint('META IS JSON', 'ORACLE_META_JSON_CHK'))
if target.name == 'deleted_did_meta':
target.append_constraint(CheckConstraint('META IS JSON', 'ORACLE_DELETE_META_JSON_CHK'))
if target.name == 'virtual_placements':
target.append_constraint(CheckConstraint('PLACEMENTS IS JSON', 'ORACLE_PLACEMENTS_JSON_CHK'))

Expand Down Expand Up @@ -487,6 +489,19 @@ class DidMeta(BASE, ModelBase):
Index('DID_META_DID_TYPE_IDX', 'did_type'))


class DeletedDidMeta(BASE, ModelBase):
__tablename__ = 'deleted_did_meta'
scope: Mapped[InternalScope] = mapped_column(InternalScopeString(get_schema_value('SCOPE_LENGTH')))
name: Mapped[str] = mapped_column(String(get_schema_value('NAME_LENGTH')))
did_type: Mapped[Optional[DIDType]] = mapped_column(Enum(DIDType, name='DEL_DID_META_DID_TYPE_CHK',
create_constraint=True,
values_callable=lambda obj: [e.value for e in obj]))
meta: Mapped[Optional[Union[str, dict[str, Any]]]] = mapped_column(JSON())
deleted_at: Mapped[Optional[datetime]] = mapped_column(DateTime)
_table_args = (PrimaryKeyConstraint('scope', 'name', name='DEL_DID_META_PK'),
Index('DEL_DID_META_DID_TYPE_IDX', 'did_type'))


class DeletedDataIdentifier(BASE, ModelBase):
"""Represents a dataset"""
__tablename__ = 'deleted_dids'
Expand Down

0 comments on commit 4bf5318

Please sign in to comment.