Defer actions taken after rate limit checks
This commit is contained in:
parent
22905fa8ee
commit
ff1ef90a6d
|
@ -34,7 +34,7 @@ public class CallingGrpcService extends ReactorCallingGrpc.CallingImplBase {
|
||||||
final AuthenticatedDevice authenticatedDevice = AuthenticationUtil.requireAuthenticatedDevice();
|
final AuthenticatedDevice authenticatedDevice = AuthenticationUtil.requireAuthenticatedDevice();
|
||||||
|
|
||||||
return rateLimiters.getTurnLimiter().validateReactive(authenticatedDevice.accountIdentifier())
|
return rateLimiters.getTurnLimiter().validateReactive(authenticatedDevice.accountIdentifier())
|
||||||
.then(Mono.fromSupplier(() -> turnTokenGenerator.generate(authenticatedDevice.accountIdentifier())))
|
.then(Mono.defer(() -> Mono.fromSupplier(() -> turnTokenGenerator.generate(authenticatedDevice.accountIdentifier()))))
|
||||||
.map(turnToken -> GetTurnCredentialsResponse.newBuilder()
|
.map(turnToken -> GetTurnCredentialsResponse.newBuilder()
|
||||||
.setUsername(turnToken.username())
|
.setUsername(turnToken.username())
|
||||||
.setPassword(turnToken.password())
|
.setPassword(turnToken.password())
|
||||||
|
|
|
@ -135,7 +135,7 @@ public class KeysGrpcService extends ReactorKeysGrpc.KeysImplBase {
|
||||||
request.getDeviceId();
|
request.getDeviceId();
|
||||||
|
|
||||||
return rateLimiters.getPreKeysLimiter().validateReactive(rateLimitKey)
|
return rateLimiters.getPreKeysLimiter().validateReactive(rateLimitKey)
|
||||||
.then(Mono.fromFuture(accountsManager.getByServiceIdentifierAsync(targetIdentifier))
|
.then(Mono.fromFuture(() -> accountsManager.getByServiceIdentifierAsync(targetIdentifier))
|
||||||
.flatMap(Mono::justOrEmpty))
|
.flatMap(Mono::justOrEmpty))
|
||||||
.switchIfEmpty(Mono.error(Status.NOT_FOUND.asException()))
|
.switchIfEmpty(Mono.error(Status.NOT_FOUND.asException()))
|
||||||
.flatMap(targetAccount ->
|
.flatMap(targetAccount ->
|
||||||
|
|
|
@ -12,6 +12,7 @@ import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.verifyNoInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import io.grpc.ServerInterceptors;
|
import io.grpc.ServerInterceptors;
|
||||||
|
@ -102,5 +103,7 @@ class CallingGrpcServiceTest {
|
||||||
assertEquals(Status.Code.RESOURCE_EXHAUSTED, exception.getStatus().getCode());
|
assertEquals(Status.Code.RESOURCE_EXHAUSTED, exception.getStatus().getCode());
|
||||||
assertNotNull(exception.getTrailers());
|
assertNotNull(exception.getTrailers());
|
||||||
assertEquals(retryAfter, exception.getTrailers().get(RateLimitUtil.RETRY_AFTER_DURATION_KEY));
|
assertEquals(retryAfter, exception.getTrailers().get(RateLimitUtil.RETRY_AFTER_DURATION_KEY));
|
||||||
|
|
||||||
|
verifyNoInteractions(turnTokenGenerator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.ArgumentMatchers.argThat;
|
import static org.mockito.ArgumentMatchers.argThat;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.verifyNoInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
|
@ -669,5 +670,7 @@ class KeysGrpcServiceTest {
|
||||||
assertEquals(Status.Code.RESOURCE_EXHAUSTED, exception.getStatus().getCode());
|
assertEquals(Status.Code.RESOURCE_EXHAUSTED, exception.getStatus().getCode());
|
||||||
assertNotNull(exception.getTrailers());
|
assertNotNull(exception.getTrailers());
|
||||||
assertEquals(retryAfterDuration, exception.getTrailers().get(RateLimitUtil.RETRY_AFTER_DURATION_KEY));
|
assertEquals(retryAfterDuration, exception.getTrailers().get(RateLimitUtil.RETRY_AFTER_DURATION_KEY));
|
||||||
|
|
||||||
|
verifyNoInteractions(accountsManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue