Skip to content

Commit 48cad2d

Browse files
authored
fix(server): check website hosting in bucket deletion, add error handle to tasks; (#1017)
1 parent 6a96add commit 48cad2d

File tree

10 files changed

+173
-73
lines changed

10 files changed

+173
-73
lines changed
Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,65 @@
1-
2-
apiVersion: networking.k8s.io/v1
3-
kind: Ingress
1+
apiVersion: apisix.apache.org/v2
2+
kind: ApisixRoute
43
metadata:
54
name: laf-web-ingress
65
spec:
7-
# apisix-ingress-controller is only interested in Ingress
8-
# resources with the matched ingressClass name, in our case,
9-
# it's apisix.
10-
ingressClassName: apisix
11-
rules:
12-
- host: {{ .Values.domain }}
13-
http:
14-
paths:
15-
- backend:
16-
service:
17-
name: laf-web
18-
port:
19-
number: 80
20-
path: /
21-
pathType: Prefix
22-
- backend:
23-
service:
24-
name: laf-server
25-
port:
26-
number: 3000
27-
path: /v1/
28-
pathType: Prefix
6+
http:
7+
- name: laf-web
8+
match:
9+
hosts:
10+
- { { .Values.domain } }
11+
paths:
12+
- /*
13+
backends:
14+
- serviceName: laf-web
15+
servicePort: 80
16+
plugins:
17+
- name: gzip
18+
enable: true
19+
config:
20+
comp_level: 6
21+
min_length: 100
22+
types:
23+
- text/plain
24+
- text/css
25+
- text/html
26+
- text/xml
27+
- text/javascript
28+
- application/json
29+
- application/x-javascript
30+
- application/javascript
31+
- image/bmp
32+
- image/png
33+
- font/ttf
34+
- font/otf
35+
- font/eot
36+
- name: laf-web-api
37+
match:
38+
hosts:
39+
- { { .Values.domain } }
40+
paths:
41+
- /v1/*
42+
backends:
43+
- serviceName: laf-server
44+
servicePort: 3000
45+
websocket: true
46+
plugins:
47+
- name: gzip
48+
enable: true
49+
config:
50+
comp_level: 6
51+
min_length: 100
52+
types:
53+
- text/plain
54+
- text/css
55+
- text/html
56+
- text/xml
57+
- text/javascript
58+
- application/json
59+
- application/x-javascript
60+
- application/javascript
61+
- image/bmp
62+
- image/png
63+
- font/ttf
64+
- font/otf
65+
- font/eot
Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
---
2-
apiVersion: networking.k8s.io/v1
3-
kind: Ingress
2+
apiVersion: apisix.apache.org/v2
3+
kind: ApisixRoute
44
metadata:
55
name: oss-ingress
66
spec:
7-
# apisix-ingress-controller is only interested in Ingress
8-
# resources with the matched ingressClass name, in our case,
9-
# it's apisix.
10-
ingressClassName: apisix
11-
rules:
12-
- host: {{ .Values.domain }}
13-
http:
14-
paths:
15-
- backend:
16-
service:
17-
name: minio
18-
port:
19-
number: 9000
20-
path: /
21-
pathType: Prefix
7+
http:
8+
- backends:
9+
- serviceName: minio
10+
servicePort: 9000
11+
match:
12+
hosts:
13+
- {{ .Values.domain }}
14+
paths:
15+
- /*
16+
name: laf-oss
17+
plugins:
18+
- config:
19+
comp_level: 5
20+
min_length: 1024
21+
types:
22+
- text/plain
23+
- text/css
24+
- text/html
25+
- text/xml
26+
- text/javascript
27+
- application/json
28+
- application/x-javascript
29+
- application/javascript
30+
- image/bmp
31+
- image/png
32+
- font/ttf
33+
- font/otf
34+
- font/eot
35+
enable: true
36+
name: gzip

deploy/build/images/shim/ImageList

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ docker.io/lafyun/runtime-node-init:latest
22
docker.io/lafyun/runtime-node:latest
33
docker.io/apache/apisix-dashboard:2.13-alpine
44
docker.io/apache/apisix-ingress-controller:1.5.0
5+
quay.io/minio/minio:RELEASE.2023-03-22T06-36-24Z
6+
quay.io/minio/mc:RELEASE.2022-11-07T23-47-39Z

server/src/application/application-task.service.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,19 @@ export class ApplicationTaskService {
5151
}
5252

5353
// Phase `Creating` -> `Created`
54-
this.handleCreatingPhase()
54+
this.handleCreatingPhase().catch((err) => {
55+
this.logger.error(err)
56+
})
5557

5658
// Phase `Deleting` -> `Deleted`
57-
this.handleDeletingPhase()
59+
this.handleDeletingPhase().catch((err) => {
60+
this.logger.error(err)
61+
})
5862

5963
// State `Deleted`
60-
this.handleDeletedState()
64+
this.handleDeletedState().catch((err) => {
65+
this.logger.error(err)
66+
})
6167
}
6268

6369
/**

server/src/gateway/bucket-domain-task.service.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,29 @@ export class BucketDomainTaskService {
2525
}
2626

2727
// Phase `Creating` -> `Created`
28-
this.handleCreatingPhase()
28+
this.handleCreatingPhase().catch((err) => {
29+
this.logger.error(err)
30+
})
2931

3032
// Phase `Deleting` -> `Deleted`
31-
this.handleDeletingPhase()
33+
this.handleDeletingPhase().catch((err) => {
34+
this.logger.error(err)
35+
})
3236

3337
// Phase `Created` -> `Deleting`
34-
this.handleInactiveState()
38+
this.handleInactiveState().catch((err) => {
39+
this.logger.error(err)
40+
})
3541

3642
// Phase `Deleted` -> `Creating`
37-
this.handleActiveState()
43+
this.handleActiveState().catch((err) => {
44+
this.logger.error(err)
45+
})
3846

3947
// Phase `Deleting` -> `Deleted`
40-
this.handleDeletedState()
48+
this.handleDeletedState().catch((err) => {
49+
this.logger.error(err)
50+
})
4151
}
4252

4353
/**

server/src/gateway/runtime-domain-task.service.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,29 @@ export class RuntimeDomainTaskService {
2424
}
2525

2626
// Phase `Creating` -> `Created`
27-
this.handleCreatingPhase()
27+
this.handleCreatingPhase().catch((err) => {
28+
this.logger.error(err)
29+
})
2830

2931
// Phase `Deleting` -> `Deleted`
30-
this.handleDeletingPhase()
32+
this.handleDeletingPhase().catch((err) => {
33+
this.logger.error(err)
34+
})
3135

3236
// Phase `Created` -> `Deleting`
33-
this.handleInactiveState()
37+
this.handleInactiveState().catch((err) => {
38+
this.logger.error(err)
39+
})
3440

3541
// Phase `Deleted` -> `Creating`
36-
this.handleActiveState()
42+
this.handleActiveState().catch((err) => {
43+
this.logger.error(err)
44+
})
3745

3846
// Phase `Deleting` -> `Deleted`
39-
this.handleDeletedState()
47+
this.handleDeletedState().catch((err) => {
48+
this.logger.error(err)
49+
})
4050
}
4151

4252
/**

server/src/gateway/website-task.service.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,29 @@ export class WebsiteTaskService {
3434
}
3535

3636
// Phase `Creating` -> `Created`
37-
this.handleCreatingPhase()
37+
this.handleCreatingPhase().catch((err) => {
38+
this.logger.error(err)
39+
})
3840

3941
// Phase `Deleting` -> `Deleted`
40-
this.handleDeletingPhase()
42+
this.handleDeletingPhase().catch((err) => {
43+
this.logger.error(err)
44+
})
4145

4246
// Phase `Created` -> `Deleting`
43-
this.handleInactiveState()
47+
this.handleInactiveState().catch((err) => {
48+
this.logger.error(err)
49+
})
4450

4551
// Phase `Deleted` -> `Creating`
46-
this.handleActiveState()
52+
this.handleActiveState().catch((err) => {
53+
this.logger.error(err)
54+
})
4755

4856
// Phase `Deleting` -> `Deleted`
49-
this.handleDeletedState()
57+
this.handleDeletedState().catch((err) => {
58+
this.logger.error(err)
59+
})
5060
}
5161

5262
/**

server/src/storage/bucket-task.service.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
import { RegionService } from 'src/region/region.service'
99
import * as assert from 'node:assert'
1010
import { Cron, CronExpression } from '@nestjs/schedule'
11-
import { times } from 'lodash'
1211
import { ServerConfig, TASK_LOCK_INIT_TIME } from 'src/constants'
1312
import { SystemDatabase } from 'src/database/system-database'
1413
import { MinioService } from './minio/minio.service'
@@ -17,7 +16,6 @@ import { BucketDomainService } from 'src/gateway/bucket-domain.service'
1716
@Injectable()
1817
export class BucketTaskService {
1918
readonly lockTimeout = 30 // in second
20-
readonly concurrency = 1 // concurrency count
2119
private readonly logger = new Logger(BucketTaskService.name)
2220

2321
constructor(
@@ -33,19 +31,29 @@ export class BucketTaskService {
3331
}
3432

3533
// Phase `Creating` -> `Created`
36-
times(this.concurrency, () => this.handleCreatingPhase())
34+
this.handleCreatingPhase().catch((err) => {
35+
this.logger.error(err)
36+
})
3737

3838
// Phase `Deleting` -> `Deleted`
39-
times(this.concurrency, () => this.handleDeletingPhase())
39+
this.handleDeletingPhase().catch((err) => {
40+
this.logger.error(err)
41+
})
4042

4143
// Phase `Created` -> `Deleting`
42-
this.handleInactiveState()
44+
this.handleInactiveState().catch((err) => {
45+
this.logger.error(err)
46+
})
4347

4448
// Phase `Deleted` -> `Creating`
45-
this.handleActiveState()
49+
this.handleActiveState().catch((err) => {
50+
this.logger.error(err)
51+
})
4652

4753
// Phase `Deleting` -> `Deleted`
48-
this.handleDeletedState()
54+
this.handleDeletedState().catch((err) => {
55+
this.logger.error(err)
56+
})
4957
}
5058

5159
/**

server/src/storage/bucket.controller.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ export class BucketController {
156156
throw new HttpException('bucket not found', HttpStatus.NOT_FOUND)
157157
}
158158

159+
if (bucket?.websiteHosting) {
160+
return ResponseUtil.error(
161+
'bucket has website hosting enabled, please delete it first',
162+
)
163+
}
164+
159165
const res = await this.bucketService.delete(bucket)
160166
if (!res) {
161167
return ResponseUtil.error('delete bucket failed')

server/src/storage/storage.service.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,9 @@ export class StorageService {
8484
await this.prisma.storageBucket.updateMany({
8585
where: {
8686
appid,
87-
state: {
88-
not: StorageState.Deleted,
89-
},
90-
},
91-
data: {
92-
state: StorageState.Deleted,
87+
state: { not: StorageState.Deleted },
9388
},
89+
data: { state: StorageState.Deleted },
9490
})
9591

9692
return

0 commit comments

Comments
 (0)