Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
apollo
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
apollo
Commits
0c4069f9
Unverified
Commit
0c4069f9
authored
Jul 22, 2018
by
Jason Song
Committed by
GitHub
Jul 22, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1277 from nobodyiam/delete-appnamespace-api
add delete app namespace api
parents
d23e60e1
d1db52ab
Changes
22
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
227 additions
and
60 deletions
+227
-60
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java
...pollo/adminservice/controller/AppNamespaceController.java
+10
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepository.java
...amework/apollo/biz/repository/AppNamespaceRepository.java
+4
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/GrayReleaseRuleRepository.java
...work/apollo/biz/repository/GrayReleaseRuleRepository.java
+0
-3
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java
.../framework/apollo/biz/repository/NamespaceRepository.java
+1
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AdminService.java
.../com/ctrip/framework/apollo/biz/service/AdminService.java
+0
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
...rip/framework/apollo/biz/service/AppNamespaceService.java
+24
-0
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ClusterService.java
...om/ctrip/framework/apollo/biz/service/ClusterService.java
+10
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/GrayReleaseRuleService.java
.../framework/apollo/biz/service/GrayReleaseRuleService.java
+0
-18
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java
.../ctrip/framework/apollo/biz/service/NamespaceService.java
+11
-14
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
...om/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
...amework/apollo/portal/controller/NamespaceController.java
+12
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppInfoChangedListener.java
...mework/apollo/portal/listener/AppInfoChangedListener.java
+0
-17
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppNamespaceDeletionEvent.java
...ork/apollo/portal/listener/AppNamespaceDeletionEvent.java
+17
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/DeletionListener.java
...ip/framework/apollo/portal/listener/DeletionListener.java
+64
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/AppNamespaceRepository.java
...work/apollo/portal/repository/AppNamespaceRepository.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/PermissionRepository.java
...mework/apollo/portal/repository/PermissionRepository.java
+3
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/RoleRepository.java
...ip/framework/apollo/portal/repository/RoleRepository.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
.../framework/apollo/portal/service/AppNamespaceService.java
+24
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
...com/ctrip/framework/apollo/portal/service/AppService.java
+1
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
...rip/framework/apollo/portal/service/NamespaceService.java
+2
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RolePermissionService.java
...ramework/apollo/portal/service/RolePermissionService.java
+5
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultRolePermissionService.java
.../portal/spi/defaultimpl/DefaultRolePermissionService.java
+27
-3
No files found.
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/AppNamespaceController.java
View file @
0c4069f9
...
@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.PathVariable;
...
@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
import
java.util.List
;
...
@@ -46,7 +47,16 @@ public class AppNamespaceController {
...
@@ -46,7 +47,16 @@ public class AppNamespaceController {
entity
=
appNamespaceService
.
createAppNamespace
(
entity
);
entity
=
appNamespaceService
.
createAppNamespace
(
entity
);
return
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
entity
);
return
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
entity
);
}
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces/{namespaceName:.+}"
,
method
=
RequestMethod
.
DELETE
)
public
void
delete
(
@PathVariable
(
"appId"
)
String
appId
,
@PathVariable
(
"namespaceName"
)
String
namespaceName
,
@RequestParam
String
operator
)
{
AppNamespace
entity
=
appNamespaceService
.
findOne
(
appId
,
namespaceName
);
if
(
entity
==
null
)
{
throw
new
BadRequestException
(
"app namespace not found for appId: "
+
appId
+
" namespace: "
+
namespaceName
);
}
appNamespaceService
.
deleteAppNamespace
(
entity
,
operator
);
}
}
@RequestMapping
(
value
=
"/appnamespaces/{publicNamespaceName}/namespaces"
,
method
=
RequestMethod
.
GET
)
@RequestMapping
(
value
=
"/appnamespaces/{publicNamespaceName}/namespaces"
,
method
=
RequestMethod
.
GET
)
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/AppNamespaceRepository.java
View file @
0c4069f9
...
@@ -29,4 +29,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
...
@@ -29,4 +29,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
@Modifying
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?2 WHERE AppId=?1"
)
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?2 WHERE AppId=?1"
)
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?3 WHERE AppId=?1 and Name = ?2"
)
int
delete
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/GrayReleaseRuleRepository.java
View file @
0c4069f9
...
@@ -19,7 +19,4 @@ public interface GrayReleaseRuleRepository extends PagingAndSortingRepository<Gr
...
@@ -19,7 +19,4 @@ public interface GrayReleaseRuleRepository extends PagingAndSortingRepository<Gr
List
<
GrayReleaseRule
>
findFirst500ByIdGreaterThanOrderByIdAsc
(
Long
id
);
List
<
GrayReleaseRule
>
findFirst500ByIdGreaterThanOrderByIdAsc
(
Long
id
);
@Modifying
@Query
(
"UPDATE GrayReleaseRule SET IsDeleted=1, DataChange_LastModifiedBy = ?4 where appId=?1 and clusterName=?2 and namespaceName = ?3"
)
int
batchDelete
(
String
appId
,
String
clusterName
,
String
namespaceName
,
String
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/repository/NamespaceRepository.java
View file @
0c4069f9
...
@@ -19,7 +19,7 @@ public interface NamespaceRepository extends PagingAndSortingRepository<Namespac
...
@@ -19,7 +19,7 @@ public interface NamespaceRepository extends PagingAndSortingRepository<Namespac
@Query
(
"update Namespace set isdeleted=1,DataChange_LastModifiedBy = ?3 where appId=?1 and clusterName=?2"
)
@Query
(
"update Namespace set isdeleted=1,DataChange_LastModifiedBy = ?3 where appId=?1 and clusterName=?2"
)
int
batchDelete
(
String
appId
,
String
clusterName
,
String
operator
);
int
batchDelete
(
String
appId
,
String
clusterName
,
String
operator
);
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
);
List
<
Namespace
>
findByAppIdAndNamespaceName
OrderByIdAsc
(
String
appId
,
String
namespaceName
);
List
<
Namespace
>
findByNamespaceName
(
String
namespaceName
,
Pageable
page
);
List
<
Namespace
>
findByNamespaceName
(
String
namespaceName
,
Pageable
page
);
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AdminService.java
View file @
0c4069f9
...
@@ -2,7 +2,6 @@ package com.ctrip.framework.apollo.biz.service;
...
@@ -2,7 +2,6 @@ package com.ctrip.framework.apollo.biz.service;
import
com.ctrip.framework.apollo.biz.entity.Cluster
;
import
com.ctrip.framework.apollo.biz.entity.Cluster
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.exception.NotFoundException
;
import
com.ctrip.framework.apollo.core.ConfigConsts
;
import
com.ctrip.framework.apollo.core.ConfigConsts
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
View file @
0c4069f9
...
@@ -14,6 +14,8 @@ import com.ctrip.framework.apollo.core.ConfigConsts;
...
@@ -14,6 +14,8 @@ import com.ctrip.framework.apollo.core.ConfigConsts;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -26,6 +28,8 @@ import java.util.Set;
...
@@ -26,6 +28,8 @@ import java.util.Set;
@Service
@Service
public
class
AppNamespaceService
{
public
class
AppNamespaceService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AppNamespaceService
.
class
);
@Autowired
@Autowired
private
AppNamespaceRepository
appNamespaceRepository
;
private
AppNamespaceRepository
appNamespaceRepository
;
@Autowired
@Autowired
...
@@ -142,4 +146,24 @@ public class AppNamespaceService {
...
@@ -142,4 +146,24 @@ public class AppNamespaceService {
public
void
batchDelete
(
String
appId
,
String
operator
)
{
public
void
batchDelete
(
String
appId
,
String
operator
)
{
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
}
}
@Transactional
public
void
deleteAppNamespace
(
AppNamespace
appNamespace
,
String
operator
)
{
String
appId
=
appNamespace
.
getAppId
();
String
namespaceName
=
appNamespace
.
getName
();
logger
.
info
(
"{} is deleting AppNamespace, appId: {}, namespace: {}"
,
operator
,
appId
,
namespaceName
);
// 1. delete namespaces
List
<
Namespace
>
namespaces
=
namespaceService
.
findByAppIdAndNamespaceName
(
appId
,
namespaceName
);
if
(
namespaces
!=
null
)
{
for
(
Namespace
namespace
:
namespaces
)
{
namespaceService
.
deleteNamespace
(
namespace
,
operator
);
}
}
// 2. delete app namespace
appNamespaceRepository
.
delete
(
appId
,
namespaceName
,
operator
);
}
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ClusterService.java
View file @
0c4069f9
...
@@ -138,6 +138,15 @@ public class ClusterService {
...
@@ -138,6 +138,15 @@ public class ClusterService {
}
}
public
List
<
Cluster
>
findClusters
(
String
appId
)
{
public
List
<
Cluster
>
findClusters
(
String
appId
)
{
return
clusterRepository
.
findByAppId
(
appId
);
List
<
Cluster
>
clusters
=
clusterRepository
.
findByAppId
(
appId
);
if
(
clusters
==
null
)
{
return
Collections
.
emptyList
();
}
// to make sure parent cluster is ahead of branch cluster
Collections
.
sort
(
clusters
);
return
clusters
;
}
}
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/GrayReleaseRuleService.java
deleted
100644 → 0
View file @
d23e60e1
package
com
.
ctrip
.
framework
.
apollo
.
biz
.
service
;
import
com.ctrip.framework.apollo.biz.repository.GrayReleaseRuleRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
@Service
public
class
GrayReleaseRuleService
{
@Autowired
private
GrayReleaseRuleRepository
grayReleaseRuleRepository
;
@Transactional
public
void
batchDelete
(
String
appId
,
String
clusterName
,
String
namespaceName
,
String
operator
)
{
grayReleaseRuleRepository
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
}
}
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/NamespaceService.java
View file @
0c4069f9
...
@@ -59,8 +59,6 @@ public class NamespaceService {
...
@@ -59,8 +59,6 @@ public class NamespaceService {
@Autowired
@Autowired
private
ReleaseHistoryService
releaseHistoryService
;
private
ReleaseHistoryService
releaseHistoryService
;
@Autowired
@Autowired
private
GrayReleaseRuleService
grayReleaseRuleService
;
@Autowired
private
NamespaceLockService
namespaceLockService
;
private
NamespaceLockService
namespaceLockService
;
@Autowired
@Autowired
private
InstanceService
instanceService
;
private
InstanceService
instanceService
;
...
@@ -177,7 +175,7 @@ public class NamespaceService {
...
@@ -177,7 +175,7 @@ public class NamespaceService {
}
}
public
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
)
{
public
List
<
Namespace
>
findByAppIdAndNamespaceName
(
String
appId
,
String
namespaceName
)
{
return
namespaceRepository
.
findByAppIdAndNamespaceName
(
appId
,
namespaceName
);
return
namespaceRepository
.
findByAppIdAndNamespaceName
OrderByIdAsc
(
appId
,
namespaceName
);
}
}
public
Namespace
findChildNamespace
(
String
appId
,
String
parentClusterName
,
String
namespaceName
)
{
public
Namespace
findChildNamespace
(
String
appId
,
String
parentClusterName
,
String
namespaceName
)
{
...
@@ -266,9 +264,7 @@ public class NamespaceService {
...
@@ -266,9 +264,7 @@ public class NamespaceService {
commitService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
commitService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
releaseService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
releaseService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
grayReleaseRuleService
.
batchDelete
(
appId
,
clusterName
,
namespace
.
getNamespaceName
(),
operator
);
if
(!
isChildNamespace
(
namespace
))
{
//delete child namespace
//delete child namespace
Namespace
childNamespace
=
findChildNamespace
(
namespace
);
Namespace
childNamespace
=
findChildNamespace
(
namespace
);
if
(
childNamespace
!=
null
)
{
if
(
childNamespace
!=
null
)
{
...
@@ -277,7 +273,6 @@ public class NamespaceService {
...
@@ -277,7 +273,6 @@ public class NamespaceService {
//delete child namespace's releases. Notice: delete child namespace will not delete child namespace's releases
//delete child namespace's releases. Notice: delete child namespace will not delete child namespace's releases
releaseService
.
batchDelete
(
appId
,
childNamespace
.
getClusterName
(),
namespaceName
,
operator
);
releaseService
.
batchDelete
(
appId
,
childNamespace
.
getClusterName
(),
namespaceName
,
operator
);
}
}
}
releaseHistoryService
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
releaseHistoryService
.
batchDelete
(
appId
,
clusterName
,
namespaceName
,
operator
);
...
@@ -397,4 +392,6 @@ public class NamespaceService {
...
@@ -397,4 +392,6 @@ public class NamespaceService {
return
false
;
return
false
;
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
View file @
0c4069f9
...
@@ -132,6 +132,10 @@ public class AdminServiceAPI {
...
@@ -132,6 +132,10 @@ public class AdminServiceAPI {
return
count
==
null
?
0
:
count
;
return
count
==
null
?
0
:
count
;
}
}
public
void
deleteAppNamespace
(
Env
env
,
String
appId
,
String
namespaceName
,
String
operator
)
{
restTemplate
.
delete
(
env
,
"/apps/{appId}/appnamespaces/{namespaceName}?operator={operator}"
,
appId
,
namespaceName
,
operator
);
}
}
}
@Service
@Service
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
View file @
0c4069f9
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
controller
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
controller
;
import
com.ctrip.framework.apollo.portal.listener.AppNamespaceDeletionEvent
;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
...
@@ -132,6 +133,17 @@ public class NamespaceController {
...
@@ -132,6 +133,17 @@ public class NamespaceController {
return
ResponseEntity
.
ok
().
build
();
return
ResponseEntity
.
ok
().
build
();
}
}
@PreAuthorize
(
value
=
"@permissionValidator.isSuperAdmin()"
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces/{namespaceName:.+}"
,
method
=
RequestMethod
.
DELETE
)
public
ResponseEntity
<
Void
>
deleteAppNamespace
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
)
{
AppNamespace
appNamespace
=
appNamespaceService
.
deleteAppNamespace
(
appId
,
namespaceName
);
publisher
.
publishEvent
(
new
AppNamespaceDeletionEvent
(
appNamespace
));
return
ResponseEntity
.
ok
().
build
();
}
@PreAuthorize
(
value
=
"@permissionValidator.hasCreateAppNamespacePermission(#appId, #appNamespace)"
)
@PreAuthorize
(
value
=
"@permissionValidator.hasCreateAppNamespacePermission(#appId, #appNamespace)"
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppInfoChangedListener.java
View file @
0c4069f9
...
@@ -40,21 +40,4 @@ public class AppInfoChangedListener {
...
@@ -40,21 +40,4 @@ public class AppInfoChangedListener {
}
}
}
}
}
}
@EventListener
public
void
onAppDelete
(
AppDeletionEvent
event
)
{
AppDTO
appDTO
=
BeanUtils
.
transfrom
(
AppDTO
.
class
,
event
.
getApp
());
String
appId
=
appDTO
.
getAppId
();
String
operator
=
appDTO
.
getDataChangeLastModifiedBy
();
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
for
(
Env
env
:
envs
)
{
try
{
appAPI
.
deleteApp
(
env
,
appId
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete app failed. Env = {}, AppId = {}"
,
env
,
appId
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete app failed. Env = %s, AppId = %s"
,
env
,
appId
),
e
);
}
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/AppNamespaceDeletionEvent.java
0 → 100644
View file @
0c4069f9
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
listener
;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.google.common.base.Preconditions
;
import
org.springframework.context.ApplicationEvent
;
public
class
AppNamespaceDeletionEvent
extends
ApplicationEvent
{
public
AppNamespaceDeletionEvent
(
Object
source
)
{
super
(
source
);
}
public
AppNamespace
getAppNamespace
()
{
Preconditions
.
checkState
(
source
!=
null
);
return
(
AppNamespace
)
this
.
source
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/listener/DeletionListener.java
0 → 100644
View file @
0c4069f9
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
listener
;
import
com.ctrip.framework.apollo.common.dto.AppDTO
;
import
com.ctrip.framework.apollo.common.dto.AppNamespaceDTO
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.portal.api.AdminServiceAPI
;
import
com.ctrip.framework.apollo.portal.component.PortalSettings
;
import
com.ctrip.framework.apollo.tracer.Tracer
;
import
java.util.List
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.event.EventListener
;
import
org.springframework.stereotype.Component
;
@Component
public
class
DeletionListener
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
DeletionListener
.
class
);
@Autowired
private
PortalSettings
portalSettings
;
@Autowired
private
AdminServiceAPI
.
AppAPI
appAPI
;
@Autowired
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
@EventListener
public
void
onAppDeletionEvent
(
AppDeletionEvent
event
)
{
AppDTO
appDTO
=
BeanUtils
.
transfrom
(
AppDTO
.
class
,
event
.
getApp
());
String
appId
=
appDTO
.
getAppId
();
String
operator
=
appDTO
.
getDataChangeLastModifiedBy
();
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
for
(
Env
env
:
envs
)
{
try
{
appAPI
.
deleteApp
(
env
,
appId
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete app failed. Env = {}, AppId = {}"
,
env
,
appId
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete app failed. Env = %s, AppId = %s"
,
env
,
appId
),
e
);
}
}
}
@EventListener
public
void
onAppNamespaceDeletionEvent
(
AppNamespaceDeletionEvent
event
)
{
AppNamespaceDTO
appNamespace
=
BeanUtils
.
transfrom
(
AppNamespaceDTO
.
class
,
event
.
getAppNamespace
());
List
<
Env
>
envs
=
portalSettings
.
getActiveEnvs
();
String
appId
=
appNamespace
.
getAppId
();
String
namespaceName
=
appNamespace
.
getName
();
String
operator
=
appNamespace
.
getDataChangeLastModifiedBy
();
for
(
Env
env
:
envs
)
{
try
{
namespaceAPI
.
deleteAppNamespace
(
env
,
appId
,
namespaceName
,
operator
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"Delete appNamespace failed. appId = {}, namespace = {}, env = {}"
,
appId
,
namespaceName
,
env
,
e
);
Tracer
.
logError
(
String
.
format
(
"Delete appNamespace failed. appId = %s, namespace = %s, env = %s"
,
appId
,
namespaceName
,
env
),
e
);
}
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/AppNamespaceRepository.java
View file @
0c4069f9
...
@@ -19,4 +19,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
...
@@ -19,4 +19,8 @@ public interface AppNamespaceRepository extends PagingAndSortingRepository<AppNa
@Modifying
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy=?2 WHERE AppId=?1"
)
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy=?2 WHERE AppId=?1"
)
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
int
batchDeleteByAppId
(
String
appId
,
String
operator
);
@Modifying
@Query
(
"UPDATE AppNamespace SET IsDeleted=1,DataChange_LastModifiedBy = ?3 WHERE AppId=?1 and Name = ?2"
)
int
delete
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/PermissionRepository.java
View file @
0c4069f9
...
@@ -28,6 +28,9 @@ public interface PermissionRepository extends PagingAndSortingRepository<Permiss
...
@@ -28,6 +28,9 @@ public interface PermissionRepository extends PagingAndSortingRepository<Permiss
@Query
(
"SELECT p.id from Permission p where p.targetId = ?1 or p.targetId like CONCAT(?1, '+%'))"
)
@Query
(
"SELECT p.id from Permission p where p.targetId = ?1 or p.targetId like CONCAT(?1, '+%'))"
)
List
<
Long
>
findPermissionIdsByAppId
(
String
appId
);
List
<
Long
>
findPermissionIdsByAppId
(
String
appId
);
@Query
(
"SELECT p.id from Permission p where p.targetId = CONCAT(?1, '+', ?2)"
)
List
<
Long
>
findPermissionIdsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
);
@Modifying
@Modifying
@Query
(
"UPDATE Permission SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
@Query
(
"UPDATE Permission SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
Integer
batchDelete
(
List
<
Long
>
permissionIds
,
String
operator
);
Integer
batchDelete
(
List
<
Long
>
permissionIds
,
String
operator
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/repository/RoleRepository.java
View file @
0c4069f9
...
@@ -22,6 +22,10 @@ public interface RoleRepository extends PagingAndSortingRepository<Role, Long> {
...
@@ -22,6 +22,10 @@ public interface RoleRepository extends PagingAndSortingRepository<Role, Long> {
+
"OR r.roleName like CONCAT('ReleaseNamespace+', ?1, '+%'))"
)
+
"OR r.roleName like CONCAT('ReleaseNamespace+', ?1, '+%'))"
)
List
<
Long
>
findRoleIdsByAppId
(
String
appId
);
List
<
Long
>
findRoleIdsByAppId
(
String
appId
);
@Query
(
"SELECT r.id from Role r where (r.roleName = CONCAT('ModifyNamespace+', ?1, '+', ?2) "
+
"OR r.roleName = CONCAT('ReleaseNamespace+', ?1, '+', ?2))"
)
List
<
Long
>
findRoleIdsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
);
@Modifying
@Modifying
@Query
(
"UPDATE Role SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
@Query
(
"UPDATE Role SET IsDeleted=1, DataChange_LastModifiedBy = ?2 WHERE Id in ?1"
)
Integer
batchDelete
(
List
<
Long
>
roleIds
,
String
operator
);
Integer
batchDelete
(
List
<
Long
>
roleIds
,
String
operator
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java
View file @
0c4069f9
...
@@ -27,6 +27,8 @@ public class AppNamespaceService {
...
@@ -27,6 +27,8 @@ public class AppNamespaceService {
private
RoleInitializationService
roleInitializationService
;
private
RoleInitializationService
roleInitializationService
;
@Autowired
@Autowired
private
AppService
appService
;
private
AppService
appService
;
@Autowired
private
RolePermissionService
rolePermissionService
;
/**
/**
* 公共的app ns,能被其它项目关联到的app ns
* 公共的app ns,能被其它项目关联到的app ns
...
@@ -118,6 +120,28 @@ public class AppNamespaceService {
...
@@ -118,6 +120,28 @@ public class AppNamespaceService {
return
createdAppNamespace
;
return
createdAppNamespace
;
}
}
@Transactional
public
AppNamespace
deleteAppNamespace
(
String
appId
,
String
namespaceName
)
{
AppNamespace
appNamespace
=
appNamespaceRepository
.
findByAppIdAndName
(
appId
,
namespaceName
);
if
(
appNamespace
==
null
)
{
throw
new
BadRequestException
(
String
.
format
(
"AppNamespace not exists. AppId = %s, NamespaceName = %s"
,
appId
,
namespaceName
));
}
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
// this operator is passed to com.ctrip.framework.apollo.portal.listener.DeletionListener.onAppNamespaceDeletionEvent
appNamespace
.
setDataChangeLastModifiedBy
(
operator
);
// delete app namespace in portal db
appNamespaceRepository
.
delete
(
appId
,
namespaceName
,
operator
);
// delete Permission and Role related data
rolePermissionService
.
deleteRolePermissionsByAppIdAndNamespace
(
appId
,
namespaceName
,
operator
);
return
appNamespace
;
}
public
void
batchDeleteByAppId
(
String
appId
,
String
operator
)
{
public
void
batchDeleteByAppId
(
String
appId
,
String
operator
)
{
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
appNamespaceRepository
.
batchDeleteByAppId
(
appId
,
operator
);
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
View file @
0c4069f9
...
@@ -151,7 +151,7 @@ public class AppService {
...
@@ -151,7 +151,7 @@ public class AppService {
}
}
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
String
operator
=
userInfoHolder
.
getUser
().
getUserId
();
//this operator is passed to com.ctrip.framework.apollo.portal.listener.
AppInfoChangedListener.onAppDelete
//this operator is passed to com.ctrip.framework.apollo.portal.listener.
DeletionListener.onAppDeletionEvent
managedApp
.
setDataChangeLastModifiedBy
(
operator
);
managedApp
.
setDataChangeLastModifiedBy
(
operator
);
//删除portal数据库中的app
//删除portal数据库中的app
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
View file @
0c4069f9
...
@@ -238,8 +238,9 @@ public class NamespaceService {
...
@@ -238,8 +238,9 @@ public class NamespaceService {
String
format
;
String
format
;
boolean
isPublic
;
boolean
isPublic
;
if
(
appNamespace
==
null
)
{
if
(
appNamespace
==
null
)
{
//dirty data
format
=
ConfigFileFormat
.
Properties
.
getValue
();
format
=
ConfigFileFormat
.
Properties
.
getValue
();
isPublic
=
false
;
isPublic
=
true
;
// set to true, because public namespace allowed to delete by user
}
else
{
}
else
{
format
=
appNamespace
.
getFormat
();
format
=
appNamespace
.
getFormat
();
isPublic
=
appNamespace
.
isPublic
();
isPublic
=
appNamespace
.
isPublic
();
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RolePermissionService.java
View file @
0c4069f9
...
@@ -60,4 +60,9 @@ public interface RolePermissionService {
...
@@ -60,4 +60,9 @@ public interface RolePermissionService {
* delete permissions when delete app.
* delete permissions when delete app.
*/
*/
public
void
deleteRolePermissionsByAppId
(
String
appId
,
String
operator
);
public
void
deleteRolePermissionsByAppId
(
String
appId
,
String
operator
);
/**
* delete permissions when delete app namespace.
*/
public
void
deleteRolePermissionsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
,
String
operator
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/defaultimpl/DefaultRolePermissionService.java
View file @
0c4069f9
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
spi
.
defaultimpl
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
spi
.
defaultimpl
;
import
com.ctrip.framework.apollo.common.entity.BaseEntity
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRoleRepository
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRoleRepository
;
import
com.ctrip.framework.apollo.portal.component.config.PortalConfig
;
import
com.ctrip.framework.apollo.portal.component.config.PortalConfig
;
import
com.ctrip.framework.apollo.portal.entity.bo.UserInfo
;
import
com.ctrip.framework.apollo.portal.entity.bo.UserInfo
;
...
@@ -18,8 +17,6 @@ import com.google.common.collect.FluentIterable;
...
@@ -18,8 +17,6 @@ import com.google.common.collect.FluentIterable;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.HashMultimap
;
import
com.google.common.collect.Multimap
;
import
com.google.common.collect.Multimap
;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
...
@@ -251,4 +248,31 @@ public class DefaultRolePermissionService implements RolePermissionService {
...
@@ -251,4 +248,31 @@ public class DefaultRolePermissionService implements RolePermissionService {
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
}
}
}
}
@Transactional
@Override
public
void
deleteRolePermissionsByAppIdAndNamespace
(
String
appId
,
String
namespaceName
,
String
operator
)
{
List
<
Long
>
permissionIds
=
permissionRepository
.
findPermissionIdsByAppIdAndNamespace
(
appId
,
namespaceName
);
if
(!
permissionIds
.
isEmpty
())
{
// 1. delete Permission
permissionRepository
.
batchDelete
(
permissionIds
,
operator
);
// 2. delete Role Permission
rolePermissionRepository
.
batchDeleteByPermissionIds
(
permissionIds
,
operator
);
}
List
<
Long
>
roleIds
=
roleRepository
.
findRoleIdsByAppIdAndNamespace
(
appId
,
namespaceName
);
if
(!
roleIds
.
isEmpty
())
{
// 3. delete Role
roleRepository
.
batchDelete
(
roleIds
,
operator
);
// 4. delete User Role
userRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
// 5. delete Consumer Role
consumerRoleRepository
.
batchDeleteByRoleIds
(
roleIds
,
operator
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment