@@ -38,38 +38,167 @@ public DataClassificationAdapter(IAzureContext context)
38
38
39
39
internal void SetSensitivityLabels ( SqlDatabaseSensitivityClassificationModel model )
40
40
{
41
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . SetSensitivityLabel (
41
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
42
+ list => Communicator . PatchSensitivityLabels (
42
43
model . ResourceGroupName ,
43
44
model . ServerName ,
44
45
model . DatabaseName ,
45
- sensitivityLabelModel . SchemaName ,
46
- sensitivityLabelModel . TableName ,
47
- sensitivityLabelModel . ColumnName ,
48
- ToSensitivityLabel ( sensitivityLabelModel ) ) ) ;
46
+ new PatchOperations
47
+ {
48
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
49
+ {
50
+ OperationKind = PatchOperationKind . Set ,
51
+ Schema = sensitivityLabelModel . SchemaName ,
52
+ Table = sensitivityLabelModel . TableName ,
53
+ Column = sensitivityLabelModel . ColumnName ,
54
+ SensitivityLabel = ToSensitivityLabel ( sensitivityLabelModel )
55
+ } ) . ToList ( )
56
+ } ) ) ;
49
57
}
50
58
51
59
internal void SetSensitivityLabels ( ManagedDatabaseSensitivityClassificationModel model )
52
60
{
53
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . SetManagedDatabaseSensitivityLabel (
61
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
62
+ list => Communicator . PatchManagedDatabaseSensitivityLabels (
63
+ model . ResourceGroupName ,
64
+ model . InstanceName ,
65
+ model . DatabaseName ,
66
+ new PatchOperations
67
+ {
68
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
69
+ {
70
+ OperationKind = PatchOperationKind . Set ,
71
+ Schema = sensitivityLabelModel . SchemaName ,
72
+ Table = sensitivityLabelModel . TableName ,
73
+ Column = sensitivityLabelModel . ColumnName ,
74
+ SensitivityLabel = ToSensitivityLabel ( sensitivityLabelModel )
75
+ } ) . ToList ( )
76
+ } ) ) ;
77
+ }
78
+
79
+ internal void RemoveSensitivityLabels ( SqlDatabaseSensitivityClassificationModel model )
80
+ {
81
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
82
+ list => Communicator . PatchSensitivityLabels (
83
+ model . ResourceGroupName ,
84
+ model . ServerName ,
85
+ model . DatabaseName ,
86
+ new PatchOperations
87
+ {
88
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
89
+ {
90
+ OperationKind = PatchOperationKind . Remove ,
91
+ Schema = sensitivityLabelModel . SchemaName ,
92
+ Table = sensitivityLabelModel . TableName ,
93
+ Column = sensitivityLabelModel . ColumnName ,
94
+ } ) . ToList ( )
95
+ } ) ) ;
96
+ }
97
+
98
+ internal void RemoveSensitivityLabels ( ManagedDatabaseSensitivityClassificationModel model )
99
+ {
100
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
101
+ list => Communicator . PatchManagedDatabaseSensitivityLabels (
102
+ model . ResourceGroupName ,
103
+ model . InstanceName ,
104
+ model . DatabaseName ,
105
+ new PatchOperations
106
+ {
107
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
108
+ {
109
+ OperationKind = PatchOperationKind . Remove ,
110
+ Schema = sensitivityLabelModel . SchemaName ,
111
+ Table = sensitivityLabelModel . TableName ,
112
+ Column = sensitivityLabelModel . ColumnName ,
113
+ } ) . ToList ( )
114
+ } ) ) ;
115
+ }
116
+
117
+ internal void EnableSensitivityRecommendations ( SqlDatabaseSensitivityClassificationModel model )
118
+ {
119
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
120
+ list => Communicator . PatchSensitivityRecommendations (
121
+ model . ResourceGroupName ,
122
+ model . ServerName ,
123
+ model . DatabaseName ,
124
+ new PatchOperations
125
+ {
126
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
127
+ {
128
+ OperationKind = PatchOperationKind . Enable ,
129
+ Schema = sensitivityLabelModel . SchemaName ,
130
+ Table = sensitivityLabelModel . TableName ,
131
+ Column = sensitivityLabelModel . ColumnName ,
132
+ } ) . ToList ( )
133
+ } ) ) ;
134
+ }
135
+
136
+ internal void EnableSensitivityRecommendations ( ManagedDatabaseSensitivityClassificationModel model )
137
+ {
138
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
139
+ list => Communicator . PatchManagedDatabaseSensitivityRecommendations (
140
+ model . ResourceGroupName ,
141
+ model . InstanceName ,
142
+ model . DatabaseName ,
143
+ new PatchOperations
144
+ {
145
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
146
+ {
147
+ OperationKind = PatchOperationKind . Enable ,
148
+ Schema = sensitivityLabelModel . SchemaName ,
149
+ Table = sensitivityLabelModel . TableName ,
150
+ Column = sensitivityLabelModel . ColumnName ,
151
+ } ) . ToList ( )
152
+ } ) ) ;
153
+ }
154
+
155
+ internal void DisableSensitivityRecommendations ( SqlDatabaseSensitivityClassificationModel model )
156
+ {
157
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
158
+ list => Communicator . PatchSensitivityRecommendations (
159
+ model . ResourceGroupName ,
160
+ model . ServerName ,
161
+ model . DatabaseName ,
162
+ new PatchOperations
163
+ {
164
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
165
+ {
166
+ OperationKind = PatchOperationKind . Disable ,
167
+ Schema = sensitivityLabelModel . SchemaName ,
168
+ Table = sensitivityLabelModel . TableName ,
169
+ Column = sensitivityLabelModel . ColumnName ,
170
+ } ) . ToList ( )
171
+ } ) ) ;
172
+ }
173
+ internal void DisableSensitivityRecommendations ( ManagedDatabaseSensitivityClassificationModel model )
174
+ {
175
+ SplitSensitivityLabelsIntoListsAndPatch ( model . SensitivityLabels ,
176
+ list => Communicator . PatchManagedDatabaseSensitivityRecommendations (
54
177
model . ResourceGroupName ,
55
178
model . InstanceName ,
56
179
model . DatabaseName ,
57
- sensitivityLabelModel . SchemaName ,
58
- sensitivityLabelModel . TableName ,
59
- sensitivityLabelModel . ColumnName ,
60
- ToSensitivityLabel ( sensitivityLabelModel ) ) ) ;
180
+ new PatchOperations
181
+ {
182
+ Operations = list . Select ( sensitivityLabelModel => new PatchOperation
183
+ {
184
+ OperationKind = PatchOperationKind . Disable ,
185
+ Schema = sensitivityLabelModel . SchemaName ,
186
+ Table = sensitivityLabelModel . TableName ,
187
+ Column = sensitivityLabelModel . ColumnName ,
188
+ } ) . ToList ( )
189
+ } ) ) ;
61
190
}
62
191
63
- internal void ModifySensitivityLabels ( SensitivityClassificationModel model ,
64
- Action < SensitivityLabelModel > modifySensitivityLabel )
192
+ internal void SplitSensitivityLabelsIntoListsAndPatch ( List < SensitivityLabelModel > sensitivityLabelsToModify ,
193
+ Action < List < SensitivityLabelModel > > patchSensitivityLabels )
65
194
{
66
195
ConcurrentQueue < Exception > exceptions = new ConcurrentQueue < Exception > ( ) ;
67
- Parallel . ForEach < SensitivityLabelModel > ( model . SensitivityLabels ,
68
- sensitivityLabelModel =>
196
+ Parallel . ForEach < List < SensitivityLabelModel > > ( SplitList ( sensitivityLabelsToModify ) ,
197
+ sensitivityLabelsList =>
69
198
{
70
199
try
71
200
{
72
- modifySensitivityLabel ( sensitivityLabelModel ) ;
201
+ patchSensitivityLabels ( sensitivityLabelsList ) ;
73
202
}
74
203
catch ( Exception e )
75
204
{
@@ -86,28 +215,6 @@ internal void ModifySensitivityLabels(SensitivityClassificationModel model,
86
215
}
87
216
}
88
217
89
- internal void RemoveSensitivityLabels ( SqlDatabaseSensitivityClassificationModel model )
90
- {
91
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . DeleteSensitivityLabel (
92
- model . ResourceGroupName ,
93
- model . ServerName ,
94
- model . DatabaseName ,
95
- sensitivityLabelModel . SchemaName ,
96
- sensitivityLabelModel . TableName ,
97
- sensitivityLabelModel . ColumnName ) ) ;
98
- }
99
-
100
- internal void RemoveManagedDatabaseSensitivityLabels ( ManagedDatabaseSensitivityClassificationModel model )
101
- {
102
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . DeleteManagedDatabaseSensitivityLabel (
103
- model . ResourceGroupName ,
104
- model . InstanceName ,
105
- model . DatabaseName ,
106
- sensitivityLabelModel . SchemaName ,
107
- sensitivityLabelModel . TableName ,
108
- sensitivityLabelModel . ColumnName ) ) ;
109
- }
110
-
111
218
internal List < SensitivityLabelModel > GetCurrentSensitivityLabel (
112
219
string resourceGroupName , string serverName , string databaseName ,
113
220
string schemaName , string tableName , string columnName )
@@ -119,7 +226,6 @@ internal List<SensitivityLabelModel> GetCurrentSensitivityLabel(
119
226
internal List < SensitivityLabelModel > GetCurrentSensitivityLabels (
120
227
string resourceGroupName , string serverName , string databaseName )
121
228
{
122
- var n = Context . Environment . Name ;
123
229
return ToSensitivityLabelModelList ( Communicator . GetCurrentSensitivityLabels ( resourceGroupName , serverName , databaseName ) ) ;
124
230
}
125
231
@@ -160,50 +266,6 @@ internal async Task<InformationProtectionPolicy> RetrieveInformationProtectionPo
160
266
: InformationProtectionPolicy . DefaultInformationProtectionPolicy ;
161
267
}
162
268
163
- internal void EnableSensitivityRecommendations ( SqlDatabaseSensitivityClassificationModel model )
164
- {
165
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . EnableSensitivityRecommendation (
166
- model . ResourceGroupName ,
167
- model . ServerName ,
168
- model . DatabaseName ,
169
- sensitivityLabelModel . SchemaName ,
170
- sensitivityLabelModel . TableName ,
171
- sensitivityLabelModel . ColumnName ) ) ;
172
- }
173
-
174
- internal void DisableSensitivityRecommendations ( SqlDatabaseSensitivityClassificationModel model )
175
- {
176
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . DisableSensitivityRecommendation (
177
- model . ResourceGroupName ,
178
- model . ServerName ,
179
- model . DatabaseName ,
180
- sensitivityLabelModel . SchemaName ,
181
- sensitivityLabelModel . TableName ,
182
- sensitivityLabelModel . ColumnName ) ) ;
183
- }
184
-
185
- internal void EnableManagedDatabaseSensitivityRecommendations ( ManagedDatabaseSensitivityClassificationModel model )
186
- {
187
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . EnableManagedDatabaseSensitivityRecommendation (
188
- model . ResourceGroupName ,
189
- model . InstanceName ,
190
- model . DatabaseName ,
191
- sensitivityLabelModel . SchemaName ,
192
- sensitivityLabelModel . TableName ,
193
- sensitivityLabelModel . ColumnName ) ) ;
194
- }
195
-
196
- internal void DisableManagedDatabaseSensitivityRecommendations ( ManagedDatabaseSensitivityClassificationModel model )
197
- {
198
- ModifySensitivityLabels ( model , sensitivityLabelModel => Communicator . DisableManagedDatabaseSensitivityRecommendation (
199
- model . ResourceGroupName ,
200
- model . InstanceName ,
201
- model . DatabaseName ,
202
- sensitivityLabelModel . SchemaName ,
203
- sensitivityLabelModel . TableName ,
204
- sensitivityLabelModel . ColumnName ) ) ;
205
- }
206
-
207
269
private List < SensitivityLabelModel > ToSensitivityLabelModelList ( List < SensitivityLabel > sensitivityLabels )
208
270
{
209
271
return sensitivityLabels . Select ( l => ToSensitivityLabelModel ( l ) ) . ToList ( ) ;
@@ -297,5 +359,14 @@ private static string NullifyStringIfEmpty(string s)
297
359
298
360
return sensitivityLabelRank ;
299
361
}
362
+
363
+ private static IEnumerable < List < T > > SplitList < T > ( List < T > elements )
364
+ {
365
+ const int ListSize = 5000 ;
366
+ for ( int i = 0 ; i < elements . Count ; i += ListSize )
367
+ {
368
+ yield return elements . GetRange ( i , Math . Min ( ListSize , elements . Count - i ) ) ;
369
+ }
370
+ }
300
371
}
301
372
}
0 commit comments