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());
|
||||
}
|
||||
|
||||
@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
|
||||
public void testDeleteTbResource() throws Exception {
|
||||
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 {
|
||||
return doGet("/api/resource/" + resourceId + "/download")
|
||||
.andExpect(status().isOk())
|
||||
|
||||
@ -20,7 +20,6 @@ import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.thingsboard.server.common.data.id.TbResourceId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -34,12 +33,11 @@ public class ResourceInfoCacheKey implements Serializable {
|
||||
@Serial
|
||||
private static final long serialVersionUID = 2100510964692846992L;
|
||||
|
||||
private final TenantId tenantId;
|
||||
private final TbResourceId tbResourceId;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return tenantId + "_" + tbResourceId;
|
||||
return tbResourceId.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -263,7 +263,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
@Override
|
||||
public TbResource toResource(TenantId tenantId, ResourceExportData exportData) {
|
||||
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");
|
||||
}
|
||||
|
||||
@ -311,7 +311,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
log.trace("Executing findResourceInfoById [{}] [{}]", tenantId, resourceId);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -712,7 +712,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
@Override
|
||||
public void handleEvictEvent(ResourceInfoEvictEvent event) {
|
||||
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