Skip to content

Commit 419b32f

Browse files
Add capability to add external documentation link in GCPErrorDetailsProvider
1 parent 77bdf7e commit 419b32f

File tree

5 files changed

+47
-7
lines changed

5 files changed

+47
-7
lines changed

src/main/java/io/cdap/plugin/gcp/common/GCPErrorDetailsProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
2020
import com.google.api.client.http.HttpResponseException;
21+
import com.google.common.base.Strings;
2122
import com.google.common.base.Throwables;
2223
import io.cdap.cdap.api.exception.ErrorCategory;
2324
import io.cdap.cdap.api.exception.ErrorCategory.ErrorCategoryEnum;
@@ -75,10 +76,20 @@ private ProgramFailureException getProgramFailureException(HttpResponseException
7576
GoogleJsonResponseException exception = (GoogleJsonResponseException) e;
7677
errorMessage = exception.getDetails() != null ? exception.getDetails().getMessage() :
7778
exception.getMessage();
79+
80+
String externalDocumentationLink = getExternalDocumentationLink();
81+
if (!Strings.isNullOrEmpty(externalDocumentationLink)) {
82+
errorReason = String.format("%s For more details, see%s", errorReason,
83+
externalDocumentationLink);
84+
}
7885
}
7986

8087
return ErrorUtils.getProgramFailureException(new ErrorCategory(ErrorCategoryEnum.PLUGIN),
8188
errorReason, String.format(errorMessageFormat, errorContext.getPhase(), errorMessage),
8289
pair.getErrorType(), true, e);
8390
}
91+
92+
protected String getExternalDocumentationLink() {
93+
return null;
94+
}
8495
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright © 2024 Cask Data, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
17+
package io.cdap.plugin.gcp.gcs;
18+
19+
import io.cdap.plugin.gcp.common.GCPErrorDetailsProvider;
20+
21+
/**
22+
* A custom ErrorDetailsProvider for GCS plugins.
23+
*/
24+
public class GCSErrorDetailsProvider extends GCPErrorDetailsProvider {
25+
26+
@Override
27+
protected String getExternalDocumentationLink() {
28+
return "https://cloud.google.com/storage/docs/json_api/v1/status-codes";
29+
}
30+
}

src/main/java/io/cdap/plugin/gcp/gcs/sink/GCSBatchSink.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@
5252
import io.cdap.plugin.format.plugin.FileSinkProperties;
5353
import io.cdap.plugin.gcp.common.CmekUtils;
5454
import io.cdap.plugin.gcp.common.GCPConnectorConfig;
55-
import io.cdap.plugin.gcp.common.GCPErrorDetailsProvider;
5655
import io.cdap.plugin.gcp.common.GCPUtils;
5756
import io.cdap.plugin.gcp.gcs.Formats;
57+
import io.cdap.plugin.gcp.gcs.GCSErrorDetailsProvider;
5858
import io.cdap.plugin.gcp.gcs.GCSPath;
5959
import io.cdap.plugin.gcp.gcs.StorageClient;
6060
import io.cdap.plugin.gcp.gcs.connector.GCSConnector;
@@ -166,7 +166,7 @@ public void prepareRun(BatchSinkContext context) throws Exception {
166166

167167
// set error details provider
168168
context.setErrorDetailsProvider(
169-
new ErrorDetailsProviderSpec(GCPErrorDetailsProvider.class.getName()));
169+
new ErrorDetailsProviderSpec(GCSErrorDetailsProvider.class.getName()));
170170

171171
// super is called down here to avoid instantiating the lineage recorder with a null asset
172172
super.prepareRun(context);

src/main/java/io/cdap/plugin/gcp/gcs/sink/GCSMultiBatchSink.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
import io.cdap.plugin.common.batch.sink.SinkOutputFormatProvider;
4747
import io.cdap.plugin.format.FileFormat;
4848
import io.cdap.plugin.gcp.common.CmekUtils;
49-
import io.cdap.plugin.gcp.common.GCPErrorDetailsProvider;
5049
import io.cdap.plugin.gcp.common.GCPUtils;
50+
import io.cdap.plugin.gcp.gcs.GCSErrorDetailsProvider;
5151
import io.cdap.plugin.gcp.gcs.connector.GCSConnector;
5252
import org.apache.hadoop.io.NullWritable;
5353
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
@@ -173,7 +173,7 @@ public void prepareRun(BatchSinkContext context) throws IOException, Instantiati
173173

174174
// set error details provider
175175
context.setErrorDetailsProvider(
176-
new ErrorDetailsProviderSpec(GCPErrorDetailsProvider.class.getName()));
176+
new ErrorDetailsProviderSpec(GCSErrorDetailsProvider.class.getName()));
177177

178178
Map<String, String> baseProperties = GCPUtils.getFileSystemProperties(config.connection,
179179
config.getPath(), new HashMap<>());

src/main/java/io/cdap/plugin/gcp/gcs/source/GCSSource.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import io.cdap.cdap.api.annotation.MetadataProperty;
2929
import io.cdap.cdap.api.annotation.Name;
3030
import io.cdap.cdap.api.annotation.Plugin;
31-
import io.cdap.cdap.api.exception.ErrorUtils;
3231
import io.cdap.cdap.etl.api.FailureCollector;
3332
import io.cdap.cdap.etl.api.PipelineConfigurer;
3433
import io.cdap.cdap.etl.api.batch.BatchSource;
@@ -44,10 +43,10 @@
4443
import io.cdap.plugin.format.plugin.AbstractFileSourceConfig;
4544
import io.cdap.plugin.format.plugin.FileSourceProperties;
4645
import io.cdap.plugin.gcp.common.GCPConnectorConfig;
47-
import io.cdap.plugin.gcp.common.GCPErrorDetailsProvider;
4846
import io.cdap.plugin.gcp.common.GCPUtils;
4947
import io.cdap.plugin.gcp.common.GCSEmptyInputFormat;
5048
import io.cdap.plugin.gcp.crypto.EncryptedFileSystem;
49+
import io.cdap.plugin.gcp.gcs.GCSErrorDetailsProvider;
5150
import io.cdap.plugin.gcp.gcs.GCSPath;
5251
import io.cdap.plugin.gcp.gcs.connector.GCSConnector;
5352

@@ -143,7 +142,7 @@ public void prepareRun(BatchSourceContext context) throws Exception {
143142

144143
// set error details provider
145144
context.setErrorDetailsProvider(
146-
new ErrorDetailsProviderSpec(GCPErrorDetailsProvider.class.getName()));
145+
new ErrorDetailsProviderSpec(GCSErrorDetailsProvider.class.getName()));
147146

148147
// super is called down here to avoid instantiating the lineage recorder with a null asset
149148
super.prepareRun(context);

0 commit comments

Comments
 (0)