Will truncate GONE bans to only contain the timestamp.
---
 bin/varnishd/cache/cache.h     |    1 +
 bin/varnishd/cache/cache_ban.c |   22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 8a73aa7..582dc0b 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -758,6 +758,7 @@ void BAN_Compile(void);
 struct ban *BAN_RefBan(struct objcore *oc, double t0, const struct ban *tail);
 void BAN_TailDeref(struct ban **ban);
 double BAN_Time(const struct ban *ban);
+void BAN_Spec(const struct ban *ban, const uint8_t **spec, unsigned *len);
 
 /* cache_busyobj.c */
 void VBO_Init(void);
diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index afc9861..d15f6c5 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -637,6 +637,28 @@ BAN_Time(const struct ban *b)
 }
 
 /*--------------------------------------------------------------------
+ *
+ * Get a bans byte spec and length for offline storage purpose
+ * (e.g. persistent stevedores). Truncates GONE bans to only include
+ * the timestamp.
+ */
+
+void
+BAN_Spec(const struct ban *ban, const uint8_t **spec, unsigned *len)
+{
+       CHECK_OBJ_NOTNULL(ban, BAN_MAGIC);
+       AN(spec);
+       AN(len);
+
+       *spec = ban->spec;
+       if (ban->flags & BAN_F_GONE)
+               /* Truncate GONE bans */
+               *len = BANHEAD_LEN_TS;
+       else
+               *len = ban_len(ban->spec);
+}
+
+/*--------------------------------------------------------------------
  * All silos have read their bans, ready for action
  */
 
-- 
1.7.9.5


_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to