Retry serializable transaction.

// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-11-04 11:19:54 -08:00
parent fd725206e2
commit f2a9de3ba8
1 changed files with 15 additions and 3 deletions

View File

@ -16,8 +16,10 @@
*/
package org.whispersystems.textsecuregcm.controllers;
import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Optional;
import org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.textsecuregcm.entities.PreKeyCount;
import org.whispersystems.textsecuregcm.federation.FederatedClientManager;
import org.whispersystems.textsecuregcm.limits.RateLimiters;
@ -38,6 +40,8 @@ import io.dropwizard.auth.Auth;
public class KeysController {
private static final Logger logger = LoggerFactory.getLogger(KeysController.class);
protected final RateLimiters rateLimiters;
protected final Keys keys;
protected final AccountsManager accounts;
@ -86,8 +90,16 @@ public class KeysController {
throw new NoSuchUserException("Target device is inactive.");
}
Optional<List<KeyRecord>> preKeys = keys.get(number, deviceId);
return new TargetKeys(destination.get(), preKeys);
for (int i=0;i<20;i++) {
try {
Optional<List<KeyRecord>> preKeys = keys.get(number, deviceId);
return new TargetKeys(destination.get(), preKeys);
} catch (UnableToExecuteStatementException e) {
logger.info(e.getMessage());
}
}
throw new WebApplicationException(Response.status(500).build());
} catch (NumberFormatException e) {
throw new WebApplicationException(Response.status(422).build());
}