From d8c62c1ad6396b936a9050dfade6020e4a351fce Mon Sep 17 00:00:00 2001 From: sergeyPensov Date: Mon, 14 Jan 2019 16:17:50 +0200 Subject: [PATCH 1/4] Implement flow for deleting profile --- .../AccountRepositoryAdditionalImpl.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java index a30e94f..02d4dd4 100644 --- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java +++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java @@ -465,7 +465,7 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio } public Optional deleteProfile(UUID profileId) { - CassandraBatchOperations batchOperations = cassandraTemplate.batchOps(); + Transaction sagaTransaction = new SagaTransaction(cassandraTemplate); Profile existingProfile = profileRepository.findByProfileId(profileId); if (existingProfile == null) { logger.error("Error deleting profile. Existing profile with the provided id {} was not found.", profileId); @@ -479,22 +479,28 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio return Optional.of(Cause.ERROR_PERMISSION_DENIED); } - WriteResult wr = null; + WriteResult wr; try { - deleteProfileAccountsWhenDeletingProfile(batchOperations, existingAccountsForProfile); + deleteProfileAccountsWhenDeletingProfile(sagaTransaction, existingAccountsForProfile); if (existingProfile.getAuthenticationProviders() != null && existingProfile.getAuthenticationProviders().size() > 0) { - deleteAuthenticationProvidersFromProfile(batchOperations, existingProfile.getProfileId(), + deleteAuthenticationProvidersFromProfile(sagaTransaction, existingProfile.getProfileId(), existingProfile.getAuthenticationProviders()); } - deleteProfileData(batchOperations, existingProfile); - wr = batchOperations.execute(); + deleteProfileData(sagaTransaction, existingProfile); + wr = sagaTransaction.execute(); + if (!erlangAccountBridge.deleteProfile(existingProfile.getProfileId(), existingAccountsForProfile.stream() + .map(AccountByProfileId::getAccountId).collect(Collectors.toList()))) { + logger.error("Internal error with erlang"); + sagaTransaction.rollBack(); + return Optional.of(Cause.ERROR_DELETING_PROFILE); + } } catch (IllegalArgumentException | IllegalStateException e) { logger.info("Exception while deleting account."); logger.debug("Exception while deleting account: {} ...", e.getMessage()); return Optional.of(Cause.ERROR_DELETING_PROFILE); } - if (wr != null && wr.wasApplied()) { + if (wr.wasApplied()) { return Optional.empty(); } return Optional.of(Cause.ERROR_DELETING_PROFILE); -- GitLab From 327ac3c8774c5ccf3262b300a4ecd14b9e80ca37 Mon Sep 17 00:00:00 2001 From: sergeyPensov Date: Tue, 15 Jan 2019 13:06:04 +0200 Subject: [PATCH 2/4] add additional timeout checking --- .../account/repositories/AccountRepositoryAdditionalImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java index 02d4dd4..beaa74c 100644 --- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java +++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java @@ -495,6 +495,10 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio sagaTransaction.rollBack(); return Optional.of(Cause.ERROR_DELETING_PROFILE); } + } catch (StatusRuntimeException e) { + logger.info("Error while lose connection with bridge"); + sagaTransaction.rollBack(); + return null; } catch (IllegalArgumentException | IllegalStateException e) { logger.info("Exception while deleting account."); logger.debug("Exception while deleting account: {} ...", e.getMessage()); -- GitLab From 69f4607d11b42296e2781e3febda5f4bd979ec75 Mon Sep 17 00:00:00 2001 From: sergeyPensov Date: Wed, 16 Jan 2019 12:19:09 +0200 Subject: [PATCH 3/4] Return optional --- .../account/repositories/AccountRepositoryAdditionalImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java index beaa74c..418a7c7 100644 --- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java +++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java @@ -498,7 +498,7 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio } catch (StatusRuntimeException e) { logger.info("Error while lose connection with bridge"); sagaTransaction.rollBack(); - return null; + return Optional.empty(); } catch (IllegalArgumentException | IllegalStateException e) { logger.info("Exception while deleting account."); logger.debug("Exception while deleting account: {} ...", e.getMessage()); -- GitLab From 42a80cc0d85e71a5952b7564265dd711ee1962e9 Mon Sep 17 00:00:00 2001 From: sergeyPensov Date: Wed, 16 Jan 2019 13:10:10 +0200 Subject: [PATCH 4/4] Return error when erlang connection failed --- .../account/repositories/AccountRepositoryAdditionalImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java index 418a7c7..fbaa1ea 100644 --- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java +++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java @@ -498,7 +498,7 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio } catch (StatusRuntimeException e) { logger.info("Error while lose connection with bridge"); sagaTransaction.rollBack(); - return Optional.empty(); + return Optional.of(Cause.ERROR_DELETING_PROFILE); } catch (IllegalArgumentException | IllegalStateException e) { logger.info("Exception while deleting account."); logger.debug("Exception while deleting account: {} ...", e.getMessage()); -- GitLab