Author: adulceanu
Date: Mon Sep 25 11:24:59 2017
New Revision: 1809603
URL: http://svn.apache.org/viewvc?rev=1809603&view=rev
Log:
OAK-6673 - Improve cold standby logging
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ChunkedBlobStream.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferencesReader.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/FileStoreUtil.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
Mon Sep 25 11:24:59 2017
@@ -212,4 +212,8 @@ class StandbyClient implements AutoClose
return response.getReferences();
}
+ public int getReadTimeoutMs() {
+ return readTimeoutMs;
+ }
+
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
Mon Sep 25 11:24:59 2017
@@ -103,7 +103,7 @@ public final class StandbyClientSync imp
try {
jmxServer.registerMBean(new StandardMBean(this,
ClientStandbyStatusMBean.class), new ObjectName(this.getMBeanName()));
} catch (Exception e) {
- log.error("can register standby status mbean", e);
+ log.error("cannot register standby status mbean", e);
}
}
@@ -119,7 +119,7 @@ public final class StandbyClientSync imp
try {
jmxServer.unregisterMBean(new ObjectName(this.getMBeanName()));
} catch (Exception e) {
- log.error("can unregister standby status mbean", e);
+ log.error("cannot unregister standby status mbean", e);
}
closeGroup();
observer.unregister();
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
Mon Sep 25 11:24:59 2017
@@ -78,7 +78,7 @@ class StandbyClientSyncExecution {
compareAgainstBaseState(current, before, builder);
boolean ok = store.getRevisions().setHead(before.getRecordId(),
remoteHead);
store.flush();
- log.debug("updated head state successfully: {} in {}ms.", ok,
System.currentTimeMillis() - t);
+ log.info("updated head state successfully: {} in {}ms.", ok,
System.currentTimeMillis() - t);
}
@Nullable
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyDiff.java
Mon Sep 25 11:24:59 2017
@@ -204,7 +204,8 @@ class StandbyDiff implements NodeStateDi
InputStream in = client.getBlob(blobId);
if (in == null) {
- throw new IllegalStateException("Unable to load remote blob " +
blobId + " at " + path + "#" + pName);
+ throw new IllegalStateException("Unable to load remote blob " +
blobId + " at " + path + "#" + pName
+ + " in " + client.getReadTimeoutMs() + "ms. Please
increase the timeout and try again.");
}
try {
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ChunkedBlobStream.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ChunkedBlobStream.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ChunkedBlobStream.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ChunkedBlobStream.java
Mon Sep 25 11:24:59 2017
@@ -17,6 +17,8 @@
package org.apache.jackrabbit.oak.segment.standby.codec;
+import static
org.apache.jackrabbit.oak.segment.standby.server.FileStoreUtil.roundDiv;
+
import java.io.InputStream;
import java.io.PushbackInputStream;
@@ -123,8 +125,8 @@ public class ChunkedBlobStream implement
decorated = decorateRawBuffer(allocator, buffer);
offset += written;
- log.info("Sending chunk {}/{} of size {} to client {}",
roundDiv(offset, chunkSize),
- roundDiv(length, chunkSize), written, clientId);
+ log.debug("Sending chunk {}/{} of size {} from blob {} to client
{}", roundDiv(offset, chunkSize),
+ roundDiv(length, chunkSize), written, blobId, clientId);
release = false;
return decorated;
@@ -159,10 +161,6 @@ public class ChunkedBlobStream implement
return out;
}
- private static int roundDiv(long x, int y) {
- return (int) Math.ceil((double) x / (double) y);
- }
-
private byte createMask(int bytesRead) {
byte mask = 0;
if (offset == 0) {
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoder.java
Mon Sep 25 11:24:59 2017
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.segmen
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
+import static
org.apache.jackrabbit.oak.segment.standby.server.FileStoreUtil.roundDiv;
import java.io.File;
import java.io.FileInputStream;
@@ -70,6 +71,8 @@ public class ResponseDecoder extends Byt
}
}
+ private int blobChunkSize;
+
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object>
out) throws Exception {
int length = in.readInt();
@@ -122,7 +125,7 @@ public class ResponseDecoder extends Byt
out.add(new GetSegmentResponse(null, segmentId, data));
}
- private static void decodeGetBlobResponse(int length, ByteBuf in,
List<Object> out) throws IOException {
+ private void decodeGetBlobResponse(int length, ByteBuf in, List<Object>
out) throws IOException {
byte mask = in.readByte();
long blobLength = in.readLong();
@@ -134,6 +137,8 @@ public class ResponseDecoder extends Byt
// START_CHUNK flag enabled
if ((mask & (1 << 0)) != 0) {
+ blobChunkSize = in.readableBytes() - 8;
+
if (tempFile.exists()) {
log.debug("Detected previous incomplete transfer for {}.
Cleaning up...", blobId);
Files.delete(tempFile.toPath());
@@ -142,7 +147,8 @@ public class ResponseDecoder extends Byt
long hash = in.readLong();
- log.debug("Received chunk of size {} from blob {} ",
in.readableBytes(), blobId);
+ log.debug("Received chunk {}/{} of size {} from blob {}",
roundDiv(tempFile.length() + in.readableBytes(), blobChunkSize),
+ roundDiv(blobLength, blobChunkSize), in.readableBytes(),
blobId);
byte[] chunkData = new byte[in.readableBytes()];
in.readBytes(chunkData);
@@ -164,7 +170,8 @@ public class ResponseDecoder extends Byt
FileInputStream fis = new
DeleteOnCloseFileInputStream(tempFile);
out.add(new GetBlobResponse(null, blobId, fis,
fis.getChannel().size()));
} else {
- log.debug("Size mismatch for blob {}", blobId);
+ log.debug("Blob {} discarded due to size mismatch. Expected
size: {}, actual size: {} ", blobId,
+ blobLength, tempFile.length());
}
}
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferencesReader.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferencesReader.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferencesReader.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferencesReader.java
Mon Sep 25 11:24:59 2017
@@ -25,13 +25,9 @@ import java.util.UUID;
import org.apache.jackrabbit.oak.segment.Segment;
import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
class DefaultStandbyReferencesReader implements StandbyReferencesReader {
- private static final Logger log =
LoggerFactory.getLogger(DefaultStandbyReferencesReader.class);
-
private final FileStore store;
DefaultStandbyReferencesReader(FileStore store) {
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/FileStoreUtil.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/FileStoreUtil.java?rev=1809603&r1=1809602&r2=1809603&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/FileStoreUtil.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/FileStoreUtil.java
Mon Sep 25 11:24:59 2017
@@ -25,7 +25,7 @@ import org.apache.jackrabbit.oak.segment
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-final class FileStoreUtil {
+public final class FileStoreUtil {
private static final Logger log =
LoggerFactory.getLogger(FileStoreUtil.class);
@@ -33,6 +33,10 @@ final class FileStoreUtil {
// Prevent instantiation
}
+ public static int roundDiv(long x, int y) {
+ return (int) Math.ceil((double) x / (double) y);
+ }
+
static Segment readSegmentWithRetry(FileStore store, SegmentId id) {
for (int i = 0; i < 160; i++) {
if (store.containsSegment(id)) {