summaryrefslogtreecommitdiff
path: root/db/reccache.h
diff options
context:
space:
mode:
authorDwight <dmerriman@gmail.com>2009-03-13 15:23:38 -0400
committerDwight <dmerriman@gmail.com>2009-03-13 15:23:38 -0400
commit812cc0edd2cf190d4d4ec2d5435d3a01114c5f85 (patch)
tree1d210c5078faf68405c1798e759b374ae1e8e5bd /db/reccache.h
parentc5df475456bc5a9d6a10dc846075bd3f515852b1 (diff)
downloadmongo-812cc0edd2cf190d4d4ec2d5435d3a01114c5f85.tar.gz
recstore: bug fix, plus allow index files > 2GB
Diffstat (limited to 'db/reccache.h')
-rw-r--r--db/reccache.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/db/reccache.h b/db/reccache.h
index d031ad039f0..0d527840aa5 100644
--- a/db/reccache.h
+++ b/db/reccache.h
@@ -49,7 +49,7 @@ class RecCache {
/* get the right file for a given diskloc */
BasicRecStore& store(DiskLoc& d) {
- int n = d.a() - 10000;
+ int n = d.a() - Base;
if( (int) stores.size() > n ) {
BasicRecStore *rs = stores[n];
if( rs )
@@ -108,9 +108,7 @@ class RecCache {
return n;
}
fileofs fileOfs(DiskLoc d) {
- // temp impl.
- // todo: handle 64 bit file sizes
- return d.getOfs();
+ return ((fileofs) d.getOfs()) * recsize;
}
void dump();
@@ -170,10 +168,12 @@ public:
boostlock lk(rcmutex);
BasicRecStore& rs = store(ns);
fileofs o = rs.insert((const char *) obuf, len);
- assert( o <= 0x7fffffff );
+ assert( o % recsize == 0 );
+ fileofs recnum = o / recsize;
+ massert( "RecCache file too large?", recnum <= 0x7fffffff );
Node *n = mkNode();
memcpy(n->data, obuf, len);
- DiskLoc d(rs.fileNumber + Base, (int) o);
+ DiskLoc d(rs.fileNumber + Base, (int) recnum);
n->loc = d;
m[d] = n;
return d;