You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by we...@apache.org on 2014/01/14 03:29:17 UTC
git commit: TS-2138 TS-2412: fix the bug that cache data loss when
restarting ats if build with linuat native-aio.
Updated Branches:
refs/heads/master 7af657e45 -> 69d04896e
TS-2138 TS-2412: fix the bug that cache data loss when restarting
ats if build with linuat native-aio.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/69d04896
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/69d04896
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/69d04896
Branch: refs/heads/master
Commit: 69d04896ef98ee4f565151fe5b1de6f5328fb5df
Parents: 7af657e
Author: weijin <ta...@taobao.com>
Authored: Tue Jan 14 10:25:35 2014 +0800
Committer: weijin <ta...@taobao.com>
Committed: Tue Jan 14 10:28:18 2014 +0800
----------------------------------------------------------------------
CHANGES | 3 +++
iocore/aio/AIO.cc | 6 ++----
iocore/aio/I_AIO.h | 32 +++++++++++++++++---------------
iocore/aio/P_AIO.h | 2 +-
4 files changed, 23 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/69d04896/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index f5e4224..d880ede 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 4.2.0
+ *) [TS-2412] fix the bug of restarting ATS causes complete cache data
+ loss when use linux-native-aio.
+
*) [TS-2488] enhance esi plugin to allow any of the space characters to
follow esi starting tags.
Author: Yu Qing <zh...@taobao.com>
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/69d04896/iocore/aio/AIO.cc
----------------------------------------------------------------------
diff --git a/iocore/aio/AIO.cc b/iocore/aio/AIO.cc
index ac8ea0f..d933130 100644
--- a/iocore/aio/AIO.cc
+++ b/iocore/aio/AIO.cc
@@ -635,8 +635,7 @@ ink_aio_readv(AIOCallback *op, int /* fromAPI ATS_UNUSED */) {
if (sz > 1) {
ink_assert(op->action.continuation);
- AIOVec *vec = new AIOVec(sz, op->action.continuation);
- vec->action = op->action.continuation;
+ AIOVec *vec = new AIOVec(sz, op);
while (--sz >= 0) {
op->action = vec;
op = op->then;
@@ -662,8 +661,7 @@ ink_aio_writev(AIOCallback *op, int /* fromAPI ATS_UNUSED */) {
if (sz > 1) {
ink_assert(op->action.continuation);
- AIOVec *vec = new AIOVec(sz, op->action.continuation);
- vec->action = op->action.continuation;
+ AIOVec *vec = new AIOVec(sz, op);
while (--sz >= 0) {
op->action = vec;
op = op->then;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/69d04896/iocore/aio/I_AIO.h
----------------------------------------------------------------------
diff --git a/iocore/aio/I_AIO.h b/iocore/aio/I_AIO.h
index 00af2b3..83f9bf5 100644
--- a/iocore/aio/I_AIO.h
+++ b/iocore/aio/I_AIO.h
@@ -71,21 +71,6 @@ typedef struct io_event ink_io_event_t;
#define aio_offset u.c.offset
#define aio_buf u.c.buf
-struct AIOVec: public Continuation
-{
- Action action;
- int size;
- int completed;
-
- AIOVec(int sz, Continuation *c): Continuation(new_ProxyMutex()), size(sz), completed(0)
- {
- action = c;
- SET_HANDLER(&AIOVec::mainEvent);
- }
-
- int mainEvent(int event, Event *e);
-};
-
#else
typedef struct ink_aiocb
@@ -129,6 +114,23 @@ struct AIOCallback: public Continuation
};
#if AIO_MODE == AIO_MODE_NATIVE
+
+struct AIOVec: public Continuation
+{
+ Action action;
+ int size;
+ int completed;
+ AIOCallback *first;
+
+ AIOVec(int sz, AIOCallback *c): Continuation(new_ProxyMutex()), size(sz), completed(0), first(c)
+ {
+ action = c->action;
+ SET_HANDLER(&AIOVec::mainEvent);
+ }
+
+ int mainEvent(int event, Event *e);
+};
+
struct DiskHandler: public Continuation
{
Event *trigger_event;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/69d04896/iocore/aio/P_AIO.h
----------------------------------------------------------------------
diff --git a/iocore/aio/P_AIO.h b/iocore/aio/P_AIO.h
index fe91132..0c2cb99 100644
--- a/iocore/aio/P_AIO.h
+++ b/iocore/aio/P_AIO.h
@@ -85,7 +85,7 @@ AIOVec::mainEvent(int /* event */, Event *) {
else if (completed == size) {
MUTEX_LOCK(lock, action.mutex, this_ethread());
if (!action.cancelled)
- action.continuation->handleEvent(AIO_EVENT_DONE, this);
+ action.continuation->handleEvent(AIO_EVENT_DONE, first);
delete this;
return EVENT_DONE;
}