51
51
import com .alibaba .nacos .config .server .service .ConfigMigrateService ;
52
52
import com .alibaba .nacos .config .server .service .ConfigOperationService ;
53
53
import com .alibaba .nacos .config .server .service .listener .ConfigListenerStateDelegate ;
54
- import com .alibaba .nacos .config .server .service .repository .ConfigInfoBetaPersistService ;
55
54
import com .alibaba .nacos .config .server .service .repository .ConfigInfoGrayPersistService ;
56
55
import com .alibaba .nacos .config .server .service .repository .ConfigInfoPersistService ;
57
56
import com .alibaba .nacos .config .server .service .trace .ConfigTraceService ;
113
112
@ RequestMapping (Constants .CONFIG_ADMIN_V3_PATH )
114
113
@ ExtractorManager .Extractor (httpExtractor = ConfigDefaultHttpParamExtractor .class )
115
114
public class ConfigControllerV3 {
116
-
115
+
117
116
private static final Logger LOGGER = LoggerFactory .getLogger (ConfigControllerV3 .class );
118
-
117
+
119
118
private static final String EXPORT_CONFIG_FILE_NAME = "nacos_config_export_" ;
120
-
119
+
121
120
private static final String EXPORT_CONFIG_FILE_NAME_EXT = ".zip" ;
122
-
121
+
123
122
private static final String EXPORT_CONFIG_FILE_NAME_DATE_FORMAT = "yyyyMMddHHmmss" ;
124
-
123
+
125
124
private final ConfigOperationService configOperationService ;
126
-
125
+
127
126
private final ConfigInfoPersistService configInfoPersistService ;
128
-
127
+
129
128
private final ConfigDetailService configDetailService ;
130
-
129
+
131
130
private final ConfigInfoGrayPersistService configInfoGrayPersistService ;
132
-
133
- private final ConfigInfoBetaPersistService configInfoBetaPersistService ;
134
-
131
+
135
132
private final NamespacePersistService namespacePersistService ;
136
-
133
+
137
134
private final ConfigListenerStateDelegate configListenerStateDelegate ;
138
-
135
+
139
136
private final ConfigMigrateService configMigrateService ;
140
137
141
138
/**
142
139
* Flag to indicate if the table `config_info_beta` exists, which means the old version of table schema is used.
143
140
*/
144
141
private boolean oldTableVersion ;
145
-
142
+
146
143
public ConfigControllerV3 (ConfigOperationService configOperationService ,
147
144
ConfigInfoPersistService configInfoPersistService , ConfigDetailService configDetailService ,
148
145
ConfigInfoGrayPersistService configInfoGrayPersistService ,
149
- ConfigInfoBetaPersistService configInfoBetaPersistService , NamespacePersistService namespacePersistService ,
146
+ NamespacePersistService namespacePersistService ,
150
147
ConfigListenerStateDelegate configListenerStateDelegate , ConfigMigrateService configMigrateService ) {
151
148
this .configOperationService = configOperationService ;
152
149
this .configInfoPersistService = configInfoPersistService ;
153
150
this .configDetailService = configDetailService ;
154
151
this .configInfoGrayPersistService = configInfoGrayPersistService ;
155
- this .configInfoBetaPersistService = configInfoBetaPersistService ;
156
152
this .namespacePersistService = namespacePersistService ;
157
153
this .configListenerStateDelegate = configListenerStateDelegate ;
158
154
this .configMigrateService = configMigrateService ;
159
155
this .oldTableVersion = namespacePersistService .isExistTable ("config_info_beta" );
160
156
}
161
-
157
+
162
158
/**
163
159
* Query configuration.
164
160
*/
@@ -185,7 +181,7 @@ public Result<ConfigDetailInfo> getConfig(ConfigFormV3 configForm) throws NacosE
185
181
ConfigDetailInfo result = ResponseUtil .transferToConfigDetailInfo (configAllInfo );
186
182
return Result .success (result );
187
183
}
188
-
184
+
189
185
/**
190
186
* Publish configuration.
191
187
*/
@@ -197,19 +193,19 @@ public Result<Boolean> publishConfig(HttpServletRequest request, ConfigFormV3 co
197
193
configForm .validateWithContent ();
198
194
final boolean namespaceTransferred = NamespaceUtil .isNeedTransferNamespace (configForm .getNamespaceId ());
199
195
configForm .setNamespaceId (NamespaceUtil .processNamespaceParameter (configForm .getNamespaceId ()));
200
-
196
+
201
197
// check param
202
198
ParamUtils .checkParam (configForm .getDataId (), configForm .getGroup (), "datumId" , configForm .getContent ());
203
199
ParamUtils .checkParamV2 (configForm .getTag ());
204
-
200
+
205
201
if (StringUtils .isBlank (configForm .getSrcUser ())) {
206
202
configForm .setSrcUser (RequestUtil .getSrcUserName (request ));
207
203
}
208
-
204
+
209
205
if (!ConfigType .isValidType (configForm .getType ())) {
210
206
configForm .setType (ConfigType .getDefaultType ().getType ());
211
207
}
212
-
208
+
213
209
String encryptedDataKeyFinal = configForm .getEncryptedDataKey ();
214
210
if (StringUtils .isBlank (encryptedDataKeyFinal )) {
215
211
// encrypted
@@ -218,18 +214,18 @@ public Result<Boolean> publishConfig(HttpServletRequest request, ConfigFormV3 co
218
214
configForm .setContent (pair .getSecond ());
219
215
encryptedDataKeyFinal = pair .getFirst ();
220
216
}
221
-
217
+
222
218
ConfigRequestInfo configRequestInfo = new ConfigRequestInfo ();
223
219
configRequestInfo .setSrcIp (RequestUtil .getRemoteIp (request ));
224
220
configRequestInfo .setRequestIpApp (RequestUtil .getAppName (request ));
225
221
configRequestInfo .setBetaIps (request .getHeader ("betaIps" ));
226
222
configRequestInfo .setCasMd5 (request .getHeader ("casMd5" ));
227
223
configRequestInfo .setNamespaceTransferred (namespaceTransferred );
228
-
224
+
229
225
return Result .success (
230
226
configOperationService .publishConfig (configForm , configRequestInfo , encryptedDataKeyFinal ));
231
227
}
232
-
228
+
233
229
/**
234
230
* Delete configuration.
235
231
*/
@@ -241,15 +237,15 @@ public Result<Boolean> deleteConfig(HttpServletRequest request, ConfigFormV3 con
241
237
String namespaceId = NamespaceUtil .processNamespaceParameter (configForm .getNamespaceId ());
242
238
String tag = configForm .getTag ();
243
239
ParamUtils .checkParamV2 (tag );
244
-
240
+
245
241
String clientIp = getRemoteIp (request );
246
242
String srcUser = RequestUtil .getSrcUserName (request );
247
-
243
+
248
244
return Result .success (
249
245
configOperationService .deleteConfig (configForm .getDataId (), configForm .getGroupName (), namespaceId , tag ,
250
246
clientIp , srcUser , Constants .HTTP ));
251
247
}
252
-
248
+
253
249
/**
254
250
* Batch delete configuration by ids.
255
251
*/
@@ -274,7 +270,7 @@ public Result<Boolean> deleteConfigs(HttpServletRequest request, @RequestParam(v
274
270
return Result .failure (ErrorCode .SERVER_ERROR );
275
271
}
276
272
}
277
-
273
+
278
274
/**
279
275
* Subscribe to configured client information.
280
276
*/
@@ -289,7 +285,7 @@ public Result<ConfigListenerInfo> getListeners(ConfigFormV3 configForm, Aggregat
289
285
configListenerStateDelegate .getListenerState (configForm .getDataId (), configForm .getGroupName (),
290
286
namespaceId , aggregationForm .isAggregation ()));
291
287
}
292
-
288
+
293
289
/**
294
290
* List or Search config by config condition.
295
291
*
@@ -325,7 +321,7 @@ public Result<Page<ConfigBasicInfo>> list(ConfigFormV3 configForm, PageForm page
325
321
String namespaceId = NamespaceUtil .processNamespaceParameter (configForm .getNamespaceId ());
326
322
String dataId = configForm .getDataId ();
327
323
String groupName = configForm .getGroupName ();
328
-
324
+
329
325
Page <ConfigInfo > configInfoPage = configDetailService .findConfigInfoPage (search , pageNo , pageSize , dataId ,
330
326
groupName , namespaceId , configAdvanceInfo );
331
327
Page <ConfigBasicInfo > result = new Page <>();
@@ -336,7 +332,7 @@ public Result<Page<ConfigBasicInfo>> list(ConfigFormV3 configForm, PageForm page
336
332
.collect (Collectors .toList ()));
337
333
return Result .success (result );
338
334
}
339
-
335
+
340
336
/**
341
337
* Execute to remove beta operation.
342
338
*/
@@ -359,19 +355,19 @@ public Result<Boolean> stopBeta(HttpServletRequest httpServletRequest, ConfigFor
359
355
LOGGER .error ("remove beta data error" , e );
360
356
return Result .failure (ErrorCode .SERVER_ERROR .getCode (), "remove beta data error" , false );
361
357
}
362
-
358
+
363
359
ConfigTraceService .logPersistenceEvent (dataId , groupName , namespaceId , requestIpApp , System .currentTimeMillis (),
364
360
remoteIp , ConfigTraceService .PERSISTENCE_EVENT_BETA , ConfigTraceService .PERSISTENCE_TYPE_REMOVE , null );
365
361
if (PropertyUtil .isGrayCompatibleModel () && oldTableVersion ) {
366
- configInfoBetaPersistService .removeConfigInfo4Beta (dataId , groupName , namespaceId );
362
+ // configInfoBetaPersistService.removeConfigInfo4Beta(dataId, groupName, namespaceId); // Removed
367
363
}
368
364
ConfigChangePublisher .notifyConfigChange (
369
365
new ConfigDataChangeEvent (dataId , groupName , namespaceId , BetaGrayRule .TYPE_BETA ,
370
366
System .currentTimeMillis ()));
371
-
367
+
372
368
return Result .success (true );
373
369
}
374
-
370
+
375
371
/**
376
372
* Execute to query beta operation.
377
373
*/
@@ -396,7 +392,7 @@ public Result<ConfigGrayInfo> queryBeta(ConfigFormV3 configForm) throws NacosApi
396
392
"Config is not in beta." );
397
393
}
398
394
}
399
-
395
+
400
396
/**
401
397
* Execute import and publish config operation.
402
398
*/
@@ -411,7 +407,7 @@ public Result<Map<String, Object>> importAndPublishConfig(HttpServletRequest req
411
407
if (Objects .isNull (file )) {
412
408
return Result .failure (ErrorCode .DATA_EMPTY , failedData );
413
409
}
414
-
410
+
415
411
namespaceId = NamespaceUtil .processNamespaceParameter (namespaceId );
416
412
if (StringUtils .isNotBlank (namespaceId ) && !NamespaceUtil .isDefaultNamespaceId (namespaceId )
417
413
&& namespacePersistService .tenantInfoCountByTenantId (namespaceId ) <= 0 ) {
@@ -435,7 +431,7 @@ public Result<Map<String, Object>> importAndPublishConfig(HttpServletRequest req
435
431
LOGGER .error ("parsing data failed" , e );
436
432
return Result .failure (ErrorCode .PARSING_DATA_FAILED , failedData );
437
433
}
438
-
434
+
439
435
if (CollectionUtils .isEmpty (configInfoList )) {
440
436
failedData .put ("succCount" , 0 );
441
437
return Result .failure (ErrorCode .DATA_EMPTY , failedData );
@@ -459,10 +455,10 @@ public Result<Map<String, Object>> importAndPublishConfig(HttpServletRequest req
459
455
saveResult .put ("unrecognizedCount" , unrecognizedList .size ());
460
456
saveResult .put ("unrecognizedData" , unrecognizedList );
461
457
}
462
-
458
+
463
459
return Result .success (saveResult );
464
460
}
465
-
461
+
466
462
/**
467
463
* Import config add .metadata.yml file.
468
464
*/
@@ -471,7 +467,7 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
471
467
ZipUtils .ZipItem metaDataItem = unziped .getMetaDataItem ();
472
468
String metaData = metaDataItem .getItemData ();
473
469
Map <String , Object > failedData = new HashMap <>(4 );
474
-
470
+
475
471
ConfigMetadata configMetadata = YamlParserUtil .loadObject (metaData , ConfigMetadata .class );
476
472
if (configMetadata == null || CollectionUtils .isEmpty (configMetadata .getMetadata ())) {
477
473
failedData .put ("succCount" , 0 );
@@ -486,12 +482,12 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
486
482
return Result .failure (ErrorCode .METADATA_ILLEGAL , failedData );
487
483
}
488
484
}
489
-
485
+
490
486
List <ZipUtils .ZipItem > zipItemList = unziped .getZipItemList ();
491
487
Set <String > metaDataKeys = configExportItems .stream ()
492
488
.map (metaItem -> GroupKey .getKey (metaItem .getDataId (), metaItem .getGroup ()))
493
489
.collect (Collectors .toSet ());
494
-
490
+
495
491
Map <String , String > configContentMap = new HashMap <>(zipItemList .size ());
496
492
int itemNameLength = 2 ;
497
493
zipItemList .forEach (item -> {
@@ -503,7 +499,7 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
503
499
unrecognizedList .add (unrecognizedItem );
504
500
return ;
505
501
}
506
-
502
+
507
503
String group = groupAdnDataId [0 ];
508
504
String dataId = groupAdnDataId [1 ];
509
505
String key = GroupKey .getKey (dataId , group );
@@ -517,7 +513,7 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
517
513
String itemData = item .getItemData ();
518
514
configContentMap .put (key , itemData );
519
515
});
520
-
516
+
521
517
for (ConfigMetadata .ConfigExportItem configExportItem : configExportItems ) {
522
518
String dataId = configExportItem .getDataId ();
523
519
String group = configExportItem .getGroup ();
@@ -532,7 +528,7 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
532
528
// encrypted
533
529
Pair <String , String > pair = EncryptionHandler .encryptHandler (dataId , content );
534
530
content = pair .getSecond ();
535
-
531
+
536
532
ConfigAllInfo ci = new ConfigAllInfo ();
537
533
ci .setGroup (group );
538
534
ci .setDataId (dataId );
@@ -545,10 +541,10 @@ private Result<Map<String, Object>> parseImportDataV2(String srcUser, ZipUtils.U
545
541
ci .setCreateUser (srcUser );
546
542
configInfoList .add (ci );
547
543
}
548
-
544
+
549
545
return null ;
550
546
}
551
-
547
+
552
548
/**
553
549
* Export config add metadata.yml file record config metadata.
554
550
*/
@@ -585,10 +581,10 @@ public ResponseEntity<byte[]> exportConfig(ConfigFormV3 configForm,
585
581
EXPORT_CONFIG_FILE_NAME + DateFormatUtils .format (new Date (), EXPORT_CONFIG_FILE_NAME_DATE_FORMAT )
586
582
+ EXPORT_CONFIG_FILE_NAME_EXT ;
587
583
headers .add ("Content-Disposition" , "attachment;filename=" + fileName );
588
-
584
+
589
585
return new ResponseEntity <>(ZipUtils .zip (zipItemList ), headers , HttpStatus .OK );
590
586
}
591
-
587
+
592
588
/**
593
589
* Execute clone config operation.
594
590
*/
@@ -604,31 +600,31 @@ public Result<Map<String, Object>> cloneConfig(HttpServletRequest request,
604
600
return Result .failure (ErrorCode .NO_SELECTED_CONFIG , failedData );
605
601
}
606
602
cloneInfos .removeAll (Collections .singleton (null ));
607
-
603
+
608
604
namespaceId = NamespaceUtil .processNamespaceParameter (namespaceId );
609
605
if (StringUtils .isNotBlank (namespaceId ) && !NamespaceUtil .isDefaultNamespaceId (namespaceId )
610
606
&& namespacePersistService .tenantInfoCountByTenantId (namespaceId ) <= 0 ) {
611
607
failedData .put ("succCount" , 0 );
612
608
return Result .failure (ErrorCode .NAMESPACE_NOT_EXIST , failedData );
613
609
}
614
-
610
+
615
611
List <Long > idList = new ArrayList <>(cloneInfos .size ());
616
612
Map <Long , ConfigCloneInfo > configBeansMap = cloneInfos .stream ()
617
613
.collect (Collectors .toMap (ConfigCloneInfo ::getConfigId , cfg -> {
618
614
idList .add (cfg .getConfigId ());
619
615
return cfg ;
620
616
}, (k1 , k2 ) -> k1 ));
621
-
617
+
622
618
List <ConfigAllInfo > queryedDataList = configInfoPersistService .findAllConfigInfo4Export (null , null , null , null ,
623
619
idList );
624
-
620
+
625
621
if (queryedDataList == null || queryedDataList .isEmpty ()) {
626
622
failedData .put ("succCount" , 0 );
627
623
return Result .failure (ErrorCode .DATA_EMPTY , failedData );
628
624
}
629
-
625
+
630
626
List <ConfigAllInfo > configInfoList4Clone = new ArrayList <>(queryedDataList .size ());
631
-
627
+
632
628
for (ConfigAllInfo ci : queryedDataList ) {
633
629
ConfigCloneInfo paramBean = configBeansMap .get (ci .getId ());
634
630
ConfigAllInfo ci4save = new ConfigAllInfo ();
@@ -664,7 +660,7 @@ public Result<Map<String, Object>> cloneConfig(HttpServletRequest request,
664
660
ConfigTraceService .PERSISTENCE_EVENT , ConfigTraceService .PERSISTENCE_TYPE_PUB ,
665
661
configInfo .getContent ());
666
662
}
667
-
663
+
668
664
return Result .success (saveResult );
669
665
}
670
- }
666
+ }
0 commit comments