Browse Source

fixed transaction issue

pull/14350/head
dashevchenko 11 months ago
parent
commit
5d2a227ed0
  1. 18
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
  2. 4
      dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java

18
dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java

@ -189,13 +189,17 @@ public class DeviceServiceImpl extends CachedVersionedEntityService<DeviceCacheK
@Transactional @Transactional
@Override @Override
public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials) { public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials) {
return this.saveDeviceWithCredentials(device, deviceCredentials, NameConflictStrategy.DEFAULT); return saveDeviceWithCredentials(device, deviceCredentials, NameConflictStrategy.DEFAULT);
} }
@Transactional @Transactional
@Override @Override
public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials, NameConflictStrategy nameConflictStrategy) { public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials, NameConflictStrategy nameConflictStrategy) {
Device savedDevice = this.saveDeviceWithoutCredentials(device, true, nameConflictStrategy); return saveEntity(device, () -> doSaveWithCredentials(device, deviceCredentials, nameConflictStrategy));
}
private Device doSaveWithCredentials(Device device, DeviceCredentials deviceCredentials, NameConflictStrategy nameConflictStrategy) {
Device savedDevice = doSaveDeviceWithoutCredentials(device, true, nameConflictStrategy);
deviceCredentials.setDeviceId(savedDevice.getId()); deviceCredentials.setDeviceId(savedDevice.getId());
if (device.getId() == null) { if (device.getId() == null) {
deviceCredentialsService.createDeviceCredentials(savedDevice.getTenantId(), deviceCredentials); deviceCredentialsService.createDeviceCredentials(savedDevice.getTenantId(), deviceCredentials);
@ -216,7 +220,11 @@ public class DeviceServiceImpl extends CachedVersionedEntityService<DeviceCacheK
} }
private Device doSaveDevice(Device device, String accessToken, boolean doValidate, NameConflictStrategy nameConflictStrategy) { private Device doSaveDevice(Device device, String accessToken, boolean doValidate, NameConflictStrategy nameConflictStrategy) {
Device savedDevice = this.saveDeviceWithoutCredentials(device, doValidate, nameConflictStrategy); return saveEntity(device, () -> saveWithoutCredentials(device, accessToken, doValidate, nameConflictStrategy));
}
private Device saveWithoutCredentials(Device device, String accessToken, boolean doValidate, NameConflictStrategy nameConflictStrategy) {
Device savedDevice = doSaveDeviceWithoutCredentials(device, doValidate, nameConflictStrategy);
if (device.getId() == null) { if (device.getId() == null) {
DeviceCredentials deviceCredentials = new DeviceCredentials(); DeviceCredentials deviceCredentials = new DeviceCredentials();
deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId())); deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));
@ -227,10 +235,6 @@ public class DeviceServiceImpl extends CachedVersionedEntityService<DeviceCacheK
return savedDevice; return savedDevice;
} }
private Device saveDeviceWithoutCredentials(Device device, boolean doValidate, NameConflictStrategy nameConflictStrategy) {
return saveEntity(device, () -> doSaveDeviceWithoutCredentials(device, doValidate, nameConflictStrategy));
}
private Device doSaveDeviceWithoutCredentials(Device device, boolean doValidate, NameConflictStrategy nameConflictStrategy) { private Device doSaveDeviceWithoutCredentials(Device device, boolean doValidate, NameConflictStrategy nameConflictStrategy) {
log.trace("Executing saveDevice [{}]", device); log.trace("Executing saveDevice [{}]", device);
Device oldDevice = (device.getId() != null) ? deviceDao.findById(device.getTenantId(), device.getId().getId()) : null; Device oldDevice = (device.getId() != null) ? deviceDao.findById(device.getTenantId(), device.getId().getId()) : null;

4
dao/src/test/java/org/thingsboard/server/dao/service/DeviceServiceTest.java

@ -162,13 +162,13 @@ public class DeviceServiceTest extends AbstractServiceTest {
defaultTenantProfile.getProfileData().setConfiguration(DefaultTenantProfileConfiguration.builder().maxDevices(5l).build()); defaultTenantProfile.getProfileData().setConfiguration(DefaultTenantProfileConfiguration.builder().maxDevices(5l).build());
tenantProfileService.saveTenantProfile(tenantId, defaultTenantProfile); tenantProfileService.saveTenantProfile(tenantId, defaultTenantProfile);
for (int i = 0; i < 20; i++) { for (int i = 0; i < 50; i++) {
executor.submit(() -> { executor.submit(() -> {
Device device = new Device(); Device device = new Device();
device.setTenantId(tenantId); device.setTenantId(tenantId);
device.setName(StringUtils.randomAlphabetic(10)); device.setName(StringUtils.randomAlphabetic(10));
device.setType("default"); device.setType("default");
deviceService.saveDevice(device, true); deviceService.saveDevice(device);
}); });
} }

Loading…
Cancel
Save