diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/FinishedState.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/FinishedState.java index f30a6ef79..fbee81d00 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/FinishedState.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/FinishedState.java @@ -27,6 +27,7 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.exceptions.UnableToFinishException; +import java.time.Duration; import java.util.LinkedList; /** @@ -54,8 +55,8 @@ protected GeneralConversationState completeState() { } @Override - protected long getTimeoutValue() { - return 0; + protected Duration getTimeoutValue() { + return Duration.ZERO; } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/GeneralConversationState.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/GeneralConversationState.java index 96d9b939d..90ec35c5f 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/GeneralConversationState.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/GeneralConversationState.java @@ -31,10 +31,13 @@ import org.bitrepository.client.exceptions.UnexpectedResponseException; import org.bitrepository.common.DefaultThreadFactory; import org.bitrepository.common.exceptions.UnableToFinishException; +import org.bitrepository.common.utils.CountAndTimeUnit; +import org.bitrepository.common.utils.TimeUtils; import org.bitrepository.protocol.ProtocolVersionLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.time.Duration; import java.util.Collection; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -71,8 +74,9 @@ protected GeneralConversationState(Collection expectedContributors) { public void start() { try { if (!responseStatus.getOutstandingComponents().isEmpty()) { - if (getTimeoutValue() > 0) { - scheduledTimeout = timer.schedule(new TimeoutHandler(), getTimeoutValue(), TimeUnit.MILLISECONDS); + if (getTimeoutValue().compareTo(Duration.ZERO) > 0) { // TODO From Java 18 use: getTimeoutValue().isPositive() + CountAndTimeUnit delay = TimeUtils.durationToCountAndTimeUnit(getTimeoutValue()); + scheduledTimeout = timer.schedule(new TimeoutHandler(), delay.getCount(), delay.getUnit()); } sendRequest(); } else { @@ -217,9 +221,9 @@ protected abstract boolean processMessage(MessageResponse response) throws Unexp /** * Gives access to the concrete timeout for the state. - * @return the number of milliseconds before timeout + * @return the duration before timeout */ - protected abstract long getTimeoutValue(); + protected abstract Duration getTimeoutValue(); /** * @return The informative naming of the process this state is performing. Used for logging. Examples are 'Delete files', diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/IdentifyingState.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/IdentifyingState.java index 8e596e76a..c12d6d6ad 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/IdentifyingState.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/IdentifyingState.java @@ -28,6 +28,7 @@ import org.bitrepository.client.exceptions.UnexpectedResponseException; import org.bitrepository.common.exceptions.UnableToFinishException; +import java.time.Duration; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -79,9 +80,8 @@ protected final GeneralConversationState completeState() throws UnableToFinishEx } @Override - protected long getTimeoutValue() { - return getContext().getSettings().getRepositorySettings().getClientSettings().getIdentificationTimeout() - .longValue(); + protected Duration getTimeoutValue() { + return getContext().getSettings().getIdentificationTimeout(); } /** diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/PerformingOperationState.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/PerformingOperationState.java index cb68ac984..7fad2d5a9 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/PerformingOperationState.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/PerformingOperationState.java @@ -26,7 +26,9 @@ import org.bitrepository.client.conversation.selector.SelectedComponentInfo; import org.bitrepository.client.exceptions.UnexpectedResponseException; import org.bitrepository.common.exceptions.UnableToFinishException; +import org.bitrepository.common.utils.TimeUtils; +import java.time.Duration; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -79,14 +81,15 @@ protected boolean processMessage(MessageResponse msg) throws UnableToFinishExcep @Override protected void logStateTimeout() throws UnableToFinishException { - throw new UnableToFinishException( - "Failed to receive responses from all contributors before timeout(" + getTimeoutValue() + "ms). Missing contributors " + + throw new UnableToFinishException("Failed to receive responses from all contributors before timeout (" + + TimeUtils.durationToHuman(getTimeoutValue()) + + "). Missing contributors " + getOutstandingComponents()); } @Override - protected long getTimeoutValue() { - return getContext().getSettings().getRepositorySettings().getClientSettings().getOperationTimeout().longValue(); + protected Duration getTimeoutValue() { + return getContext().getSettings().getOperationTimeout(); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/mediator/CollectionBasedConversationMediator.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/mediator/CollectionBasedConversationMediator.java index 25a3ca891..1e6bf73e3 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/mediator/CollectionBasedConversationMediator.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/mediator/CollectionBasedConversationMediator.java @@ -51,7 +51,7 @@ public class CollectionBasedConversationMediator implements ConversationMediator private final Logger log = LoggerFactory.getLogger(getClass()); private final Map conversations; private final Settings settings; - private static final Boolean TIMER_IS_DAEMON = true; + private static final boolean TIMER_IS_DAEMON = true; private static final String NAME_OF_TIMER = "Collection based conversation timer"; /** * The timer used to schedule cleaning of conversations. @@ -96,7 +96,7 @@ public void addConversation(Conversation conversation) { } /** - * Will try to fail a conversation gracefully. This entitles: + * Will try to fail a conversation gracefully. This consists of: *