Skip to content

Commit cda2c5f

Browse files
authored
Merge pull request #88 from stelin/main
Fixed bug
2 parents 87822a2 + d774224 commit cda2c5f

File tree

37 files changed

+581
-135
lines changed

37 files changed

+581
-135
lines changed

openjob-common/src/main/java/io/openjob/common/util/IpUtil.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.net.Inet6Address;
66
import java.net.InetAddress;
77
import java.net.NetworkInterface;
8+
import java.net.UnknownHostException;
89
import java.util.ArrayList;
910
import java.util.Enumeration;
1011
import java.util.Iterator;
@@ -90,6 +91,17 @@ public static String getLocalAddress() {
9091
}
9192
}
9293

94+
/**
95+
* Get ip by host
96+
*
97+
* @param host host
98+
* @return String
99+
* @throws UnknownHostException UnknownHostException
100+
*/
101+
public static String getIpByHost(String host) throws UnknownHostException {
102+
return InetAddress.getByName(host).getHostAddress();
103+
}
104+
93105
/**
94106
* Normalize address.
95107
*

openjob-common/src/test/java/io/openjob/common/util/IpUtilTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package io.openjob.common.util;
22

3+
import org.checkerframework.checker.units.qual.A;
34
import org.junit.jupiter.api.Assertions;
45
import org.junit.jupiter.api.Test;
56

7+
import java.net.InetAddress;
8+
import java.net.UnknownHostException;
9+
610
/**
711
* @author stelin swoft@qq.com
812
* @since 1.0.0
@@ -16,4 +20,22 @@ public void testGetLocalIp() {
1620
String formatAddress = IpUtil.getFormatAddress();
1721
Assertions.assertNotNull(formatAddress);
1822
}
23+
24+
@Test
25+
public void testGetIpByHost() throws UnknownHostException {
26+
String ip = IpUtil.getIpByHost("localhost");
27+
Assertions.assertEquals(ip, "127.0.0.1");
28+
29+
String ip2 = IpUtil.getIpByHost("127.0.0.1");
30+
Assertions.assertEquals(ip2, "127.0.0.1");
31+
32+
String ip3 = IpUtil.getIpByHost("github.com");
33+
Assertions.assertNotNull(ip3);
34+
35+
String ip4 = IpUtil.getIpByHost("20.205.243.166");
36+
Assertions.assertEquals(ip4, "20.205.243.166");
37+
38+
String ip5 = IpUtil.getIpByHost("172.20.1.166");
39+
Assertions.assertEquals(ip5, "172.20.1.166");
40+
}
1941
}

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/constant/CodeEnum.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,37 @@
55
import lombok.Getter;
66

77
/**
8-
* user: 100+
9-
* namespace: 200+
10-
* application: 300+
11-
* job: 400+
12-
* delay: 500+
8+
* User: 100+
9+
* Namespace: 200+
10+
* Application: 300+
11+
* Job: 400+
12+
* Delay: 500+
1313
*
1414
* @author stelin swoft@qq.com
1515
* @since 1.0.0
1616
*/
1717
@Getter
1818
@AllArgsConstructor
1919
public enum CodeEnum implements CodeExceptionAssert {
20+
// Code list
21+
USER_EXIST(100, "User is exist!"),
2022

21-
/**
22-
* App name not exist
23-
*/
24-
NAME_EXIST(100, "App name must be globally unique!"),
23+
// Namespace
24+
NAMESPACE_DELETE_INVALID(200, "Namespace can not be delete!"),
25+
26+
// Application
27+
APP_NAME_EXIST(300, "App name must be globally unique!"),
28+
APP_DELETE_INVALID(301, "Application can not be deleted!"),
29+
30+
// Job
31+
TIME_EXPRESSION_INVALID(400, "Time expression is invalid"),
32+
JOB_DELETE_INVALID(401, "Job can not be deleted!"),
33+
34+
// Delay
35+
DELAY_TOPIC_EXIST(500, "Topic is exist!"),
36+
DELAY_DELETE_INVALID(501, "Delay can not be deleted!"),
37+
;
2538

26-
TIME_EXPRESSION_INVALID(400, "Time expression is invalid");
2739

2840
/**
2941
* Value

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/service/impl/AppServiceImpl.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@
1616
import io.openjob.server.common.util.PageUtil;
1717
import io.openjob.server.common.vo.PageVO;
1818
import io.openjob.server.repository.dao.AppDAO;
19+
import io.openjob.server.repository.dao.DelayDAO;
20+
import io.openjob.server.repository.dao.JobDAO;
1921
import io.openjob.server.repository.dao.NamespaceDAO;
2022
import io.openjob.server.repository.entity.App;
23+
import io.openjob.server.repository.entity.Delay;
24+
import io.openjob.server.repository.entity.Job;
2125
import io.openjob.server.repository.entity.Namespace;
2226
import org.springframework.beans.factory.annotation.Autowired;
2327
import org.springframework.stereotype.Service;
@@ -37,17 +41,22 @@ public class AppServiceImpl implements AppService {
3741

3842
private final AppDAO appDAO;
3943
private final NamespaceDAO namespaceDAO;
44+
private final JobDAO jobDAO;
45+
private final DelayDAO delayDAO;
46+
4047

4148
@Autowired
42-
public AppServiceImpl(AppDAO appDAO, NamespaceDAO namespaceDAO) {
49+
public AppServiceImpl(AppDAO appDAO, NamespaceDAO namespaceDAO, JobDAO jobDAO, DelayDAO delayDAO) {
4350
this.appDAO = appDAO;
4451
this.namespaceDAO = namespaceDAO;
52+
this.jobDAO = jobDAO;
53+
this.delayDAO = delayDAO;
4554
}
4655

4756
@Override
4857
public AddAppVO add(AddAppRequest addRequest) {
4958
App app = this.appDAO.getAppByName(addRequest.getName());
50-
CodeEnum.NAME_EXIST.assertIsTrue(Objects.isNull(app));
59+
CodeEnum.APP_NAME_EXIST.assertIsTrue(Objects.isNull(app));
5160

5261
Long id = this.appDAO.save(BeanMapperUtil.map(addRequest, App.class));
5362

@@ -61,7 +70,7 @@ public UpdateAppVO update(UpdateAppRequest updateRequest) {
6170
// App name is exist and not self!
6271
App nameApp = this.appDAO.getAppByName(updateRequest.getName());
6372
if (Objects.nonNull(nameApp) && !nameApp.getId().equals(updateRequest.getId())) {
64-
CodeEnum.NAME_EXIST.throwException();
73+
CodeEnum.APP_NAME_EXIST.throwException();
6574
}
6675

6776
App app = BeanMapperUtil.map(BeanMapperUtil.map(updateRequest, App.class), App.class);
@@ -71,9 +80,16 @@ public UpdateAppVO update(UpdateAppRequest updateRequest) {
7180

7281
@Override
7382
public DeleteAppVO delete(DeleteAppRequest deleteAppRequest) {
74-
App app = BeanMapperUtil.map(deleteAppRequest, App.class);
75-
app.setDeleted(CommonConstant.YES);
76-
this.appDAO.update(app);
83+
App byId = this.appDAO.getById(deleteAppRequest.getId());
84+
85+
// Job/delay/workflow
86+
Job firstJob = this.jobDAO.getFirstByNamespaceAndAppid(byId.getNamespaceId(), byId.getId());
87+
Delay firstDelay = this.delayDAO.getFirstByNamespaceAndAppid(byId.getNamespaceId(), byId.getId());
88+
if (Objects.nonNull(firstJob) || Objects.nonNull(firstDelay)) {
89+
CodeEnum.APP_DELETE_INVALID.throwException();
90+
}
91+
92+
this.appDAO.deleteById(deleteAppRequest.getId());
7793
return new DeleteAppVO();
7894
}
7995

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/service/impl/DelayInstanceServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ public StopDelayInstanceVO stop(StopDelayInstanceRequest request) {
7777
DelayInstanceStopResponseDTO stop = this.delayInstanceScheduler.stop(delayInstanceStopRequestDTO);
7878

7979
// Update status
80+
this.delayInstanceDAO.updateStatus(request.getTaskId(), TaskStatusEnum.STOP.getStatus());
81+
8082
StopDelayInstanceVO stopDelayInstanceVO = new StopDelayInstanceVO();
8183
stopDelayInstanceVO.setResult(stop.getResult());
8284
return stopDelayInstanceVO;

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/service/impl/DelayServiceImpl.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.openjob.common.constant.CommonConstant;
44
import io.openjob.common.constant.TaskStatusEnum;
55
import io.openjob.common.util.DelayUtil;
6+
import io.openjob.server.admin.constant.CodeEnum;
67
import io.openjob.server.admin.request.delay.AddDelayRequest;
78
import io.openjob.server.admin.request.delay.DeleteDelayRequest;
89
import io.openjob.server.admin.request.delay.ListDelayRequest;
@@ -65,6 +66,9 @@ public DelayServiceImpl(DelayDAO delayDAO, AppDAO appDAO, DelayInstanceDAO delay
6566
@Override
6667
@Transactional(rollbackFor = Exception.class)
6768
public AddDelayVO add(AddDelayRequest addRequest) {
69+
Delay byTopic = this.delayDAO.findByTopic(addRequest.getTopic());
70+
CodeEnum.DELAY_TOPIC_EXIST.assertIsTrue(Objects.isNull(byTopic));
71+
6872
// Delay
6973
Delay delay = BeanMapperUtil.map(addRequest, Delay.class);
7074
delay.setPid(0L);
@@ -139,8 +143,13 @@ public PageVO<ListDelayVO> list(ListDelayRequest listDelayRequest) {
139143
@Override
140144
@Transactional(rollbackFor = Exception.class)
141145
public DeleteDelayVO delete(DeleteDelayRequest deleteDelayRequest) {
142-
this.delayDAO.updateStatusOrDeleted(deleteDelayRequest.getId(), null, CommonConstant.YES);
143-
this.delayDAO.updateStatusOrDeleted(deleteDelayRequest.getCid(), null, CommonConstant.YES);
146+
if (Objects.nonNull(this.delayInstanceDAO.getFirstByDelayId(deleteDelayRequest.getId()))) {
147+
CodeEnum.DELAY_DELETE_INVALID.throwException();
148+
}
149+
150+
// Delete
151+
this.delayDAO.deleteById(deleteDelayRequest.getId());
152+
this.delayDAO.deleteById(deleteDelayRequest.getCid());
144153

145154
// Refresh delay version
146155
this.delayScheduler.refreshDelayVersion();
@@ -150,6 +159,11 @@ public DeleteDelayVO delete(DeleteDelayRequest deleteDelayRequest) {
150159
@Override
151160
@Transactional(rollbackFor = Exception.class)
152161
public UpdateDelayVO update(UpdateDelayRequest updateDelayRequest) {
162+
Delay byTopic = this.delayDAO.findByTopic(updateDelayRequest.getTopic());
163+
if (Objects.nonNull(byTopic) && !byTopic.getId().equals(updateDelayRequest.getId())) {
164+
CodeEnum.DELAY_TOPIC_EXIST.throwException();
165+
}
166+
153167
// Delay
154168
Delay delay = BeanMapperUtil.map(updateDelayRequest, Delay.class);
155169
this.delayDAO.update(delay);

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/service/impl/JobServiceImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@
2828
import io.openjob.server.repository.constant.JobStatusEnum;
2929
import io.openjob.server.repository.dao.AppDAO;
3030
import io.openjob.server.repository.dao.JobDAO;
31+
import io.openjob.server.repository.dao.JobInstanceDAO;
3132
import io.openjob.server.repository.dto.JobPageDTO;
3233
import io.openjob.server.repository.entity.App;
3334
import io.openjob.server.repository.entity.Job;
3435
import io.openjob.server.scheduler.dto.JobExecuteRequestDTO;
3536
import io.openjob.server.scheduler.service.JobSchedulingService;
3637
import lombok.extern.slf4j.Slf4j;
38+
import org.aspectj.apache.bcel.classfile.Code;
3739
import org.springframework.beans.factory.annotation.Autowired;
3840
import org.springframework.stereotype.Component;
3941
import org.springframework.util.CollectionUtils;
@@ -56,12 +58,14 @@ public class JobServiceImpl implements JobService {
5658

5759
private final JobDAO jobDAO;
5860
private final AppDAO appDAO;
61+
private final JobInstanceDAO jobInstanceDAO;
5962
private final JobSchedulingService jobSchedulingService;
6063

6164
@Autowired
62-
public JobServiceImpl(JobDAO jobDAO, AppDAO appDAO, JobSchedulingService jobSchedulingService) {
65+
public JobServiceImpl(JobDAO jobDAO, AppDAO appDAO, JobInstanceDAO jobInstanceDAO, JobSchedulingService jobSchedulingService) {
6366
this.jobDAO = jobDAO;
6467
this.appDAO = appDAO;
68+
this.jobInstanceDAO = jobInstanceDAO;
6569
this.jobSchedulingService = jobSchedulingService;
6670
}
6771

@@ -107,6 +111,10 @@ public UpdateJobVO update(UpdateJobRequest updateJobRequest) {
107111

108112
@Override
109113
public DeleteJobVO delete(DeleteJobRequest deleteJobRequest) {
114+
if (Objects.nonNull(this.jobInstanceDAO.getFirstByJobId(deleteJobRequest.getId()))) {
115+
CodeEnum.JOB_DELETE_INVALID.throwException();
116+
}
117+
110118
this.jobDAO.updateByStatusOrDeleted(deleteJobRequest.getId(), null, CommonConstant.YES, null);
111119
return new DeleteJobVO();
112120
}

openjob-server/openjob-server-admin/src/main/java/io/openjob/server/admin/service/impl/NamespaceServiceImpl.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.openjob.server.admin.service.impl;
22

33
import io.openjob.common.constant.CommonConstant;
4+
import io.openjob.server.admin.constant.CodeEnum;
45
import io.openjob.server.admin.request.namespace.AddNamespaceRequest;
56
import io.openjob.server.admin.request.namespace.DeleteNamespaceRequest;
67
import io.openjob.server.admin.request.namespace.ListNamespaceRequest;
@@ -14,11 +15,13 @@
1415
import io.openjob.server.common.util.BeanMapperUtil;
1516
import io.openjob.server.common.util.PageUtil;
1617
import io.openjob.server.common.vo.PageVO;
18+
import io.openjob.server.repository.dao.AppDAO;
1719
import io.openjob.server.repository.dao.NamespaceDAO;
1820
import io.openjob.server.repository.entity.Namespace;
1921
import org.springframework.beans.factory.annotation.Autowired;
2022
import org.springframework.stereotype.Service;
2123

24+
import java.util.Objects;
2225
import java.util.UUID;
2326

2427
/**
@@ -28,10 +31,12 @@
2831
@Service
2932
public class NamespaceServiceImpl implements NamespaceService {
3033
private final NamespaceDAO namespaceDAO;
34+
private final AppDAO appDAO;
3135

3236
@Autowired
33-
public NamespaceServiceImpl(NamespaceDAO namespaceDAO) {
37+
public NamespaceServiceImpl(NamespaceDAO namespaceDAO, AppDAO appDAO) {
3438
this.namespaceDAO = namespaceDAO;
39+
this.appDAO = appDAO;
3540
}
3641

3742
@Override
@@ -53,6 +58,10 @@ public UpdateNamespaceVO update(UpdateNamespaceRequest updateRequest) {
5358

5459
@Override
5560
public DeleteNamespaceVO delete(DeleteNamespaceRequest deleteNamespaceRequest) {
61+
if (Objects.nonNull(this.appDAO.getFirstByNamespaceId(deleteNamespaceRequest.getId()))) {
62+
CodeEnum.NAMESPACE_DELETE_INVALID.throwException();
63+
}
64+
5665
Namespace namespace = BeanMapperUtil.map(deleteNamespaceRequest, Namespace.class);
5766
namespace.setDeleted(CommonConstant.YES);
5867
this.namespaceDAO.update(namespace);

openjob-server/openjob-server-cluster/src/main/java/io/openjob/server/cluster/manager/JoinManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ public Boolean doJoin(String hostname, Integer port) {
9494

9595
// Refresh current slots.
9696
this.refreshManager.refreshCurrentSlots();
97+
98+
// Refresh app workers;
99+
this.refreshManager.refreshAppWorkers();
97100
return true;
98101
}
99102

openjob-server/openjob-server-cluster/src/main/java/io/openjob/server/cluster/service/WorkerService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public void workerCheck() {
177177
workerStartRequest.setAppName(w.getAppName());
178178
workerStartRequest.setWorkerKey(w.getWorkerKey());
179179

180-
log.info("Scheduling worker start begin!");
180+
log.info("Scheduling worker start begin! address={}", w.getAddress());
181181
this.workerStart(workerStartRequest);
182182
}
183183
});
@@ -193,7 +193,7 @@ public void workerCheck() {
193193
workerStopRequest.setAddress(w.getAddress());
194194
workerStopRequest.setAppName(w.getAppName());
195195

196-
log.info("Scheduling worker stop begin!");
196+
log.info("Scheduling worker stop begin! address={}", w.getAddress());
197197
this.workerStop(workerStopRequest);
198198
}
199199
});

0 commit comments

Comments
 (0)