Mark Bergsma has submitted this change and it was merged.

Change subject: When reading offline VSL files (-r ..) make a copy of each 
matched tags data since the data is volatile.
......................................................................


When reading offline VSL files (-r ..) make a copy of each matched tags data 
since the data is volatile.

This is controlled manually by the new 'log.data.copy = true|false' config 
property
which defaults to true.

Increases the scratch pad per logline from 512 to 2K.

Change-Id: I8935d10eae2496a2096a44f9f10d89585a48ae8c
---
M config.c
M varnishkafka.c
M varnishkafka.conf.example
M varnishkafka.h
4 files changed, 38 insertions(+), 4 deletions(-)

Approvals:
  Mark Bergsma: Verified; Looks good to me, approved



diff --git a/config.c b/config.c
index feb5479..9ad9648 100644
--- a/config.c
+++ b/config.c
@@ -169,8 +169,9 @@
                                 "try \"stdout\" or \"kafka\"", val);
                        return -1;
                }
-
-       } else if (!strncmp(name, "varnish.arg.", strlen("varnish.arg."))) {
+       } else if (!strcmp(name, "log.data.copy"))
+               conf.datacopy = conf_tof(val);
+       else if (!strncmp(name, "varnish.arg.", strlen("varnish.arg."))) {
                const char *t = name + strlen("varnish.arg.");
                int r = 0;
                if (*t == '-')
diff --git a/varnishkafka.c b/varnishkafka.c
index 368a361..1fafeae 100644
--- a/varnishkafka.c
+++ b/varnishkafka.c
@@ -306,6 +306,24 @@
        return len;
 }
 
+/**
+ * Same as scratch_write0() but calls match_assign0() directly, thus
+ * not supporting escaping.
+ */
+static inline int scratch_write0 (const struct tag *tag, struct logline *lp,
+                                const char *src, int len) {
+       char *dst;
+
+       if (unlikely((dst = scratch_alloc(tag, lp, len)) == NULL))
+               return -1;
+
+       memcpy(dst, src, len);
+
+       match_assign0(tag, lp, dst, len);
+
+       return len;
+}
+
 
 /**
  * Writes 'src' of 'len' bytes to scratch buffer, escaping
@@ -444,7 +462,10 @@
                scratch_write_escaped(tag, lp, ptr, len);
 
        } else {
-               match_assign0(tag, lp, ptr, len);
+               if (conf.datacopy) /* copy volatile data */
+                       scratch_write0(tag, lp, ptr, len);
+               else  /* point to persistent data */
+                       match_assign0(tag, lp, ptr, len);
        }
 }
 
diff --git a/varnishkafka.conf.example b/varnishkafka.conf.example
index a28bdd0..c8171b0 100644
--- a/varnishkafka.conf.example
+++ b/varnishkafka.conf.example
@@ -86,6 +86,17 @@
 output = kafka
 
 
+# EXPERIMENTAL
+# Indicates if the log tag data read from VSL files should be copied instantly
+# when read (true). If this is set to false the data is assumed to be
+# persistent (for the duration of collecting and formatting a single request)
+# and no copies will be made, thus improving performance.
+#
+# NOTE:
+#   Must be set to true for offline files (-r file..) due to the way
+#   libvarnishapi reads its data.
+log.data.copy = true
+
 
 # Start for sequence number (%n)
 # Either a number, or the string "time" which will set it to the current
diff --git a/varnishkafka.h b/varnishkafka.h
index f118b84..7a3ce13 100644
--- a/varnishkafka.h
+++ b/varnishkafka.h
@@ -68,7 +68,7 @@
 
        /* Scratch pad */
        int      sof;
-       char     scratch[512];  /* Must be at end of struct */
+       char     scratch[2048];  /* Must be at end of struct */
 };
 
 
@@ -128,6 +128,7 @@
 
        uint64_t    sequence_number;
 
+       int         datacopy;
        enum {
                VK_FORMAT_STRING,
                VK_FORMAT_JSON,

-- 
To view, visit https://gerrit.wikimedia.org/r/79748
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I8935d10eae2496a2096a44f9f10d89585a48ae8c
Gerrit-PatchSet: 1
Gerrit-Project: operations/software/varnish/varnishkafka
Gerrit-Branch: master
Gerrit-Owner: Edenhill <mag...@edenhill.se>
Gerrit-Reviewer: BBlack <bbl...@wikimedia.org>
Gerrit-Reviewer: Mark Bergsma <m...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to