130 lines
4.0 KiB
Diff
130 lines
4.0 KiB
Diff
From b8861231702ac5df7d5de401e82440c1cf20b633 Mon Sep 17 00:00:00 2001
|
|
From: Bryan Call <bcall@apache.org>
|
|
Date: Tue, 12 Nov 2024 09:51:49 -0800
|
|
Subject: [PATCH] Add matrix params to the cachekey in the cachekey plugin
|
|
(#11856)
|
|
|
|
Origin: https://github.com/apache/trafficserver/commit/b8861231702ac5df7d5de401e82440c1cf20b633
|
|
|
|
---
|
|
plugins/cachekey/cachekey.cc | 21 +++++++++++++++++++++
|
|
plugins/cachekey/cachekey.h | 1 +
|
|
plugins/cachekey/configs.cc | 14 ++++++++++++++
|
|
plugins/cachekey/configs.h | 11 +++++++++++
|
|
plugins/cachekey/plugin.cc | 4 ++++
|
|
5 files changed, 51 insertions(+)
|
|
|
|
diff --git a/plugins/cachekey/cachekey.cc b/plugins/cachekey/cachekey.cc
|
|
index babc78cc999..38286e7eb28 100644
|
|
--- a/plugins/cachekey/cachekey.cc
|
|
+++ b/plugins/cachekey/cachekey.cc
|
|
@@ -673,6 +673,27 @@ CacheKey::appendQuery(const ConfigQuery &config)
|
|
}
|
|
}
|
|
|
|
+void
|
|
+CacheKey::appendMatrix(const ConfigMatrix &config)
|
|
+{
|
|
+ if (config.toBeRemoved()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ const char *matrix;
|
|
+ int length;
|
|
+
|
|
+ matrix = TSUrlHttpParamsGet(_buf, _url, &length);
|
|
+ if (matrix == nullptr || length == 0) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (matrix && length) {
|
|
+ _key.append(";");
|
|
+ _key.append(matrix, length);
|
|
+ }
|
|
+}
|
|
+
|
|
/**
|
|
* @brief Append User-Agent header captures specified in the Pattern configuration object.
|
|
*
|
|
diff --git a/plugins/cachekey/cachekey.h b/plugins/cachekey/cachekey.h
|
|
index 0b47e85984d..dc208f93bb4 100644
|
|
--- a/plugins/cachekey/cachekey.h
|
|
+++ b/plugins/cachekey/cachekey.h
|
|
@@ -63,6 +63,7 @@ class CacheKey
|
|
void appendPath(Pattern &pathCapture, Pattern &pathCaptureUri);
|
|
void appendHeaders(const ConfigHeaders &config);
|
|
void appendQuery(const ConfigQuery &config);
|
|
+ void appendMatrix(const ConfigMatrix &config);
|
|
void appendCookies(const ConfigCookies &config);
|
|
void appendUaCaptures(Pattern &config);
|
|
bool appendUaClass(Classifier &classifier);
|
|
diff --git a/plugins/cachekey/configs.cc b/plugins/cachekey/configs.cc
|
|
index b2bc42d5e70..d6ef13aea68 100644
|
|
--- a/plugins/cachekey/configs.cc
|
|
+++ b/plugins/cachekey/configs.cc
|
|
@@ -208,6 +208,20 @@ ConfigQuery::name() const
|
|
return _NAME;
|
|
}
|
|
|
|
+bool
|
|
+ConfigMatrix::finalize()
|
|
+{
|
|
+ _remove = noIncludeExcludeRules();
|
|
+ return true;
|
|
+}
|
|
+
|
|
+const String ConfigMatrix::_NAME = "matrix parameter";
|
|
+inline const String &
|
|
+ConfigMatrix::name() const
|
|
+{
|
|
+ return _NAME;
|
|
+}
|
|
+
|
|
/**
|
|
* @briefs finalizes the headers related configuration.
|
|
*
|
|
diff --git a/plugins/cachekey/configs.h b/plugins/cachekey/configs.h
|
|
index e98b69afd48..f5d24bdbe3c 100644
|
|
--- a/plugins/cachekey/configs.h
|
|
+++ b/plugins/cachekey/configs.h
|
|
@@ -112,6 +112,16 @@ class ConfigQuery : public ConfigElements
|
|
static const String _NAME;
|
|
};
|
|
|
|
+class ConfigMatrix : public ConfigElements
|
|
+{
|
|
+public:
|
|
+ bool finalize() override;
|
|
+
|
|
+private:
|
|
+ const String &name() const override;
|
|
+ static const String _NAME;
|
|
+};
|
|
+
|
|
/**
|
|
* @brief Headers configuration class.
|
|
*/
|
|
@@ -210,6 +220,7 @@ class Configs
|
|
/* Make the following members public to avoid unnecessary accessors */
|
|
ConfigQuery _query; /**< @brief query parameter related configuration */
|
|
ConfigHeaders _headers; /**< @brief headers related configuration */
|
|
+ ConfigMatrix _matrix; /**< @brief matrix parameter related configuration */
|
|
ConfigCookies _cookies; /**< @brief cookies related configuration */
|
|
Pattern _uaCapture; /**< @brief the capture groups and the replacement string used for the User-Agent header capture */
|
|
String _prefix; /**< @brief cache key prefix string */
|
|
diff --git a/plugins/cachekey/plugin.cc b/plugins/cachekey/plugin.cc
|
|
index d92c079271a..b863b94a0d5 100644
|
|
--- a/plugins/cachekey/plugin.cc
|
|
+++ b/plugins/cachekey/plugin.cc
|
|
@@ -64,6 +64,10 @@ setCacheKey(TSHttpTxn txn, Configs *config, TSRemapRequestInfo *rri = nullptr)
|
|
if (!config->pathToBeRemoved()) {
|
|
cachekey.appendPath(config->_pathCapture, config->_pathCaptureUri);
|
|
}
|
|
+
|
|
+ /* Append the matrix parameters to the cache key. */
|
|
+ cachekey.appendMatrix(config->_matrix);
|
|
+
|
|
/* Append query parameters to the cache key. */
|
|
cachekey.appendQuery(config->_query);
|
|
|