This is an automated email from the ASF dual-hosted git repository.
maskit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new 8b2e21a178 Remove the direct dependency for HttpCacheSM from
iocore/cache (#10721)
8b2e21a178 is described below
commit 8b2e21a1781adee7796991e2cc2a0356f5d3fe42
Author: Masakazu Kitajo <[email protected]>
AuthorDate: Tue Nov 28 05:39:36 2023 +0900
Remove the direct dependency for HttpCacheSM from iocore/cache (#10721)
* Remove the direct dependency for HttpCacheSM from iocore/cache
* Update tests
* Fix typo
---
include/iocore/cache/CacheDefs.h | 3 ++-
src/iocore/cache/CacheRead.cc | 5 +----
src/iocore/cache/unit_tests/CacheTestHandler.cc | 2 ++
src/iocore/cache/unit_tests/main.cc | 3 +++
src/iocore/cache/unit_tests/test_Alternate_S_to_L.cc | 2 ++
src/iocore/cache/unit_tests/test_RWW.cc | 7 +++++++
src/iocore/cache/unit_tests/test_Update_S_to_L.cc | 2 ++
src/proxy/http/HttpCacheSM.cc | 4 ++++
8 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/include/iocore/cache/CacheDefs.h b/include/iocore/cache/CacheDefs.h
index 8165ce1973..e6e36e7028 100644
--- a/include/iocore/cache/CacheDefs.h
+++ b/include/iocore/cache/CacheDefs.h
@@ -75,7 +75,8 @@ enum CacheEventType {
CACHE_EVENT_LOOKUP_FAILED = CACHE_EVENT_EVENTS_START + 1,
CACHE_EVENT_OPEN_READ = CACHE_EVENT_EVENTS_START + 2,
CACHE_EVENT_OPEN_READ_FAILED = CACHE_EVENT_EVENTS_START + 3,
- // 4-7 unused
+ CACHE_EVENT_OPEN_READ_RWW = CACHE_EVENT_EVENTS_START + 4,
+ // 5-7 unused
CACHE_EVENT_OPEN_WRITE = CACHE_EVENT_EVENTS_START + 8,
CACHE_EVENT_OPEN_WRITE_FAILED = CACHE_EVENT_EVENTS_START + 9,
CACHE_EVENT_REMOVE = CACHE_EVENT_EVENTS_START + 12,
diff --git a/src/iocore/cache/CacheRead.cc b/src/iocore/cache/CacheRead.cc
index 19c35e96d2..7270ba5a5e 100644
--- a/src/iocore/cache/CacheRead.cc
+++ b/src/iocore/cache/CacheRead.cc
@@ -23,8 +23,6 @@
#include "P_Cache.h"
-#include "proxy/http/HttpCacheSM.h" //Added to get the scope of HttpCacheSM
object.
-
namespace
{
@@ -168,8 +166,7 @@ Lmiss:
cont->handleEvent(CACHE_EVENT_OPEN_READ_FAILED, (void *)-ECACHE_NO_DOC);
return ACTION_RESULT_DONE;
Lwriter:
- // this is a horrible violation of the interface and should be fixed (FIXME)
- ((HttpCacheSM *)cont)->set_readwhilewrite_inprogress(true);
+ cont->handleEvent(CACHE_EVENT_OPEN_READ_RWW, nullptr);
SET_CONTINUATION_HANDLER(c, &CacheVC::openReadFromWriter);
if (c->handleEvent(EVENT_IMMEDIATE, nullptr) == EVENT_DONE) {
return ACTION_RESULT_DONE;
diff --git a/src/iocore/cache/unit_tests/CacheTestHandler.cc
b/src/iocore/cache/unit_tests/CacheTestHandler.cc
index f3b9b1470f..6a45c4f594 100644
--- a/src/iocore/cache/unit_tests/CacheTestHandler.cc
+++ b/src/iocore/cache/unit_tests/CacheTestHandler.cc
@@ -60,6 +60,8 @@ CacheTestHandler::handle_cache_event(int event, CacheTestBase
*base)
base->close();
delete this;
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ break;
case CACHE_EVENT_OPEN_READ_FAILED:
case CACHE_EVENT_OPEN_WRITE_FAILED:
case VC_EVENT_ERROR:
diff --git a/src/iocore/cache/unit_tests/main.cc
b/src/iocore/cache/unit_tests/main.cc
index ccce80aea6..895b478541 100644
--- a/src/iocore/cache/unit_tests/main.cc
+++ b/src/iocore/cache/unit_tests/main.cc
@@ -312,6 +312,9 @@ CacheReadTest::read_event(int event, void *e)
case CACHE_EVENT_OPEN_READ_FAILED:
this->process_event(event);
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ this->process_event(event);
+ break;
case VC_EVENT_READ_READY: {
while (this->_reader->block_read_avail()) {
auto str = this->_reader->block_read_view();
diff --git a/src/iocore/cache/unit_tests/test_Alternate_S_to_L.cc
b/src/iocore/cache/unit_tests/test_Alternate_S_to_L.cc
index 6195eedce2..d83e2e95f5 100644
--- a/src/iocore/cache/unit_tests/test_Alternate_S_to_L.cc
+++ b/src/iocore/cache/unit_tests/test_Alternate_S_to_L.cc
@@ -135,6 +135,8 @@ public:
base->do_io_read();
validate_content_type(base);
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ break;
case VC_EVENT_READ_READY:
base->reenable();
break;
diff --git a/src/iocore/cache/unit_tests/test_RWW.cc
b/src/iocore/cache/unit_tests/test_RWW.cc
index 2b6b3fe48a..580f82c322 100644
--- a/src/iocore/cache/unit_tests/test_RWW.cc
+++ b/src/iocore/cache/unit_tests/test_RWW.cc
@@ -153,6 +153,8 @@ CacheRWWTest::process_read_event(int event, CacheTestBase
*base)
case CACHE_EVENT_OPEN_READ:
base->do_io_read();
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ break;
case VC_EVENT_READ_READY:
Dbg(dbg_ctl_cache_rww_test, "cache read reenable");
this->_read_event = nullptr;
@@ -188,6 +190,7 @@ CacheRWWTest::handle_cache_event(int event, CacheTestBase
*base)
break;
case CACHE_EVENT_OPEN_READ:
case CACHE_EVENT_OPEN_READ_FAILED:
+ case CACHE_EVENT_OPEN_READ_RWW:
case VC_EVENT_ERROR:
case VC_EVENT_EOS:
case VC_EVENT_READ_READY:
@@ -271,6 +274,8 @@ public:
REQUIRE(this->_size == SMALL_FILE);
this->close_read();
return;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ return;
case VC_EVENT_READ_READY:
if (this->_wt) {
this->_wt->reenable();
@@ -358,6 +363,8 @@ public:
this->_is_read_start = true;
base->do_io_read(UINT32_MAX);
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ break;
case VC_EVENT_READ_READY:
if (this->_wt) {
this->_wt->reenable();
diff --git a/src/iocore/cache/unit_tests/test_Update_S_to_L.cc
b/src/iocore/cache/unit_tests/test_Update_S_to_L.cc
index 906d93fa2e..cdb86f6aa3 100644
--- a/src/iocore/cache/unit_tests/test_Update_S_to_L.cc
+++ b/src/iocore/cache/unit_tests/test_Update_S_to_L.cc
@@ -56,6 +56,8 @@ public:
base->do_io_read();
REQUIRE(base->vc->alternate.get_frag_offset_count() > 8);
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ break;
case VC_EVENT_READ_READY:
base->reenable();
break;
diff --git a/src/proxy/http/HttpCacheSM.cc b/src/proxy/http/HttpCacheSM.cc
index 08004c347c..9661dec19e 100644
--- a/src/proxy/http/HttpCacheSM.cc
+++ b/src/proxy/http/HttpCacheSM.cc
@@ -118,6 +118,10 @@ HttpCacheSM::state_cache_open_read(int event, void *data)
master_sm->handleEvent(event, &captive_action);
break;
+ case CACHE_EVENT_OPEN_READ_RWW:
+ set_readwhilewrite_inprogress(true);
+ break;
+
case CACHE_EVENT_OPEN_READ_FAILED:
err_code = reinterpret_cast<intptr_t>(data);
if ((intptr_t)data == -ECACHE_DOC_BUSY) {