HTRACE-313. htraced span receiver clientDropped file should include timestamps (Colin Patrick McCabe via iwasakims)
diff --git a/htrace-htraced/src/main/java/org/apache/htrace/impl/HTracedSpanReceiver.java b/htrace-htraced/src/main/java/org/apache/htrace/impl/HTracedSpanReceiver.java
index 4e6d56a..6e6bb22 100644
--- a/htrace-htraced/src/main/java/org/apache/htrace/impl/HTracedSpanReceiver.java
+++ b/htrace-htraced/src/main/java/org/apache/htrace/impl/HTracedSpanReceiver.java
@@ -27,8 +27,16 @@
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.charset.StandardCharsets;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.Files;
+import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
@@ -88,6 +96,26 @@
private long unbufferableSpans = 0;
+ private static final SimpleDateFormat ISO_DATE_FORMAT;
+
+ private static final Set<PosixFilePermission> DROPPED_SPANS_FILE_PERMS;
+
+ static {
+ ISO_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
+ ISO_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+ if (FileSystems.getDefault().supportedFileAttributeViews().contains("posix")) {
+ DROPPED_SPANS_FILE_PERMS = new HashSet<PosixFilePermission>();
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.OWNER_READ);
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.OWNER_WRITE);
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.GROUP_READ);
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.GROUP_WRITE);
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.OTHERS_READ);
+ DROPPED_SPANS_FILE_PERMS.add(PosixFilePermission.OTHERS_WRITE);
+ } else {
+ DROPPED_SPANS_FILE_PERMS = null;
+ }
+ }
+
static class FaultInjector {
static FaultInjector NO_OP = new FaultInjector();
public void handleContentLengthTrigger(int len) { }
@@ -368,8 +396,9 @@
return;
}
FileLock lock = null;
+ String msg = ISO_DATE_FORMAT.format(new Date()) + ": " + text;
ByteBuffer bb = ByteBuffer.wrap(
- text.getBytes(StandardCharsets.UTF_8));
+ msg.getBytes(StandardCharsets.UTF_8));
// FileChannel locking corresponds to advisory locking on UNIX. It will
// protect multiple processes from attempting to write to the same dropped
// spans log at once. However, within a single process, we need this
@@ -386,6 +415,11 @@
throw new IOException("Dropped spans log " +
conf.droppedSpansLogPath + " is already " + size +
" bytes; will not add to it.");
+ } else if ((size == 0) && (DROPPED_SPANS_FILE_PERMS != null)) {
+ // Set the permissions of the dropped spans file so that other
+ // processes can write to it.
+ Files.setPosixFilePermissions(Paths.get(conf.droppedSpansLogPath),
+ DROPPED_SPANS_FILE_PERMS);
}
channel.write(bb);
} finally {
diff --git a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestDroppedSpans.java b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestDroppedSpans.java
index 8947365..3f336f1 100644
--- a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestDroppedSpans.java
+++ b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestDroppedSpans.java
@@ -105,7 +105,7 @@
put(Conf.ADDRESS_KEY, "127.0.0.1:8080");
put(TracerId.TRACER_ID_KEY, "testWriteToDroppedSpansLog");
put(Conf.DROPPED_SPANS_LOG_PATH_KEY, logPath);
- put(Conf.DROPPED_SPANS_LOG_MAX_SIZE_KEY, "78");
+ put(Conf.DROPPED_SPANS_LOG_MAX_SIZE_KEY, "128");
}});
HTracedSpanReceiver rcvr = new HTracedSpanReceiver(conf);
try {
@@ -123,8 +123,8 @@
List<String> lines =
Files.readAllLines(Paths.get(logPath), StandardCharsets.UTF_8);
Assert.assertEquals(2, lines.size());
- Assert.assertEquals(LINE1, lines.get(0));
- Assert.assertEquals(LINE2, lines.get(1));
+ Assert.assertEquals(LINE1, lines.get(0).substring(25));
+ Assert.assertEquals(LINE2, lines.get(1).substring(25));
} finally {
rcvr.close();
}