You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2011/05/15 22:50:15 UTC
svn commit: r1103539 - in /trafficserver/traffic/trunk/iocore: aio/AIO.cc
aio/I_AIO.h cache/Cache.cc cache/CacheDir.cc cache/CacheDisk.cc
cache/CacheVol.cc cache/P_CacheDir.h cache/P_CacheVol.h
Author: jplevyak
Date: Sun May 15 20:50:15 2011
New Revision: 1103539
URL: http://svn.apache.org/viewvc?rev=1103539&view=rev
Log:
TS-773: the cache directory (and AIO reads and writes) can how exceed 2GB (MAX_INT).
Modified:
trafficserver/traffic/trunk/iocore/aio/AIO.cc
trafficserver/traffic/trunk/iocore/aio/I_AIO.h
trafficserver/traffic/trunk/iocore/cache/Cache.cc
trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
trafficserver/traffic/trunk/iocore/cache/CacheVol.cc
trafficserver/traffic/trunk/iocore/cache/P_CacheDir.h
trafficserver/traffic/trunk/iocore/cache/P_CacheVol.h
Modified: trafficserver/traffic/trunk/iocore/aio/AIO.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/aio/AIO.cc?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/aio/AIO.cc (original)
+++ trafficserver/traffic/trunk/iocore/aio/AIO.cc Sun May 15 20:50:15 2011
@@ -390,7 +390,7 @@ cache_op(AIOCallbackInternal *op)
bool read = (op->aiocb.aio_lio_opcode == LIO_READ) ? 1 : 0;
for (; op; op = (AIOCallbackInternal *) op->then) {
ink_aiocb_t *a = &op->aiocb;
- int err, res = 0;
+ ssize_t err, res = 0;
while (a->aio_nbytes - res > 0) {
do {
@@ -408,7 +408,7 @@ cache_op(AIOCallbackInternal *op)
res += err;
}
op->aio_result = res;
- ink_assert(op->aio_result == (int) a->aio_nbytes);
+ ink_assert(op->aio_result == (int64_t) a->aio_nbytes);
}
return 1;
}
Modified: trafficserver/traffic/trunk/iocore/aio/I_AIO.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/aio/I_AIO.h?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/aio/I_AIO.h (original)
+++ trafficserver/traffic/trunk/iocore/aio/I_AIO.h Sun May 15 20:50:15 2011
@@ -67,7 +67,7 @@ struct AIOCallback: public Continuation
EThread *thread;
AIOCallback *then;
// set on return from aio_read/aio_write
- int aio_result;
+ int64_t aio_result;
int ok();
AIOCallback() : thread(AIO_CALLBACK_THREAD_ANY), then(0) {
Modified: trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Cache.cc Sun May 15 20:50:15 2011
@@ -978,7 +978,7 @@ vol_init_dir(Vol *d)
void
vol_clear_init(Vol *d)
{
- int dir_len = vol_dirlen(d);
+ size_t dir_len = vol_dirlen(d);
memset(d->raw_dir, 0, dir_len);
vol_init_dir(d);
d->header->magic = VOL_MAGIC;
@@ -997,7 +997,7 @@ vol_clear_init(Vol *d)
int
vol_dir_clear(Vol *d)
{
- int dir_len = vol_dirlen(d);
+ size_t dir_len = vol_dirlen(d);
vol_clear_init(d);
if (pwrite(d->fd, d->raw_dir, dir_len, d->skip) < 0) {
@@ -1010,7 +1010,7 @@ vol_dir_clear(Vol *d)
int
Vol::clear_dir()
{
- int dir_len = vol_dirlen(this);
+ size_t dir_len = vol_dirlen(this);
vol_clear_init(this);
SET_HANDLER(&Vol::handle_dir_clear);
@@ -1112,17 +1112,17 @@ Vol::init(char *s, off_t blocks, off_t d
int
Vol::handle_dir_clear(int event, void *data)
{
- int dir_len = vol_dirlen(this);
+ size_t dir_len = vol_dirlen(this);
AIOCallback *op;
if (event == AIO_EVENT_DONE) {
op = (AIOCallback *) data;
- if ((int) op->aio_result != (int) op->aiocb.aio_nbytes) {
+ if ((size_t) op->aio_result != (size_t) op->aiocb.aio_nbytes) {
Warning("unable to clear cache directory '%s'", hash_id);
fd = -1;
}
- if ((int) op->aiocb.aio_nbytes == dir_len) {
+ if (op->aiocb.aio_nbytes == dir_len) {
/* clear the header for directory B. We don't need to clear the
whole of directory B. The header for directory B starts at
skip + len */
@@ -1145,7 +1145,7 @@ Vol::handle_dir_read(int event, void *da
AIOCallback *op = (AIOCallback *) data;
if (event == AIO_EVENT_DONE) {
- if ((int) op->aio_result != (int) op->aiocb.aio_nbytes) {
+ if ((size_t) op->aio_result != (size_t) op->aiocb.aio_nbytes) {
clear_dir();
return EVENT_DONE;
}
@@ -1230,7 +1230,7 @@ Vol::handle_recover_from_data(int event,
if ((off_t)(recover_pos + io.aiocb.aio_nbytes) > (off_t)(skip + len))
io.aiocb.aio_nbytes = (skip + len) - recover_pos;
} else if (event == AIO_EVENT_DONE) {
- if ((int) io.aiocb.aio_nbytes != (int) io.aio_result) {
+ if ((size_t) io.aiocb.aio_nbytes != (size_t) io.aio_result) {
Warning("disk read error on recover '%s', clearing", hash_id);
goto Lclear;
}
@@ -1424,7 +1424,7 @@ Ldone:{
aio->then = (i < 2) ? &(init_info->vol_aio[i + 1]) : 0;
}
int footerlen = ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter));
- int dirlen = vol_dirlen(this);
+ size_t dirlen = vol_dirlen(this);
int B = header->sync_serial & 1;
off_t ss = skip + (B ? dirlen : 0);
@@ -1483,7 +1483,7 @@ Vol::handle_header_read(int event, void
for (int i = 0; i < 4; i++) {
ink_assert(op != 0);
hf[i] = (VolHeaderFooter *) (op->aiocb.aio_buf);
- if ((int) op->aio_result != (int) op->aiocb.aio_nbytes) {
+ if ((size_t) op->aio_result != (size_t) op->aiocb.aio_nbytes) {
clear_dir();
return EVENT_DONE;
}
@@ -2084,7 +2084,7 @@ CacheVC::removeEvent(int event, Event *e
goto Lcollision;
}
// check read completed correct FIXME: remove bad vols
- if ((int) io.aio_result != (int) io.aiocb.aio_nbytes)
+ if ((size_t) io.aio_result != (size_t) io.aiocb.aio_nbytes)
goto Ldone;
{
// verify that this is our document
Modified: trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDir.cc?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDir.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDir.cc Sun May 15 20:50:15 2011
@@ -891,7 +891,7 @@ sync_cache_dir_on_shutdown(void)
{
Debug("cache_dir_sync", "sync started");
char *buf = NULL;
- int buflen = 0;
+ size_t buflen = 0;
EThread *t = (EThread *) 0xdeadbeef;
for (int i = 0; i < gnvol; i++) {
@@ -905,7 +905,7 @@ sync_cache_dir_on_shutdown(void)
Debug("cache_dir_sync", "Dir %s: ignoring -- bad disk", d->hash_id);
continue;
}
- int dirlen = vol_dirlen(d);
+ size_t dirlen = vol_dirlen(d);
if (!d->header->dirty && !d->dir_sync_in_progress) {
Debug("cache_dir_sync", "Dir %s: ignoring -- not dirty", d->hash_id);
continue;
@@ -953,7 +953,7 @@ sync_cache_dir_on_shutdown(void)
d->footer->sync_serial = d->header->sync_serial;
CHECK_DIR(d);
memcpy(buf, d->raw_dir, dirlen);
- int B = d->header->sync_serial & 1;
+ size_t B = d->header->sync_serial & 1;
off_t start = d->skip + (B ? dirlen : 0);
B = pwrite(d->fd, buf, dirlen, start);
ink_debug_assert(B == dirlen);
@@ -994,7 +994,7 @@ Lrestart:
}
if (event == AIO_EVENT_DONE) {
// AIO Thread
- if (io.aio_result != (int) io.aiocb.aio_nbytes) {
+ if (io.aio_result != (int64_t)io.aiocb.aio_nbytes) {
Warning("vol write error during directory sync '%s'", gvol[vol]->hash_id);
event = EVENT_NONE;
goto Ldone;
@@ -1019,7 +1019,7 @@ Lrestart:
goto Ldone;
int headerlen = ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter));
- int dirlen = vol_dirlen(d);
+ size_t dirlen = vol_dirlen(d);
if (!writepos) {
// start
Debug("cache_dir_sync", "sync started");
@@ -1054,22 +1054,22 @@ Lrestart:
memcpy(buf, d->raw_dir, dirlen);
d->dir_sync_in_progress = 1;
}
- int B = d->header->sync_serial & 1;
+ size_t B = d->header->sync_serial & 1;
off_t start = d->skip + (B ? dirlen : 0);
if (!writepos) {
// write header
aio_write(d->fd, buf + writepos, headerlen, start + writepos);
writepos += headerlen;
- } else if (writepos < dirlen - headerlen) {
+ } else if (writepos < (off_t)dirlen - headerlen) {
// write part of body
int l = SYNC_MAX_WRITE;
- if (writepos + l > dirlen - headerlen)
+ if (writepos + l > (off_t)dirlen - headerlen)
l = dirlen - headerlen - writepos;
aio_write(d->fd, buf + writepos, l, start + writepos);
writepos += l;
- } else if (writepos < dirlen) {
- ink_assert(writepos == dirlen - headerlen);
+ } else if (writepos < (off_t)dirlen) {
+ ink_assert(writepos == (off_t)dirlen - headerlen);
// write footer
aio_write(d->fd, buf + writepos, headerlen, start + writepos);
writepos += headerlen;
Modified: trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc Sun May 15 20:50:15 2011
@@ -117,7 +117,7 @@ CacheDisk::clearDone(int event, void *da
NOWARN_UNUSED(data);
ink_assert(event == AIO_EVENT_DONE);
- if ((int) io.aiocb.aio_nbytes != (int) io.aio_result) {
+ if ((size_t) io.aiocb.aio_nbytes != (size_t) io.aio_result) {
Warning("Could not clear disk header for disk %s: declaring disk bad", path);
SET_DISK_BAD(this);
}
@@ -133,7 +133,7 @@ CacheDisk::openStart(int event, void *da
NOWARN_UNUSED(data);
ink_assert(event == AIO_EVENT_DONE);
- if ((int) io.aiocb.aio_nbytes != (int) io.aio_result) {
+ if ((size_t) io.aiocb.aio_nbytes != (size_t) io.aio_result) {
Warning("could not read disk header for disk %s: declaring disk bad", path);
SET_DISK_BAD(this);
SET_HANDLER(&CacheDisk::openDone);
@@ -188,7 +188,7 @@ CacheDisk::syncDone(int event, void *dat
ink_assert(event == AIO_EVENT_DONE);
- if ((int) io.aiocb.aio_nbytes != (int) io.aio_result) {
+ if ((size_t) io.aiocb.aio_nbytes != (size_t) io.aio_result) {
Warning("Error writing disk header for disk %s:disk bad", path);
SET_DISK_BAD(this);
return EVENT_DONE;
@@ -217,7 +217,7 @@ CacheDisk::create_volume(int number, off
// ink_assert(!(size_in_blocks % blocks_per_vol));
DiskVolBlock *p = 0;
for (; q; q = q->link.next) {
- if (q->b->len >= (unsigned int) size_in_blocks) {
+ if ((off_t)q->b->len >= size_in_blocks) {
p = q->b;
q->new_block = 1;
break;
@@ -235,7 +235,7 @@ CacheDisk::create_volume(int number, off
q = closest_match;
p = q->b;
q->new_block = 1;
- ink_assert(size_in_blocks > (int) p->len);
+ ink_assert(size_in_blocks > (off_t) p->len);
/* allocate in 128 megabyte chunks. The Remaining space should
be thrown away */
size_in_blocks = (p->len - (p->len % blocks_per_vol));
@@ -246,8 +246,8 @@ CacheDisk::create_volume(int number, off
free_space -= p->len;
free_blocks->size -= p->len;
- int new_size = p->len - size_in_blocks;
- if (new_size >= blocks_per_vol) {
+ size_t new_size = p->len - size_in_blocks;
+ if (new_size >= (size_t)blocks_per_vol) {
/* create a new volume */
DiskVolBlock *dpb = &header->vol_info[header->num_diskvol_blks];
*dpb = *p;
Modified: trafficserver/traffic/trunk/iocore/cache/CacheVol.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheVol.cc?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheVol.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheVol.cc Sun May 15 20:50:15 2011
@@ -194,7 +194,7 @@ CacheVC::scanObject(int event, Event * e
goto Lread;
}
- if ((int) io.aio_result != (int) io.aiocb.aio_nbytes) {
+ if ((size_t)io.aio_result != (size_t) io.aiocb.aio_nbytes) {
result = (void *) -ECACHE_READ_FAIL;
goto Ldone;
}
Modified: trafficserver/traffic/trunk/iocore/cache/P_CacheDir.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/P_CacheDir.h?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/P_CacheDir.h (original)
+++ trafficserver/traffic/trunk/iocore/cache/P_CacheDir.h Sun May 15 20:50:15 2011
@@ -265,8 +265,8 @@ struct CacheSync: public Continuation
{
int vol;
char *buf;
- int buflen;
- int writepos;
+ size_t buflen;
+ off_t writepos;
AIOCallbackInternal io;
Event *trigger;
int mainEvent(int event, Event *e);
Modified: trafficserver/traffic/trunk/iocore/cache/P_CacheVol.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/P_CacheVol.h?rev=1103539&r1=1103538&r2=1103539&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/P_CacheVol.h (original)
+++ trafficserver/traffic/trunk/iocore/cache/P_CacheVol.h Sun May 15 20:50:15 2011
@@ -343,11 +343,11 @@ vol_headerlen(Vol *d) {
return ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter) + sizeof(uint16_t) * (d->segments-1));
}
-TS_INLINE int
+TS_INLINE size_t
vol_dirlen(Vol *d)
{
return vol_headerlen(d) +
- ROUND_TO_STORE_BLOCK(d->buckets * DIR_DEPTH * d->segments * SIZEOF_DIR) +
+ ROUND_TO_STORE_BLOCK(((size_t)d->buckets) * DIR_DEPTH * d->segments * SIZEOF_DIR) +
ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter));
}