Send delivery receipts asynchronously
This commit is contained in:
parent
b608ece57e
commit
7c9ae3561d
|
@ -399,6 +399,8 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
minThreads(availableProcessors). // mostly this is IO bound so tying to number of processors is tenuous at best
|
minThreads(availableProcessors). // mostly this is IO bound so tying to number of processors is tenuous at best
|
||||||
allowCoreThreadTimeOut(true).
|
allowCoreThreadTimeOut(true).
|
||||||
build();
|
build();
|
||||||
|
ExecutorService receiptSenderExecutor = environment.lifecycle()
|
||||||
|
.executorService(name(getClass(), "receiptSender-%d")).maxThreads(16).minThreads(16).build();
|
||||||
|
|
||||||
StripeManager stripeManager = new StripeManager(config.getStripe().getApiKey(), stripeExecutor,
|
StripeManager stripeManager = new StripeManager(config.getStripe().getApiKey(), stripeExecutor,
|
||||||
config.getStripe().getIdempotencyKeyGenerator(), config.getStripe().getBoostDescription());
|
config.getStripe().getIdempotencyKeyGenerator(), config.getStripe().getBoostDescription());
|
||||||
|
@ -468,7 +470,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
TwilioSmsSender twilioSmsSender = new TwilioSmsSender(config.getTwilioConfiguration(), dynamicConfigurationManager);
|
TwilioSmsSender twilioSmsSender = new TwilioSmsSender(config.getTwilioConfiguration(), dynamicConfigurationManager);
|
||||||
SmsSender smsSender = new SmsSender(twilioSmsSender);
|
SmsSender smsSender = new SmsSender(twilioSmsSender);
|
||||||
MessageSender messageSender = new MessageSender(apnFallbackManager, clientPresenceManager, messagesManager, gcmSender, apnSender, pushLatencyManager);
|
MessageSender messageSender = new MessageSender(apnFallbackManager, clientPresenceManager, messagesManager, gcmSender, apnSender, pushLatencyManager);
|
||||||
ReceiptSender receiptSender = new ReceiptSender(accountsManager, messageSender);
|
ReceiptSender receiptSender = new ReceiptSender(accountsManager, messageSender, receiptSenderExecutor);
|
||||||
TurnTokenGenerator turnTokenGenerator = new TurnTokenGenerator(config.getTurnConfiguration());
|
TurnTokenGenerator turnTokenGenerator = new TurnTokenGenerator(config.getTurnConfiguration());
|
||||||
RecaptchaClient recaptchaClient = new RecaptchaClient(
|
RecaptchaClient recaptchaClient = new RecaptchaClient(
|
||||||
config.getRecaptchaConfiguration().getProjectPath(),
|
config.getRecaptchaConfiguration().getProjectPath(),
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2013-2021 Signal Messenger, LLC
|
* Copyright 2013-2022 Signal Messenger, LLC
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.push;
|
package org.whispersystems.textsecuregcm.push;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.whispersystems.textsecuregcm.auth.AuthenticatedAccount;
|
import org.whispersystems.textsecuregcm.auth.AuthenticatedAccount;
|
||||||
|
@ -17,20 +19,23 @@ import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
|
|
||||||
public class ReceiptSender {
|
public class ReceiptSender {
|
||||||
|
|
||||||
private final MessageSender messageSender;
|
private final MessageSender messageSender;
|
||||||
private final AccountsManager accountManager;
|
private final AccountsManager accountManager;
|
||||||
|
private final ExecutorService executor;
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ReceiptSender.class);
|
private static final Logger logger = LoggerFactory.getLogger(ReceiptSender.class);
|
||||||
|
|
||||||
public ReceiptSender(final AccountsManager accountManager, final MessageSender messageSender) {
|
public ReceiptSender(final AccountsManager accountManager, final MessageSender messageSender,
|
||||||
|
final ExecutorService executor) {
|
||||||
this.accountManager = accountManager;
|
this.accountManager = accountManager;
|
||||||
this.messageSender = messageSender;
|
this.messageSender = messageSender;
|
||||||
|
this.executor = executor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendReceipt(AuthenticatedAccount source, UUID destinationUuid, long messageId) throws NoSuchUserException {
|
public CompletableFuture<Void> sendReceipt(AuthenticatedAccount source, UUID destinationUuid, long messageId) throws NoSuchUserException {
|
||||||
final Account sourceAccount = source.getAccount();
|
final Account sourceAccount = source.getAccount();
|
||||||
if (sourceAccount.getUuid().equals(destinationUuid)) {
|
if (sourceAccount.getUuid().equals(destinationUuid)) {
|
||||||
return;
|
return CompletableFuture.completedFuture(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Account destinationAccount = accountManager.getByAccountIdentifier(destinationUuid)
|
final Account destinationAccount = accountManager.getByAccountIdentifier(destinationUuid)
|
||||||
|
@ -45,12 +50,16 @@ public class ReceiptSender {
|
||||||
.setTimestamp(messageId)
|
.setTimestamp(messageId)
|
||||||
.setType(Envelope.Type.SERVER_DELIVERY_RECEIPT);
|
.setType(Envelope.Type.SERVER_DELIVERY_RECEIPT);
|
||||||
|
|
||||||
for (final Device destinationDevice : destinationAccount.getDevices()) {
|
return CompletableFuture.runAsync(() -> {
|
||||||
try {
|
for (final Device destinationDevice : destinationAccount.getDevices()) {
|
||||||
messageSender.sendMessage(destinationAccount, destinationDevice, message.build(), false);
|
try {
|
||||||
} catch (final NotPushRegisteredException e) {
|
messageSender.sendMessage(destinationAccount, destinationDevice, message.build(), false);
|
||||||
logger.info("User no longer push registered for delivery receipt: " + e.getMessage());
|
} catch (final NotPushRegisteredException e) {
|
||||||
|
logger.info("User no longer push registered for delivery receipt: " + e.getMessage());
|
||||||
|
} catch (final Exception e) {
|
||||||
|
logger.warn("Could not send delivery receipt", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}, executor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue