Skip to content

Commit

Permalink
Merge pull request #95 from chuntaojun/fix_circuitbreaker_delete
Browse files Browse the repository at this point in the history
fix: 修复前端删除熔断规则最后一条时没有触发熔断规则解绑
  • Loading branch information
tfffffff authored Aug 18, 2022
2 parents 01700f1 + 8dc3a52 commit 68b3d55
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 21 deletions.
59 changes: 38 additions & 21 deletions web/src/polaris/service/detail/circuitBreaker/PageDuck.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
createServiceCircuitBreakerVersion,
releaseServiceCircuitBreaker,
createServiceCircuitBreaker,
unbindServiceCircuitBreaker,
} from './model'
import { takeLatest } from 'redux-saga-catch'
import { put, select, take } from 'redux-saga/effects'
Expand Down Expand Up @@ -134,7 +135,7 @@ export default class ServicePageDuck extends GridPageDuck {
const { types, creators, selector, ducks } = this
yield* this.sagaInitLoad()
yield* super.saga()
yield takeLatest(types.CREATE, function*(action) {
yield takeLatest(types.CREATE, function* (action) {
const {
data: { name, namespace },
circuitBreaker,
Expand Down Expand Up @@ -167,7 +168,7 @@ export default class ServicePageDuck extends GridPageDuck {
}),
)
})
yield takeLatest(types.EDIT, function*(action) {
yield takeLatest(types.EDIT, function* (action) {
const {
data: { name, namespace },
ruleType,
Expand Down Expand Up @@ -200,7 +201,7 @@ export default class ServicePageDuck extends GridPageDuck {
}),
)
})
yield takeLatest(types.REMOVE, function*(action) {
yield takeLatest(types.REMOVE, function* (action) {
const confirm = yield Modal.confirm({
message: `确认删除规则`,
description: '删除后,无法恢复',
Expand All @@ -223,7 +224,7 @@ export default class ServicePageDuck extends GridPageDuck {
yield put(creators.reload())
}
})
yield takeLatest(types.DRAWER_SUBMIT, function*() {
yield takeLatest(types.DRAWER_SUBMIT, function* () {
const {
drawerStatus: { createId, ruleType, ruleIndex, isEdit },
circuitBreaker,
Expand Down Expand Up @@ -272,12 +273,12 @@ export default class ServicePageDuck extends GridPageDuck {
})
yield put(creators.reload())
})
yield takeLatest(ducks.grid.types.FETCH_DONE, function*(action) {
yield takeLatest(ducks.grid.types.FETCH_DONE, function* (action) {
const { circuitBreaker, originData } = action.payload
yield put({ type: types.SET_CIRCUIT_BREAKER, payload: circuitBreaker })
if (originData) yield put({ type: types.SET_ORIGIN_DATA, payload: originData })
})
yield takeLatest(types.RESET_DATA, function*() {
yield takeLatest(types.RESET_DATA, function* () {
const { originData } = selector(yield select())
yield put({ type: types.SET_CIRCUIT_BREAKER, payload: originData })
yield put({
Expand All @@ -286,7 +287,7 @@ export default class ServicePageDuck extends GridPageDuck {
})
yield put(creators.reload())
})
yield takeLatest(types.SUBMIT, function*() {
yield takeLatest(types.SUBMIT, function* () {
const {
originData,
circuitBreaker,
Expand All @@ -299,20 +300,36 @@ export default class ServicePageDuck extends GridPageDuck {
outbounds: circuitBreaker.outbounds,
}
if (originData?.ctime) {
const version = new Date().getTime().toString()
yield createServiceCircuitBreakerVersion([{ ...params, id: originData.id, version, name: service }])
const releaseParams = {
service: {
name: service,
namespace,
},
circuitBreaker: {
name: service,
namespace,
version,
},
if (params.inbounds.length === 0 && params.outbounds.length === 0) {
// 如果出入都没有了,删除熔断规则
yield unbindServiceCircuitBreaker([{
service: {
name: service,
namespace,
}, circuitBreaker: {
id: originData.id,
name: service,
namespace: namespace,
version: originData.version,
}
}])
} else {
const version = new Date().getTime().toString()
// 只是更新熔断规则,直接创建出新的版本并直接 release
yield createServiceCircuitBreakerVersion([{ ...params, id: originData.id, version, name: service }])
const releaseParams = {
service: {
name: service,
namespace,
},
circuitBreaker: {
name: service,
namespace,
version,
},
}
yield releaseServiceCircuitBreaker([releaseParams])
}
yield releaseServiceCircuitBreaker([releaseParams])
} else {
const createResult = yield createServiceCircuitBreaker([{ ...params, owners: 'Polaris', name: service }])
if (createResult.code === 200000) {
Expand Down Expand Up @@ -344,7 +361,7 @@ export default class ServicePageDuck extends GridPageDuck {
})
}

*sagaInitLoad() {}
*sagaInitLoad() { }
async getData(filters: this['Filter']) {
const { page, count, namespace, service, ruleType } = filters
let circuitBreaker = filters.circuitBreaker
Expand Down
43 changes: 43 additions & 0 deletions web/src/polaris/service/detail/circuitBreaker/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,46 @@ export async function releaseServiceCircuitBreaker(params: ReleaseServiceCircuit
})
return res
}

export interface DeleteServiceCircuitBreakerParams {
service: {
name: string // 服务名;必填;string
namespace: string // 命名空间;必填;string
//token: "..."; // 服务token;必填;string
}
circuitBreaker: {
id: string // 规则name;必填;string
name: string // 规则name;必填;string
namespace: string // 规则namespace;必填;string
version: string // 规则version;必填;string;
}
}

export async function deleteServiceCircuitBreaker(params: DeleteServiceCircuitBreakerParams[]) {
const res = await apiRequest<any>({
action: '/naming/v1/circuitbreakers/delete',
data: params,
})
return res
}


export interface UnbindServiceCircuitBreakerParams {
service: {
name: string // 服务名;必填;string
namespace: string // 命名空间;必填;string
//token: "..."; // 服务token;必填;string
}
circuitBreaker: {
id: string // 规则name;必填;string
version: string // 规则version;必填;string;
}
}

export async function unbindServiceCircuitBreaker(params: DeleteServiceCircuitBreakerParams[]) {
const res = await apiRequest<any>({
action: '/naming/v1/circuitbreakers/unbind',
data: params,
})
return res
}

0 comments on commit 68b3d55

Please sign in to comment.