From 995efca635bffc58b6209d040e8c96cd88816880 Mon Sep 17 00:00:00 2001 From: ayushagarwalfb <76486670+ayushagarwalfb@users.noreply.github.com> Date: Wed, 3 Mar 2021 11:54:54 +0000 Subject: [PATCH] Downgrade logging from severe to info for attributed errors that do not require developer action or investigation (#966) --- .../FacebookSessionInvalidatedException.java | 32 ------------------ .../FacebookUnconfirmedUserException.java | 33 ------------------- .../FacebookUserCheckpointedException.java | 16 --------- .../facebook/utils/FacebookTransferUtils.java | 14 ++++---- .../spi/transfer/types/FailureReasons.java | 7 ++-- .../types/SessionInvalidatedException.java | 16 +++++++++ .../types/UnconfirmedUserException.java | 16 +++++++++ .../types/UserCheckpointedException.java | 16 +++++++++ .../transfer/JobProcessor.java | 27 ++++++++++----- ...PortabilityAbstractInMemoryDataCopier.java | 3 -- 10 files changed, 79 insertions(+), 101 deletions(-) delete mode 100644 extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookSessionInvalidatedException.java delete mode 100644 extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUnconfirmedUserException.java delete mode 100644 extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUserCheckpointedException.java create mode 100644 portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/SessionInvalidatedException.java create mode 100644 portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UnconfirmedUserException.java create mode 100644 portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UserCheckpointedException.java diff --git a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookSessionInvalidatedException.java b/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookSessionInvalidatedException.java deleted file mode 100644 index d96b9df1d..000000000 --- a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookSessionInvalidatedException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2020 The Data Transfer Project Authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.datatransferproject.transfer.facebook.exceptions; - -import javax.annotation.Nonnull; -import org.datatransferproject.spi.transfer.types.CopyExceptionWithFailureReason; - -public class FacebookSessionInvalidatedException extends CopyExceptionWithFailureReason { - public FacebookSessionInvalidatedException(String message, Throwable cause) { - super(message, cause); - } - - @Nonnull - @Override - public String getFailureReason() { - return "SESSION_INVALIDATED"; - } -} diff --git a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUnconfirmedUserException.java b/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUnconfirmedUserException.java deleted file mode 100644 index 2bd64f02e..000000000 --- a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUnconfirmedUserException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020 The Data Transfer Project Authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.datatransferproject.transfer.facebook.exceptions; - -import javax.annotation.Nonnull; -import org.datatransferproject.spi.transfer.types.CopyExceptionWithFailureReason; - -public class FacebookUnconfirmedUserException extends CopyExceptionWithFailureReason { - - public FacebookUnconfirmedUserException(String message, Throwable cause) { - super(message, cause); - } - - @Nonnull - @Override - public String getFailureReason() { - return "UNCONFIRMED_USER"; - } -} diff --git a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUserCheckpointedException.java b/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUserCheckpointedException.java deleted file mode 100644 index 45118a823..000000000 --- a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/exceptions/FacebookUserCheckpointedException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.datatransferproject.transfer.facebook.exceptions; - -import javax.annotation.Nonnull; -import org.datatransferproject.spi.transfer.types.CopyExceptionWithFailureReason; - -public class FacebookUserCheckpointedException extends CopyExceptionWithFailureReason { - public FacebookUserCheckpointedException(String message, Throwable cause) { - super(message, cause); - } - - @Nonnull - @Override - public String getFailureReason() { - return "USER_CHECKPOINTED"; - } -} diff --git a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/utils/FacebookTransferUtils.java b/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/utils/FacebookTransferUtils.java index 3734c754a..fa7d95b21 100644 --- a/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/utils/FacebookTransferUtils.java +++ b/extensions/data-transfer/portability-data-transfer-facebook/src/main/java/org/datatransferproject/transfer/facebook/utils/FacebookTransferUtils.java @@ -18,9 +18,9 @@ import com.restfb.exception.FacebookOAuthException; import org.datatransferproject.spi.transfer.types.CopyExceptionWithFailureReason; -import org.datatransferproject.transfer.facebook.exceptions.FacebookSessionInvalidatedException; -import org.datatransferproject.transfer.facebook.exceptions.FacebookUnconfirmedUserException; -import org.datatransferproject.transfer.facebook.exceptions.FacebookUserCheckpointedException; +import org.datatransferproject.spi.transfer.types.SessionInvalidatedException; +import org.datatransferproject.spi.transfer.types.UnconfirmedUserException; +import org.datatransferproject.spi.transfer.types.UserCheckpointedException; public class FacebookTransferUtils { @@ -28,15 +28,15 @@ public static FacebookOAuthException handleFacebookOAuthException(FacebookOAuthE throws CopyExceptionWithFailureReason { String message = e.getMessage(); if (message != null && message.contains("the user is not a confirmed user")) { - throw new FacebookUnconfirmedUserException( + throw new UnconfirmedUserException( "The user account is not confirmed or deactivated", e); } else if (message != null && message.contains("code 190, subcode 459")) { // Throw out exception for known user checkpointed error from Graph API - throw new FacebookUserCheckpointedException("The user has been checkpointed", e); + throw new UserCheckpointedException("The user has been checkpointed", e); } else if (message != null && message.contains("code 190, subcode 460")) { - throw new FacebookSessionInvalidatedException("The user session has been invalidated", e); + throw new SessionInvalidatedException("The user session has been invalidated", e); } else if (message != null && message.contains("code 190, subcode 463")) { - throw new FacebookSessionInvalidatedException("The user session has expired", e); + throw new SessionInvalidatedException("The user session has expired", e); } else { return e; } diff --git a/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/FailureReasons.java b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/FailureReasons.java index f61973772..fd8bcaa35 100644 --- a/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/FailureReasons.java +++ b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/FailureReasons.java @@ -1,11 +1,14 @@ package org.datatransferproject.spi.transfer.types; public enum FailureReasons { + CREDS_TIMEOUT("CREDS_TIMEOUT"), DESTINATION_FULL("DESTINATION_FULL"), INVALID_TOKEN("INVALID_TOKEN"), PERMISSION_DENIED("PERMISSION_DENIED"), - CREDS_TIMEOUT("CREDS_TIMEOUT"), - UPLOAD_ERROR("UPLOAD_ERROR"); + SESSION_INVALIDATED("SESSION_INVALIDATED"), + UNCONFIRMED_USER("UNCONFIRMED_USER"), + UPLOAD_ERROR("UPLOAD_ERROR"), + USER_CHECKPOINTED("USER_CHECKPOINTED"); private final String string; diff --git a/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/SessionInvalidatedException.java b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/SessionInvalidatedException.java new file mode 100644 index 000000000..312918781 --- /dev/null +++ b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/SessionInvalidatedException.java @@ -0,0 +1,16 @@ +package org.datatransferproject.spi.transfer.types; + +import javax.annotation.Nonnull; + +public class SessionInvalidatedException extends CopyExceptionWithFailureReason { + + public SessionInvalidatedException(String message, Throwable cause) { + super(message, cause); + } + + @Nonnull + @Override + public String getFailureReason() { + return FailureReasons.SESSION_INVALIDATED.toString(); + } +} diff --git a/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UnconfirmedUserException.java b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UnconfirmedUserException.java new file mode 100644 index 000000000..afa58e94d --- /dev/null +++ b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UnconfirmedUserException.java @@ -0,0 +1,16 @@ +package org.datatransferproject.spi.transfer.types; + +import javax.annotation.Nonnull; + +public class UnconfirmedUserException extends CopyExceptionWithFailureReason { + + public UnconfirmedUserException(String message, Throwable cause) { + super(message, cause); + } + + @Nonnull + @Override + public String getFailureReason() { + return FailureReasons.UNCONFIRMED_USER.toString(); + } +} diff --git a/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UserCheckpointedException.java b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UserCheckpointedException.java new file mode 100644 index 000000000..8b0f215ae --- /dev/null +++ b/portability-spi-transfer/src/main/java/org/datatransferproject/spi/transfer/types/UserCheckpointedException.java @@ -0,0 +1,16 @@ +package org.datatransferproject.spi.transfer.types; + +import javax.annotation.Nonnull; + +public class UserCheckpointedException extends CopyExceptionWithFailureReason { + + public UserCheckpointedException(String message, Throwable cause) { + super(message, cause); + } + + @Nonnull + @Override + public String getFailureReason() { + return FailureReasons.USER_CHECKPOINTED.toString(); + } +} diff --git a/portability-transfer/src/main/java/org/datatransferproject/transfer/JobProcessor.java b/portability-transfer/src/main/java/org/datatransferproject/transfer/JobProcessor.java index e82ee11b5..6d58b54ed 100644 --- a/portability-transfer/src/main/java/org/datatransferproject/transfer/JobProcessor.java +++ b/portability-transfer/src/main/java/org/datatransferproject/transfer/JobProcessor.java @@ -36,6 +36,7 @@ import org.datatransferproject.spi.transfer.security.AuthDataDecryptService; import org.datatransferproject.spi.transfer.types.CopyException; import org.datatransferproject.spi.transfer.types.CopyExceptionWithFailureReason; +import org.datatransferproject.spi.transfer.types.FailureReasons; import org.datatransferproject.transfer.copier.InMemoryDataCopier; import org.datatransferproject.types.common.ExportInformation; import org.datatransferproject.types.transfer.auth.AuthData; @@ -131,14 +132,24 @@ void processJob() { () -> format("Finished copy for jobId: %s with %d error(s).", jobId, numErrors)); success = errors.isEmpty(); } catch (CopyExceptionWithFailureReason e) { - monitor.severe( - () -> - format( - "Error with failure code '%s' while processing jobId: %s", - e.getFailureReason(), jobId), - e, - EventCode.WORKER_JOB_ERRORED); - addFailureReasonToJob(jobId, e.getFailureReason()); + String failureReason = e.getFailureReason(); + if (failureReason.contains(FailureReasons.DESTINATION_FULL.toString())) { + monitor.info(() -> "The remaining storage in the user's account is not enough to perform this operation.", e); + } else if (failureReason.contains(FailureReasons.INVALID_TOKEN.toString()) || + failureReason.contains(FailureReasons.SESSION_INVALIDATED.toString()) || + failureReason.contains(FailureReasons.UNCONFIRMED_USER.toString()) || + failureReason.contains(FailureReasons.USER_CHECKPOINTED.toString())) { + monitor.info(() -> "Got token error", e); + } else { + monitor.severe( + () -> + format( + "Error with failure code '%s' while processing jobId: %s", + failureReason, jobId), + e, + EventCode.WORKER_JOB_ERRORED); + } + addFailureReasonToJob(jobId, failureReason); } catch (IOException | CopyException | RuntimeException e) { monitor.severe(() -> "Error processing jobId: " + jobId, e, EventCode.WORKER_JOB_ERRORED); } finally { diff --git a/portability-transfer/src/main/java/org/datatransferproject/transfer/copier/PortabilityAbstractInMemoryDataCopier.java b/portability-transfer/src/main/java/org/datatransferproject/transfer/copier/PortabilityAbstractInMemoryDataCopier.java index e7e4934d5..5d9aa15ec 100644 --- a/portability-transfer/src/main/java/org/datatransferproject/transfer/copier/PortabilityAbstractInMemoryDataCopier.java +++ b/portability-transfer/src/main/java/org/datatransferproject/transfer/copier/PortabilityAbstractInMemoryDataCopier.java @@ -15,8 +15,6 @@ */ package org.datatransferproject.transfer.copier; -import static java.lang.String.format; - import com.google.common.base.Stopwatch; import com.google.inject.Provider; import java.io.IOException; @@ -161,7 +159,6 @@ protected ExportResult copyIteration( } } } catch (RetryException | RuntimeException e) { - monitor.severe(() -> "Got error importing data", e); if (e.getClass() == RetryException.class && CopyExceptionWithFailureReason.class.isAssignableFrom(e.getCause().getClass())) { throw (CopyExceptionWithFailureReason) e.getCause();