Skip to content

Commit 91f62c8

Browse files
authored
Merge pull request #298 from WeBankPartners/258_validation_of_deleting_ci
#258 Fix the issue of deleting ci
2 parents 1986ac6 + 3bb1b61 commit 91f62c8

5 files changed

Lines changed: 37 additions & 9 deletions

File tree

cmdb-core/src/main/java/com/webank/cmdb/service/CiService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public interface CiService extends CmdbService {
7070

7171
Object cloneCiAsParent(EntityManager entityManager, int ciTypeId, String guid);
7272

73-
List<Map<String, Object>> lookupReferenceByCis(int ciTypeId, String guid);
73+
List<Map<String, Object>> lookupReferenceByCis(int ciTypeId, String guid, boolean checkFinalState);
7474

7575
List<Map<String, Object>> lookupReferenceToCis(int ciTypeId, String guid);
7676

cmdb-core/src/main/java/com/webank/cmdb/service/impl/CiServiceImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public synchronized void reload() {
203203
Map<Integer, List<AdmCiTypeAttr>> referedAttrMap = new HashMap<>();
204204
ciTypes.forEach(ciType -> {
205205
if (!CiStatus.shouldBeLoadedForDynamicEntity(CiStatus.fromCode(ciType.getStatus()))) {
206-
logger.warn("CiType [{}] status is {} , ignore ...");
206+
logger.warn("CiType [{}] status is {} , ignore ...", ciType.getName(), ciType.getStatus());
207207
return;
208208
}
209209

@@ -1200,14 +1200,14 @@ public void delete(int ciTypeId, List<String> ids) {
12001200
public void doDelete(EntityManager entityManager, int ciTypeId, String guid, boolean enableStateTransition) {
12011201
DynamicEntityMeta entityMeta = getDynamicEntityMetaMap().get(ciTypeId);
12021202
Object entityBean = validateCi(ciTypeId, guid, entityMeta, entityManager, ACTION_REMOVAL);
1203-
ciDataInterceptorService.preDelete(ciTypeId, guid, entityMeta);
12041203
if (enableStateTransition) {
1204+
ciDataInterceptorService.preDelete(ciTypeId, guid, true, entityMeta);
12051205
DynamicEntityHolder entityHolder = new DynamicEntityHolder(entityMeta, entityBean);
12061206
this.stateTransEngine.process(entityManager, ciTypeId, guid, StateOperation.Delete.getCode(), null, entityHolder);
12071207
} else {
1208+
ciDataInterceptorService.preDelete(ciTypeId, guid, false, entityMeta);
12081209
entityManager.remove(entityBean);
12091210
}
1210-
//entityManager.flush();
12111211
ciDataInterceptorService.postDelete(ciTypeId, guid, entityMeta);
12121212
}
12131213

@@ -2059,14 +2059,14 @@ public DynamicEntityHolder getCiHolder(int ciTypeId, String guid) {
20592059
}
20602060

20612061
@Override
2062-
public List<Map<String, Object>> lookupReferenceByCis(int ciTypeId, String guid) {
2062+
public List<Map<String, Object>> lookupReferenceByCis(int ciTypeId, String guid, boolean checkFinalState) {
20632063
List<Map<String, Object>> dependentCis = Lists.newLinkedList();
20642064
List<AdmCiTypeAttr> referredAttrs = ciTypeAttrRepository.findByInputTypeAndReferenceId(InputType.Reference.getCode(), ciTypeId);
20652065
referredAttrs.forEach(attr -> {
20662066
List<Map<String, Object>> ciData = queryWithFilters(attr.getCiTypeId(), Lists.newArrayList(new Filter(attr.getPropertyName(), FilterOperator.Equal.getCode(), guid)), false);
20672067
if (ciData != null && ciData.size() > 0) {
20682068
ciData.forEach(data -> {
2069-
if (isFinalStateCi(attr, data)) {
2069+
if (checkFinalState && isFinalStateCi(attr, data)) {
20702070
return;
20712071
};
20722072

cmdb-core/src/main/java/com/webank/cmdb/service/interceptor/CiDataInterceptorService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,8 +637,8 @@ private void handleReferenceAutoFill(DynamicEntityHolder entityHolder, EntityMan
637637
});
638638
}
639639

640-
public void preDelete(int ciTypeId, String guid, DynamicEntityMeta entityMeta) {
641-
List<Map<String, Object>> dependentCis = ciService.lookupReferenceByCis(ciTypeId, guid);
640+
public void preDelete(int ciTypeId, String guid, boolean checkFinalState, DynamicEntityMeta entityMeta) {
641+
List<Map<String, Object>> dependentCis = ciService.lookupReferenceByCis(ciTypeId, guid, checkFinalState);
642642
if (!dependentCis.isEmpty()) {
643643
throw new InvalidArgumentException(String.format("Ci [%s] is referenced by other ci currently, can not be deleted.", guid), dependentCis);
644644
}

cmdb-core/src/main/resources/database/04.cmdb.experience.data.sql

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
SET FOREIGN_KEY_CHECKS=0;
2+
INSERT INTO `adm_sequence` (`id_adm_sequence`, `seq_name`, `current_val`, `increment_val`, `length_limitation`, `left_zero_padding`) VALUES
3+
(25, 'system_design', 14, 1, 8, 'N'),
4+
(26, 'subsys_design', 15, 1, 8, 'N'),
5+
(27, 'unit_design', 21, 1, 8, 'N'),
6+
(28, 'IDC_design', 3, 1, 8, 'N'),
7+
(29, 'zone_design', 7, 1, 8, 'N'),
8+
(30, 'DCN_desgin', 8, 1, 8, 'N'),
9+
(31, 'resource_set_design', 11, 1, 8, 'N'),
10+
(32, 'service_design', 7, 1, 8, 'N'),
11+
(33, 'invoke_design', 9, 1, 8, 'N'),
12+
(34, 'subsys', 11, 1, 8, 'N'),
13+
(35, 'IDC', 21, 1, 8, 'N'),
14+
(36, 'zone', 7, 1, 8, 'N'),
15+
(37, 'DCN', 13, 1, 8, 'N'),
16+
(38, 'resource_set', 13, 1, 8, 'N'),
17+
(39, 'zone_link_design', 8, 1, 8, 'N'),
18+
(40, 'zone_link', 9, 1, 8, 'N'),
19+
(41, 'unit', 10, 1, 8, 'N'),
20+
(42, 'package', 15, 1, 8, 'N'),
21+
(43, 'network_segment', 13, 1, 8, 'N'),
22+
(44, 'ip_addr', 82, 1, 8, 'N'),
23+
(45, 'running_instance', 15, 1, 8, 'N'),
24+
(46, 'host', 3503, 1, 8, 'N'),
25+
(47, 'service', 1, 1, 8, 'N'),
26+
(48, 'invoke', 1, 1, 8, 'N'),
27+
(49, 'invoke_sequence_design', 1, 1, 8, 'N'),
28+
(50, 'block_storage', 5, 1, 8, 'N');
29+
230
INSERT INTO `DCN` (`guid`, `p_guid`, `r_guid`, `updated_by`, `updated_date`, `created_by`, `created_date`, `key_name`, `state`, `fixed_date`, `code`, `description`, `orchestration`, `biz_key`, `dcn_design`, `name`, `zone`) VALUES
331
('0019_0000000001', NULL, '0019_0000000001', 'admin', '2019-07-24 12:26:42', 'admin', '2019-07-24 07:12:44', 'PRD-GZ1-SF-RDCN', 37, NULL, 'RDCN', 'RDCN', NULL, NULL, '0025_0000000001', 'RDCN1', '0017_0000000001'),
432
('0019_0000000005', NULL, '0019_0000000005', 'admin', '2019-07-24 12:26:43', 'admin', '2019-07-24 07:30:50', 'PRD-GZ1-DMZ-DMZ', 37, NULL, 'DMZ', 'DMZ', NULL, NULL, '0025_0000000002', 'DMZ', '0017_0000000004'),

cmdb-core/src/test/java/com/webank/cmdb/service/CiServiceImplLegacyModelTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ public void deleteReferencedCiThenGetException() {
353353
@Transactional
354354
@Test
355355
public void queryReferenceByCis() {
356-
List<Map<String, Object>> cis = ciService.lookupReferenceByCis(2, "0002_0000000001");
356+
List<Map<String, Object>> cis = ciService.lookupReferenceByCis(2, "0002_0000000001", false);
357357
Assert.assertThat(cis.size(), equalTo(13));
358358
}
359359

0 commit comments

Comments
 (0)