[
https://issues.apache.org/jira/browse/BEAM-12740?focusedWorklogId=647500&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-647500
]
ASF GitHub Bot logged work on BEAM-12740:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 07/Sep/21 17:48
Start Date: 07/Sep/21 17:48
Worklog Time Spent: 10m
Work Description: chamikaramj commented on a change in pull request
#15353:
URL: https://github.com/apache/beam/pull/15353#discussion_r703712879
##########
File path:
sdks/java/extensions/google-cloud-platform-core/src/test/java/org/apache/beam/sdk/extensions/gcp/util/GcsUtilTest.java
##########
@@ -1049,6 +1051,48 @@ public void testRenamePropagateMissingException() throws
IOException {
verify(mockStorageRewrite, times(1)).execute();
}
+ @Test
+ public void testRenameSkipDestinationExistsSameBucket() throws IOException {
+ GcsOptions pipelineOptions = gcsOptionsWithTestCredential();
+ GcsUtil gcsUtil = pipelineOptions.getGcsUtil();
+
+ Storage mockStorage = Mockito.mock(Storage.class);
+ gcsUtil.setStorageClient(mockStorage);
+ gcsUtil.setBatchRequestSupplier(() -> new FakeBatcher());
+
+ Storage.Objects mockStorageObjects = Mockito.mock(Storage.Objects.class);
+ Storage.Objects.Rewrite mockStorageRewrite =
Mockito.mock(Storage.Objects.Rewrite.class);
+ Storage.Objects.Delete mockStorageDelete =
Mockito.mock(Storage.Objects.Delete.class);
+
+ when(mockStorage.objects()).thenReturn(mockStorageObjects);
+ when(mockStorageObjects.rewrite("bucket", "s0", "bucket", "d0", null))
+ .thenReturn(mockStorageRewrite);
+ when(mockStorageRewrite.execute()).thenReturn(new
RewriteResponse().setDone(true));
+ when(mockStorageObjects.delete("bucket",
"s0")).thenReturn(mockStorageDelete);
+
+ gcsUtil.rename(
+ makeStrings("s", 1), makeStrings("d", 1),
StandardMoveOptions.SKIP_IF_DESTINATION_EXISTS);
+ verify(mockStorageRewrite, times(1)).execute();
+ verify(mockStorageDelete, times(1)).execute();
+ }
+
+ @Test
+ public void testRenameSkipDestinationExistsDifferentBucket() throws
IOException {
+ GcsOptions pipelineOptions = gcsOptionsWithTestCredential();
+ GcsUtil gcsUtil = pipelineOptions.getGcsUtil();
+
+ Storage mockStorage = Mockito.mock(Storage.class);
+ gcsUtil.setStorageClient(mockStorage);
+
+ assertThrows(
+ UnsupportedOperationException.class,
Review comment:
Could you add a test to FileSystemsTest.java that confirms that this is
handled by FileSystems.java as well ?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 647500)
Time Spent: 6h 40m (was: 6.5h)
> Reduce and backoff GCS metadata operations when writing to GCS files
> --------------------------------------------------------------------
>
> Key: BEAM-12740
> URL: https://issues.apache.org/jira/browse/BEAM-12740
> Project: Beam
> Issue Type: Bug
> Components: io-java-gcp
> Reporter: Sam Whittle
> Assignee: Sam Whittle
> Priority: P2
> Time Spent: 6h 40m
> Remaining Estimate: 0h
>
> When issuing GCS operations affecting metadata (ie file-level operations not
> read/write operations), GCS may return errors indicating backoff. See
> https://cloud.google.com/storage/docs/request-rate#ramp-up
> If such errors are encountered, currently the exception is not handled by
> GcsUtil.java and is propagated, causing retries and backoff of all operations
> at a higher level. Instead we should backoff and retry only such files that
> require it.
> Additionally FileBasedSink issues deletes for files that have been renamed.
> The rename itself should take care of removing the original file and thus we
> can reduce some metadata operations.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)