HDFS-9132. Pass genstamp to ReplicaAccessorBuilder. (Colin Patrick McCabe via Lei (Eddy) Xu)

This commit is contained in:
Lei Xu 2015-09-25 15:50:19 -07:00
parent 878504dcaa
commit 5eb237d544
4 changed files with 22 additions and 0 deletions

View File

@ -36,6 +36,9 @@ public abstract class ReplicaAccessorBuilder {
public abstract ReplicaAccessorBuilder
setBlock(long blockId, String blockPoolId);
/** Set the genstamp of the block which is being opened. */
public abstract ReplicaAccessorBuilder setGenerationStamp(long genstamp);
/**
* Set whether checksums must be verified. Checksums should be skipped if
* the user has disabled checksum verification in the configuration. Users

View File

@ -968,6 +968,9 @@ Release 2.8.0 - UNRELEASED
HDFS-9112. Improve error message for Haadmin when multiple name service IDs
are configured. (Anu Engineer via jing9)
HDFS-9132. Pass genstamp to ReplicaAccessorBuilder. (Colin Patrick McCabe via
Lei (Eddy) Xu)
OPTIMIZATIONS
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than

View File

@ -383,6 +383,7 @@ private BlockReader tryToCreateExternalBlockReader() {
ReplicaAccessor accessor = builder.
setAllowShortCircuitReads(allowShortCircuitLocalReads).
setBlock(block.getBlockId(), block.getBlockPoolId()).
setGenerationStamp(block.getGenerationStamp()).
setBlockAccessToken(tokenBytes).
setClientName(clientName).
setConfiguration(configuration).

View File

@ -81,6 +81,7 @@ public static class SyntheticReplicaAccessorBuilder
String fileName;
long blockId;
String blockPoolId;
long genstamp;
boolean verifyChecksum;
String clientName;
boolean allowShortCircuit;
@ -100,6 +101,12 @@ public ReplicaAccessorBuilder setBlock(long blockId, String blockPoolId) {
return this;
}
@Override
public ReplicaAccessorBuilder setGenerationStamp(long genstamp) {
this.genstamp = genstamp;
return this;
}
@Override
public ReplicaAccessorBuilder setVerifyChecksum(boolean verifyChecksum) {
this.verifyChecksum = verifyChecksum;
@ -154,12 +161,14 @@ public static class SyntheticReplicaAccessor extends ReplicaAccessor {
int numCloses = 0;
String error = "";
String prefix = "";
final long genstamp;
SyntheticReplicaAccessor(SyntheticReplicaAccessorBuilder builder) {
this.length = builder.visibleLength;
this.contents = DFSTestUtil.
calculateFileContentsFromSeed(SEED, Ints.checkedCast(length));
this.builder = builder;
this.genstamp = builder.genstamp;
String uuid = this.builder.conf.
get(SYNTHETIC_BLOCK_READER_TEST_UUID_KEY);
LinkedList<SyntheticReplicaAccessor> accessorsList =
@ -235,6 +244,10 @@ synchronized String getError() {
return error;
}
long getGenerationStamp() {
return genstamp;
}
synchronized void addError(String text) {
LOG.error("SyntheticReplicaAccessor error: " + text);
error = error + prefix + text;
@ -284,6 +297,8 @@ public void testExternalBlockReader() throws Exception {
Assert.assertEquals(dfs.getClient().clientName,
accessor.builder.clientName);
Assert.assertEquals("/a", accessor.builder.fileName);
Assert.assertEquals(block.getGenerationStamp(),
accessor.getGenerationStamp());
Assert.assertTrue(accessor.builder.verifyChecksum);
Assert.assertEquals(1024L, accessor.builder.visibleLength);
Assert.assertEquals(1024L, accessor.totalRead);