Coverage for manila/db/migrations/alembic/versions/03da71c0e321_convert_cgs_to_share_groups.py: 100%

79 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2026-02-18 22:19 +0000

1# Licensed under the Apache License, Version 2.0 (the "License"); you may 

2# not use this file except in compliance with the License. You may obtain 

3# a copy of the License at 

4# 

5# http://www.apache.org/licenses/LICENSE-2.0 

6# 

7# Unless required by applicable law or agreed to in writing, software 

8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

10# License for the specific language governing permissions and limitations 

11# under the License. 

12 

13"""Convert consistency groups to share groups 

14 

15Revision ID: 03da71c0e321 

16Revises: e9f79621d83f 

17Create Date: 2016-05-19 10:25:17.899008 

18 

19""" 

20 

21# revision identifiers, used by Alembic. 

22revision = "03da71c0e321" 

23down_revision = "e9f79621d83f" 

24 

25from alembic import op 

26from oslo_log import log 

27import sqlalchemy as sa 

28from sqlalchemy import Column, String 

29 

30from manila.db.migrations import utils 

31 

32LOG = log.getLogger(__name__) 

33 

34 

35def upgrade(): 

36 LOG.info("Renaming consistency group tables") 

37 

38 # Rename tables 

39 op.rename_table("consistency_groups", "share_groups") 

40 op.rename_table("cgsnapshots", "share_group_snapshots") 

41 op.rename_table("cgsnapshot_members", "share_group_snapshot_members") 

42 op.rename_table( 

43 "consistency_group_share_type_mappings", 

44 "share_group_share_type_mappings") 

45 

46 # Update columns and foreign keys 

47 op.drop_constraint( 

48 "fk_shares_consistency_group_id", "shares", type_="foreignkey") 

49 op.alter_column( 

50 "shares", "consistency_group_id", existing_type=String(36), 

51 existing_nullable=True, new_column_name="share_group_id") 

52 op.alter_column( 

53 "shares", "source_cgsnapshot_member_id", existing_type=String(36), 

54 existing_nullable=True, 

55 new_column_name="source_share_group_snapshot_member_id") 

56 op.create_foreign_key( 

57 "fk_shares_share_group_id", "shares", "share_groups", 

58 ["share_group_id"], ["id"]) 

59 op.drop_constraint( 

60 "fk_cg_share_network_id", "share_groups", type_="foreignkey") 

61 op.drop_constraint( 

62 "fk_cg_share_server_id", "share_groups", type_="foreignkey") 

63 op.alter_column( 

64 "share_groups", "source_cgsnapshot_id", existing_type=String(36), 

65 new_column_name="source_share_group_snapshot_id") 

66 op.create_foreign_key( 

67 "fk_share_group_share_network_id", "share_groups", "share_networks", 

68 ["share_network_id"], ["id"]) 

69 op.create_foreign_key( 

70 "fk_share_group_share_server_id", "share_groups", "share_servers", 

71 ["share_server_id"], ["id"]) 

72 op.drop_constraint( 

73 "fk_cgsnapshots_consistency_group_id", "share_group_snapshots", 

74 type_="foreignkey") 

75 op.alter_column( 

76 "share_group_snapshots", "consistency_group_id", 

77 existing_type=String(36), new_column_name="share_group_id") 

78 op.create_foreign_key( 

79 "fk_share_group_snapshots_share_group_id", "share_group_snapshots", 

80 "share_groups", ["share_group_id"], ["id"]) 

81 op.drop_constraint( 

82 "fk_cgstm_cg_id", "share_group_share_type_mappings", 

83 type_="foreignkey") 

84 op.drop_constraint( 

85 "fk_cgstm_share_type_id", "share_group_share_type_mappings", 

86 type_="foreignkey") 

87 op.alter_column( 

88 "share_group_share_type_mappings", "consistency_group_id", 

89 existing_type=String(36), new_column_name="share_group_id") 

90 op.create_foreign_key( 

91 "fk_sgstm_share_group_id", "share_group_share_type_mappings", 

92 "share_groups", ["share_group_id"], ["id"]) 

93 op.create_foreign_key( 

94 "fk_sgstm_share_type_id", "share_group_share_type_mappings", 

95 "share_types", ["share_type_id"], ["id"]) 

96 op.drop_constraint( 

97 "fk_cgsnapshot_members_cgsnapshot_id", "share_group_snapshot_members", 

98 type_="foreignkey") 

99 op.drop_constraint( 

100 "fk_cgsnapshot_members_share_instance_id", 

101 "share_group_snapshot_members", type_="foreignkey") 

102 op.drop_constraint( 

103 "fk_cgsnapshot_members_share_id", "share_group_snapshot_members", 

104 type_="foreignkey") 

105 op.drop_constraint( 

106 "fk_cgsnapshot_members_share_type_id", "share_group_snapshot_members", 

107 type_="foreignkey") 

108 op.alter_column( 

109 "share_group_snapshot_members", "cgsnapshot_id", 

110 existing_type=String(36), new_column_name="share_group_snapshot_id") 

111 op.create_foreign_key( 

112 "fk_gsm_group_snapshot_id", "share_group_snapshot_members", 

113 "share_group_snapshots", ["share_group_snapshot_id"], ["id"]) 

114 op.create_foreign_key( 

115 "fk_gsm_share_instance_id", "share_group_snapshot_members", 

116 "share_instances", ["share_instance_id"], ["id"]) 

117 op.create_foreign_key( 

118 "fk_gsm_share_id", "share_group_snapshot_members", "shares", 

119 ["share_id"], ["id"]) 

120 op.drop_column("share_group_snapshot_members", "share_type_id") 

121 

122 

123def downgrade(): 

124 meta = sa.MetaData() 

125 meta.bind = op.get_bind() 

126 

127 # Rename tables 

128 op.rename_table("share_groups", "consistency_groups") 

129 op.rename_table("share_group_snapshots", "cgsnapshots") 

130 op.rename_table("share_group_snapshot_members", "cgsnapshot_members") 

131 op.rename_table( 

132 "share_group_share_type_mappings", 

133 "consistency_group_share_type_mappings") 

134 

135 # Update columns and foreign keys 

136 op.drop_constraint( 

137 "fk_shares_share_group_id", "shares", type_="foreignkey") 

138 op.alter_column( 

139 "shares", "share_group_id", existing_type=String(36), 

140 new_column_name="consistency_group_id") 

141 op.alter_column( 

142 "shares", "source_share_group_snapshot_member_id", 

143 existing_type=String(36), existing_nullable=True, 

144 new_column_name="source_cgsnapshot_member_id") 

145 op.create_foreign_key( 

146 "fk_shares_consistency_group_id", "shares", "consistency_groups", 

147 ["consistency_group_id"], ["id"]) 

148 op.drop_constraint( 

149 "fk_share_group_share_network_id", "consistency_groups", 

150 type_="foreignkey") 

151 op.drop_constraint( 

152 "fk_share_group_share_server_id", "consistency_groups", 

153 type_="foreignkey") 

154 op.alter_column( 

155 "consistency_groups", "source_share_group_snapshot_id", 

156 existing_type=String(36), new_column_name="source_cgsnapshot_id") 

157 op.create_foreign_key( 

158 "fk_cg_share_network_id", "consistency_groups", "share_networks", 

159 ["share_network_id"], ["id"]) 

160 op.create_foreign_key( 

161 "fk_cg_share_server_id", "consistency_groups", "share_servers", 

162 ["share_server_id"], ["id"]) 

163 op.drop_constraint( 

164 "fk_share_group_snapshots_share_group_id", "cgsnapshots", 

165 type_="foreignkey") 

166 op.alter_column( 

167 "cgsnapshots", "share_group_id", existing_type=String(36), 

168 new_column_name="consistency_group_id") 

169 op.create_foreign_key( 

170 "fk_cgsnapshots_consistency_group_id", "cgsnapshots", 

171 "consistency_groups", ["consistency_group_id"], ["id"]) 

172 op.drop_constraint( 

173 "fk_sgstm_share_group_id", "consistency_group_share_type_mappings", 

174 type_="foreignkey") 

175 op.drop_constraint( 

176 "fk_sgstm_share_type_id", "consistency_group_share_type_mappings", 

177 type_="foreignkey") 

178 op.alter_column( 

179 "consistency_group_share_type_mappings", "share_group_id", 

180 existing_type=String(36), new_column_name="consistency_group_id") 

181 op.create_foreign_key( 

182 "fk_cgstm_cg_id", "consistency_group_share_type_mappings", 

183 "consistency_groups", ["consistency_group_id"], ["id"]) 

184 op.create_foreign_key( 

185 "fk_cgstm_share_type_id", "consistency_group_share_type_mappings", 

186 "share_types", ["share_type_id"], ["id"]) 

187 op.drop_constraint( 

188 "fk_gsm_group_snapshot_id", "cgsnapshot_members", type_="foreignkey") 

189 op.drop_constraint( 

190 "fk_gsm_share_instance_id", "cgsnapshot_members", type_="foreignkey") 

191 op.drop_constraint( 

192 "fk_gsm_share_id", "cgsnapshot_members", type_="foreignkey") 

193 op.alter_column( 

194 "cgsnapshot_members", "share_group_snapshot_id", 

195 existing_type=String(36), new_column_name="cgsnapshot_id") 

196 op.create_foreign_key( 

197 "fk_cgsnapshot_members_cgsnapshot_id", "cgsnapshot_members", 

198 "cgsnapshots", ["cgsnapshot_id"], ["id"]) 

199 op.create_foreign_key( 

200 "fk_cgsnapshot_members_share_instance_id", 

201 "cgsnapshot_members", "share_instances", ["share_instance_id"], ["id"]) 

202 op.create_foreign_key( 

203 "fk_cgsnapshot_members_share_id", "cgsnapshot_members", "shares", 

204 ["share_id"], ["id"]) 

205 op.add_column( 

206 "cgsnapshot_members", 

207 Column('share_type_id', String(36), nullable=True)) 

208 

209 connection = op.get_bind() 

210 si_table = utils.load_table('share_instances', connection) 

211 member_table = utils.load_table('cgsnapshot_members', connection) 

212 for si_record in connection.execute(si_table.select()): 

213 # pylint: disable=no-value-for-parameter 

214 connection.execute( 

215 member_table.update().where( 

216 member_table.c.share_instance_id == si_record.id, 

217 ).values({"share_type_id": si_record.share_type_id})) 

218 

219 op.alter_column( 

220 "cgsnapshot_members", 

221 Column('share_type_id', String(36), nullable=False)) 

222 op.create_foreign_key( 

223 "fk_cgsnapshot_members_share_type_id", "cgsnapshot_members", 

224 "share_types", ["share_type_id"], ["id"])