Skip to content

Commit

Permalink
KAA-1423: All comments fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
vchizhevsky committed Dec 15, 2016
1 parent fa0c7f9 commit b0784e3
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 31 deletions.
Expand Up @@ -26,19 +26,19 @@ public class EndpointSpecificConfigurationDto implements Serializable {
private byte[] endpointKeyHash;
private Integer configurationSchemaVersion;
private String configuration;
private Long specificConfigurationVersion;
private Long version;

public EndpointSpecificConfigurationDto() {
}

/**
* All-args constructor.
*/
public EndpointSpecificConfigurationDto(byte[] endpointKeyHash, Integer configurationSchemaVersion, String configuration, Long specificConfigurationVersion) {
public EndpointSpecificConfigurationDto(byte[] endpointKeyHash, Integer configurationSchemaVersion, String configuration, Long version) {
this.endpointKeyHash = endpointKeyHash;
this.configurationSchemaVersion = configurationSchemaVersion;
this.configuration = configuration;
this.specificConfigurationVersion = specificConfigurationVersion;
this.version = version;
}

public Integer getConfigurationSchemaVersion() {
Expand All @@ -65,12 +65,12 @@ public void setEndpointKeyHash(byte[] endpointKeyHash) {
this.endpointKeyHash = endpointKeyHash;
}

public Long getSpecificConfigurationVersion() {
return specificConfigurationVersion;
public Long getVersion() {
return version;
}

public void setSpecificConfigurationVersion(Long specificConfigurationVersion) {
this.specificConfigurationVersion = specificConfigurationVersion;
public void setVersion(Long version) {
this.version = version;
}

@Override
Expand Down
Expand Up @@ -89,13 +89,9 @@ public EndpointSpecificConfiguration save(EndpointSpecificConfigurationDto dto)
CassandraEndpointSpecificConfiguration configuration =
findByEndpointKeyHashAndConfigurationVersion(dto.getEndpointKeyHash(), dto.getConfigurationSchemaVersion());
if (configuration != null) {
configuration.setConfiguration(dto.getConfiguration());
configuration.setConfigurationVersion(dto.getConfigurationSchemaVersion());
configuration.setEndpointKeyHash(getByteBuffer(dto.getEndpointKeyHash()));
save(configuration);
} else {
configuration = save(new CassandraEndpointSpecificConfiguration(dto));
dto.setVersion(configuration.getVersion());
}
configuration = save(new CassandraEndpointSpecificConfiguration(dto));
if (LOG.isTraceEnabled()) {
LOG.trace("Saved: {}", configuration);
} else {
Expand Down
Expand Up @@ -68,7 +68,7 @@ public CassandraEndpointSpecificConfiguration(EndpointSpecificConfigurationDto d
this.endpointKeyHash = getByteBuffer(dto.getEndpointKeyHash());
this.configurationVersion = dto.getConfigurationSchemaVersion();
this.configuration = dto.getConfiguration();
this.version = dto.getSpecificConfigurationVersion();
this.version = dto.getVersion();
}

@Override
Expand All @@ -77,7 +77,7 @@ public EndpointSpecificConfigurationDto toDto() {
dto.setEndpointKeyHash(getBytes(this.getEndpointKeyHash()));
dto.setConfiguration(this.getConfiguration());
dto.setConfigurationSchemaVersion(this.getConfigurationVersion());
dto.setSpecificConfigurationVersion(this.getVersion());
dto.setVersion(this.getVersion());
return dto;
}

Expand Down
Expand Up @@ -22,11 +22,19 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kaaproject.kaa.common.dto.EndpointSpecificConfigurationDto;
import org.kaaproject.kaa.server.common.dao.exception.KaaOptimisticLockingFailureException;
import org.kaaproject.kaa.server.common.dao.model.EndpointSpecificConfiguration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/cassandra-client-test-context.xml")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
Expand All @@ -38,6 +46,7 @@ public class EndpointSpecificConfigurationCassandraDaoTest extends AbstractCassa
private EndpointSpecificConfigurationDto saved1;
private EndpointSpecificConfigurationDto saved2;
private EndpointSpecificConfigurationDto saved3;
private ExecutorService executorService = Executors.newFixedThreadPool(10);

@Test
public void testRemoveByEndpointKeyHashAndConfigurationVersion() throws Exception {
Expand All @@ -60,10 +69,21 @@ public void testFindByEndpointKeyHashAndConfigurationVersion() throws Exception
Assert.assertNull(found4);
}

@Test
public void testLocking() throws Exception {
saved1 = generateEpsConfigurationDto(KEY, 1, BODY, 9L);
saved2 = generateEpsConfigurationDto(KEY, 1, BODY, 9L);
@Test(expected = KaaOptimisticLockingFailureException.class)
public void testLocking() throws Throwable {
List<Future<?>> tasks = new ArrayList<>();
for (int i = 0; i < 100; i++) {
tasks.add(executorService.submit((Runnable) () -> {
endpointSpecificConfigurationDao.save(saved1);
}));
}
for (Future future : tasks) {
try {
future.get();
} catch (ExecutionException ex) {
throw ex.getCause();
}
}
}

@Before
Expand Down
Expand Up @@ -60,13 +60,9 @@ public EndpointSpecificConfiguration save(EndpointSpecificConfigurationDto dto)
MongoEndpointSpecificConfiguration configuration =
(MongoEndpointSpecificConfiguration) findByEndpointKeyHashAndConfigurationVersion(dto.getEndpointKeyHash(), dto.getConfigurationSchemaVersion());
if (configuration != null) {
configuration.setConfiguration(dto.getConfiguration());
configuration.setConfigurationVersion(dto.getConfigurationSchemaVersion());
configuration.setEndpointKeyHash(dto.getEndpointKeyHash());
save(configuration);
} else {
configuration = save(new MongoEndpointSpecificConfiguration(dto));
dto.setVersion(configuration.getVersion());
}
configuration = save(new MongoEndpointSpecificConfiguration(dto));
if (LOG.isTraceEnabled()) {
LOG.trace("Saved: {}", configuration);
} else {
Expand Down
Expand Up @@ -64,7 +64,7 @@ public MongoEndpointSpecificConfiguration(EndpointSpecificConfigurationDto dto)
this.endpointKeyHash = dto.getEndpointKeyHash();
this.configurationVersion = dto.getConfigurationSchemaVersion();
this.configuration = dto.getConfiguration();
this.version = dto.getSpecificConfigurationVersion();
this.version = dto.getVersion();
generateId();
}

Expand All @@ -74,7 +74,7 @@ public EndpointSpecificConfigurationDto toDto() {
dto.setEndpointKeyHash(this.getEndpointKeyHash());
dto.setConfiguration(this.getConfiguration());
dto.setConfigurationSchemaVersion(this.getConfigurationVersion());
dto.setSpecificConfigurationVersion(this.getVersion());
dto.setVersion(this.getVersion());
return dto;
}

Expand Down
Expand Up @@ -24,11 +24,19 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kaaproject.kaa.common.dto.EndpointSpecificConfigurationDto;
import org.kaaproject.kaa.server.common.dao.exception.KaaOptimisticLockingFailureException;
import org.kaaproject.kaa.server.common.dao.model.EndpointSpecificConfiguration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/mongo-dao-test-context.xml")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
Expand All @@ -39,6 +47,7 @@ public class EndpointSpecificConfigurationMongoDaoTest extends AbstractMongoTest
private EndpointSpecificConfigurationDto saved1;
private EndpointSpecificConfigurationDto saved2;
private EndpointSpecificConfigurationDto saved3;
private ExecutorService executorService = Executors.newFixedThreadPool(10);

@BeforeClass
public static void init() throws Exception {
Expand Down Expand Up @@ -71,10 +80,21 @@ public void testFindByEndpointKeyHashAndConfigurationVersion() throws Exception
Assert.assertNull(found4);
}

@Test
public void testLocking() throws Exception {
saved1 = generateEndpointSpecificConfigurationDto(KEY, 1, BODY, 8L);
saved2 = generateEndpointSpecificConfigurationDto(KEY, 1, BODY, 8L);
@Test(expected = KaaOptimisticLockingFailureException.class)
public void testLocking() throws Throwable {
List<Future<?>> tasks = new ArrayList<>();
for (int i = 0; i < 100; i++) {
tasks.add(executorService.submit((Runnable) () -> {
endpointSpecificConfigurationDao.save(saved1);
}));
}
for (Future future : tasks) {
try {
future.get();
} catch (ExecutionException ex) {
throw ex.getCause();
}
}
}

@Before
Expand Down

0 comments on commit b0784e3

Please sign in to comment.