Fix invalid resource info caching
This commit is contained in:
parent
8d45f09869
commit
815ac9fef2
@ -202,6 +202,60 @@ public class TbResourceControllerTest extends AbstractControllerTest {
|
|||||||
Assert.assertEquals(savedResource.getFileName(), foundResource.getFileName());
|
Assert.assertEquals(savedResource.getFileName(), foundResource.getFileName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFindSystemResourceInfoById() throws Exception {
|
||||||
|
loginSysAdmin();
|
||||||
|
TbResource resource = new TbResource();
|
||||||
|
resource.setResourceType(ResourceType.JS_MODULE);
|
||||||
|
resource.setTitle("My system resource");
|
||||||
|
resource.setFileName(DEFAULT_FILE_NAME);
|
||||||
|
resource.setEncodedData(TEST_DATA);
|
||||||
|
TbResourceInfo savedResourceInfo = save(resource);
|
||||||
|
assertThat(savedResourceInfo.getFileName()).isEqualTo(DEFAULT_FILE_NAME);
|
||||||
|
|
||||||
|
TbResourceInfo resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
loginTenantAdmin();
|
||||||
|
resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
|
||||||
|
loginSysAdmin();
|
||||||
|
resource = new TbResource(savedResourceInfo);
|
||||||
|
resource.setFileName(DEFAULT_FILE_NAME_2);
|
||||||
|
resource.setEncodedData(TEST_DATA);
|
||||||
|
savedResourceInfo = save(resource);
|
||||||
|
assertThat(savedResourceInfo.getFileName()).isEqualTo(DEFAULT_FILE_NAME_2);
|
||||||
|
|
||||||
|
resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
loginTenantAdmin();
|
||||||
|
resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFindTenantResourceInfoById() throws Exception {
|
||||||
|
TbResource resource = new TbResource();
|
||||||
|
resource.setResourceType(ResourceType.JS_MODULE);
|
||||||
|
resource.setTitle("My tenant resource");
|
||||||
|
resource.setFileName(DEFAULT_FILE_NAME);
|
||||||
|
resource.setEncodedData(TEST_DATA);
|
||||||
|
TbResourceInfo savedResourceInfo = save(resource);
|
||||||
|
assertThat(savedResourceInfo.getFileName()).isEqualTo(DEFAULT_FILE_NAME);
|
||||||
|
|
||||||
|
TbResourceInfo resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
|
||||||
|
resource = new TbResource(savedResourceInfo);
|
||||||
|
resource.setFileName(DEFAULT_FILE_NAME_2);
|
||||||
|
resource.setEncodedData(TEST_DATA);
|
||||||
|
savedResourceInfo = save(resource);
|
||||||
|
assertThat(savedResourceInfo.getFileName()).isEqualTo(DEFAULT_FILE_NAME_2);
|
||||||
|
|
||||||
|
resourceInfo = findResourceInfo(savedResourceInfo.getId());
|
||||||
|
assertThat(resourceInfo).isEqualTo(savedResourceInfo);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteTbResource() throws Exception {
|
public void testDeleteTbResource() throws Exception {
|
||||||
TbResource resource = new TbResource();
|
TbResource resource = new TbResource();
|
||||||
@ -878,6 +932,10 @@ public class TbResourceControllerTest extends AbstractControllerTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TbResourceInfo findResourceInfo(TbResourceId id) throws Exception {
|
||||||
|
return doGet("/api/resource/info/" + id, TbResourceInfo.class);
|
||||||
|
}
|
||||||
|
|
||||||
private byte[] download(TbResourceId resourceId) throws Exception {
|
private byte[] download(TbResourceId resourceId) throws Exception {
|
||||||
return doGet("/api/resource/" + resourceId + "/download")
|
return doGet("/api/resource/" + resourceId + "/download")
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.thingsboard.server.common.data.id.TbResourceId;
|
import org.thingsboard.server.common.data.id.TbResourceId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@ -34,12 +33,11 @@ public class ResourceInfoCacheKey implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 2100510964692846992L;
|
private static final long serialVersionUID = 2100510964692846992L;
|
||||||
|
|
||||||
private final TenantId tenantId;
|
|
||||||
private final TbResourceId tbResourceId;
|
private final TbResourceId tbResourceId;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return tenantId + "_" + tbResourceId;
|
return tbResourceId.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -263,7 +263,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
|||||||
@Override
|
@Override
|
||||||
public TbResource toResource(TenantId tenantId, ResourceExportData exportData) {
|
public TbResource toResource(TenantId tenantId, ResourceExportData exportData) {
|
||||||
if (exportData.getType() == ResourceType.IMAGE || exportData.getSubType() == ResourceSubType.IMAGE
|
if (exportData.getType() == ResourceType.IMAGE || exportData.getSubType() == ResourceSubType.IMAGE
|
||||||
|| exportData.getSubType() == ResourceSubType.SCADA_SYMBOL) {
|
|| exportData.getSubType() == ResourceSubType.SCADA_SYMBOL) {
|
||||||
throw new IllegalArgumentException("Image import not supported");
|
throw new IllegalArgumentException("Image import not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
|||||||
log.trace("Executing findResourceInfoById [{}] [{}]", tenantId, resourceId);
|
log.trace("Executing findResourceInfoById [{}] [{}]", tenantId, resourceId);
|
||||||
Validator.validateId(resourceId, id -> INCORRECT_RESOURCE_ID + id);
|
Validator.validateId(resourceId, id -> INCORRECT_RESOURCE_ID + id);
|
||||||
|
|
||||||
return cache.getAndPutInTransaction(new ResourceInfoCacheKey(tenantId, resourceId),
|
return cache.getAndPutInTransaction(new ResourceInfoCacheKey(resourceId),
|
||||||
() -> resourceInfoDao.findById(tenantId, resourceId.getId()), true);
|
() -> resourceInfoDao.findById(tenantId, resourceId.getId()), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -712,7 +712,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
|||||||
@Override
|
@Override
|
||||||
public void handleEvictEvent(ResourceInfoEvictEvent event) {
|
public void handleEvictEvent(ResourceInfoEvictEvent event) {
|
||||||
if (event.getResourceId() != null) {
|
if (event.getResourceId() != null) {
|
||||||
cache.evict(new ResourceInfoCacheKey(event.getTenantId(), event.getResourceId()));
|
cache.evict(new ResourceInfoCacheKey(event.getResourceId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user