diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepository.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepository.java index 25cb21b..67f7eaf 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepository.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepository.java @@ -20,18 +20,15 @@ import java.sql.Timestamp; import java.time.Instant; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListMap; import reactor.core.publisher.Mono; import org.springframework.cloud.servicebroker.model.instance.OperationState; -/** - * @author Roy Clarkson - */ public class InMemoryServiceInstanceBindingStateRepository implements ServiceInstanceBindingStateRepository { - private final Map states = new ConcurrentHashMap<>(); + private final Map states = new ConcurrentSkipListMap<>(); @Override public Mono saveState(String serviceInstanceId, String bindingId, OperationState state, @@ -76,7 +73,7 @@ public class InMemoryServiceInstanceBindingStateRepository implements ServiceIns return Mono.fromCallable(() -> this.states.containsKey(bindingKey)); } - private static class BindingKey { + private static class BindingKey implements Comparable { private final String serviceInstanceId; @@ -121,6 +118,12 @@ public class InMemoryServiceInstanceBindingStateRepository implements ServiceIns '}'; } + @Override + public int compareTo(BindingKey other) { + int compare = this.serviceInstanceId.compareTo(other.serviceInstanceId); + return compare == 0 ? this.bindingId.compareTo(other.bindingId) : compare; + } + } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepository.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepository.java index 72bf3b9..3bdf0f1 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepository.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepository.java @@ -19,7 +19,7 @@ package org.springframework.cloud.appbroker.state; import java.sql.Timestamp; import java.time.Instant; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListMap; import reactor.core.publisher.Mono; @@ -27,7 +27,7 @@ import org.springframework.cloud.servicebroker.model.instance.OperationState; public class InMemoryServiceInstanceStateRepository implements ServiceInstanceStateRepository { - private final Map states = new ConcurrentHashMap<>(); + private final Map states = new ConcurrentSkipListMap<>(); @Override public Mono saveState(String serviceInstanceId, OperationState state, String description) { diff --git a/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepositoryTest.java b/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepositoryTest.java index 0a1f904..9cfeb36 100644 --- a/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepositoryTest.java +++ b/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceBindingStateRepositoryTest.java @@ -19,7 +19,6 @@ package org.springframework.cloud.appbroker.state; import java.util.Calendar; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import reactor.core.scheduler.Schedulers; @@ -29,8 +28,6 @@ import org.springframework.cloud.servicebroker.model.instance.OperationState; import static org.assertj.core.api.Assertions.assertThat; -@Disabled -// See https://github.com/spring-cloud/spring-cloud-app-broker/issues/313 class InMemoryServiceInstanceBindingStateRepositoryTest { private InMemoryServiceInstanceBindingStateRepository stateRepository; diff --git a/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepositoryTest.java b/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepositoryTest.java index 0cca5a0..793830a 100644 --- a/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepositoryTest.java +++ b/spring-cloud-app-broker-core/src/test/java/org/springframework/cloud/appbroker/state/InMemoryServiceInstanceStateRepositoryTest.java @@ -19,7 +19,6 @@ package org.springframework.cloud.appbroker.state; import java.util.Calendar; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import reactor.core.scheduler.Schedulers; @@ -29,8 +28,6 @@ import org.springframework.cloud.servicebroker.model.instance.OperationState; import static org.assertj.core.api.Assertions.assertThat; -@Disabled -// See https://github.com/spring-cloud/spring-cloud-app-broker/issues/313 class InMemoryServiceInstanceStateRepositoryTest { private InMemoryServiceInstanceStateRepository stateRepository;