Skip to content

Commit 434ab74

Browse files
authored
Small updates on gcsync client (#829)
* Initial push for gcsync command line tool * Remove unintentional changes * Some updates * Address pr comments * Reimplement gcsbytesource with a cached inputstream * remove unnecessary lines in build.gradle * fix a typo * Remember to close the outputstream * The correct change for last committ * Fix checksumgeneratortest * These lines shouldn't be commented out * Address some comments * Add a timeout for cloud run tasks * Use bytes instead of string to store the 256bit strong check sum which would be more storage efficient * set max timeout to 60 mins
1 parent 1625404 commit 434ab74

File tree

7 files changed

+27
-13
lines changed

7 files changed

+27
-13
lines changed

dbsync/common/src/main/java/com/google/edwmigration/dbsync/common/ChecksumGenerator.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import com.google.common.hash.HashCode;
66
import com.google.common.io.ByteSource;
77
import com.google.common.primitives.Ints;
8+
import com.google.protobuf.ByteString;
89
import java.io.IOException;
910
import java.io.InputStream;
10-
import java.util.function.Consumer;
1111
import org.checkerframework.checker.index.qual.NonNegative;
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
@@ -48,7 +48,8 @@ public void generate(ChecksumConsumer<IOException> out, ByteSource in) throws IO
4848
// Yes, this masks the instance variable.
4949
int blockSize = rollingChecksum.getBlockSize();
5050
if (DEBUG) {
51-
logger.info("Generating checksums for [{} .. +{}] in {} bytes", offset, blockSize, dataSize);
51+
logger.info("Generating checksums for [{} .. +{}] in {} bytes", offset, blockSize,
52+
dataSize);
5253
}
5354

5455
// If someone changes the size of the ByteSource underneath us, this might throw EOFException.
@@ -70,7 +71,7 @@ public void generate(ChecksumConsumer<IOException> out, ByteSource in) throws IO
7071
.setBlockOffset(offset)
7172
.setBlockLength(blockSize)
7273
.setWeakChecksum(weakHashCode)
73-
.setStrongChecksum(strongHashCode.toString())
74+
.setStrongChecksum(ByteString.copyFrom(strongHashCode.asBytes()))
7475
.build();
7576
out.accept(c);
7677
}

dbsync/common/src/main/java/com/google/edwmigration/dbsync/common/InstructionGenerator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.net.URI;
1414
import java.net.URISyntaxException;
1515
import java.util.ArrayList;
16+
import java.util.Arrays;
1617
import java.util.Collection;
1718
import java.util.List;
1819
import java.util.function.Consumer;
@@ -74,9 +75,9 @@ public void generate(InstructionConsumer<? extends IOException> out, ByteSource
7475
// And the wisdom to know the difference.
7576
MATCH:
7677
if (cc != null) {
77-
String strongHashCode = rollingChecksum.getStrongHashCode().toString();
78+
byte[] strongHashCode = rollingChecksum.getStrongHashCode().asBytes();
7879
for (Checksum c : cc) {
79-
if (c.getStrongChecksum().equals(strongHashCode)) {
80+
if (Arrays.equals(c.getStrongChecksum().toByteArray(), strongHashCode)) {
8081
if (literalBufferLength > 0) {
8182
if (DEBUG) {
8283
logger.debug("Emitting pre-match literal");

dbsync/common/src/main/proto/dbsync.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ message Checksum {
1313
uint64 blockOffset = 1;
1414
uint32 blockLength = 2;
1515
int32 weakChecksum = 3;
16-
string strongChecksum = 4;
16+
bytes strongChecksum = 4;
1717
}
1818

1919
message Instruction {

dbsync/common/src/test/java/com/google/edwmigration/dbsync/common/ChecksumGeneratorTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.slf4j.LoggerFactory;
1717

1818
public class ChecksumGeneratorTest {
19+
1920
@SuppressWarnings("unused")
2021
private static final Logger logger = LoggerFactory.getLogger(ChecksumGeneratorTest.class);
2122

@@ -40,10 +41,11 @@ public void testChecksumGenerator() throws Exception {
4041
assertEquals(blockCount, checksums.size());
4142
for (int i = 0; i < blockCount; i++) {
4243
Checksum c = checksums.get(i);
43-
assertEquals(i * blockSize, c.getBlockOffset(),"Bad offset in " + c);
44+
assertEquals(i * blockSize, c.getBlockOffset(), "Bad offset in " + c);
4445
ByteSource block = data.slice(c.getBlockOffset(), c.getBlockLength());
4546
HashCode strongHashCode = block.hash(RollingChecksumImpl.STRONG_HASH_FUNCTION);
46-
assertEquals(strongHashCode.toString(), c.getStrongChecksum(), "Bad hash code in " + c);
47+
assertArrayEquals(strongHashCode.asBytes(), c.getStrongChecksum().toByteArray(),
48+
"Bad hash code in " + c);
4749
}
4850
}
4951
}

dbsync/gcsync/src/main/java/com/google/edwmigration/dbsync/gcsync/Constants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.google.edwmigration.dbsync.gcsync;
22

3+
import com.google.protobuf.Duration;
4+
import com.google.protobuf.util.Durations;
5+
36
public class Constants {
47

58
public static final String FILES_TO_RSYNC_FILE_NAME = "filesToRsync.txt";
@@ -20,4 +23,6 @@ public class Constants {
2023
public static final String GENERATE_CHECK_SUM_MAIN = GenerateCheckSumMain.class.getName();
2124

2225
public static final String RECONSTRUCT_FILE_MAIN = ReconstructFilesMain.class.getName();
26+
27+
public static final Duration CLOUD_RUN_TIMEOUT = Durations.fromMinutes(60);
2328
}

dbsync/gcsync/src/main/java/com/google/edwmigration/dbsync/gcsync/GcsyncClient.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,16 @@ private void uploadRemainingFiles() throws URISyntaxException, IOException {
221221
private void runCloudRunJob(String command, String project)
222222
throws ExecutionException, InterruptedException {
223223
Job job = Job.newBuilder().setTemplate(ExecutionTemplate.newBuilder().setTemplate(
224-
TaskTemplate.newBuilder().addContainers(
225-
Container.newBuilder().setImage("docker.io/getbamba/google-cloud-sdk-java:latest")
226-
.addCommand("/bin/sh")
227-
.addAllArgs(Arrays.asList("-c", command)).build()).build()).build()).build();
224+
TaskTemplate.newBuilder().
225+
setTimeout(Constants.CLOUD_RUN_TIMEOUT).
226+
addContainers(Container.
227+
newBuilder().
228+
setImage("docker.io/getbamba/google-cloud-sdk-java:latest")
229+
.addCommand("/bin/sh")
230+
.addAllArgs(Arrays.asList("-c", command)).build())
231+
.build())
232+
.build())
233+
.build();
228234

229235
String jobId = String.format("gcsync-cloudrun-%s", UUID.randomUUID());
230236
CreateJobRequest createJobRequest = CreateJobRequest.newBuilder()

dbsync/gcsync/src/main/java/com/google/edwmigration/dbsync/gcsync/GenerateCheckSumMain.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.google.edwmigration.dbsync.common.ChecksumGenerator;
88
import com.google.edwmigration.dbsync.common.DefaultArguments;
99
import com.google.edwmigration.dbsync.storage.gcs.GcsStorage;
10-
import java.io.IOException;
1110
import java.io.OutputStream;
1211
import java.net.URI;
1312
import java.util.List;

0 commit comments

Comments
 (0)