Patch attached.

Seems to work ok in my limited testing.

Files: 
CommentFileSizeAuthor
#13 1098268_mongodb_cache_7.patch8.48 KBmakara
Test request sent.
[ View ]
#12 1098268_mongodb_cache_6.patch8.41 KBmakara
Test request sent.
[ View ]
#5 mongodb_cache_1098268_5.patch7.87 KBcrea
Test request sent.
[ View ]
#3 mongodb_cache_1098268.patch1.99 KBcrea
Test request sent.
[ View ]
#2 mongodb_cache_1098268.patch1.99 KBcrea
Test request sent.
[ View ]
mongo_cache_backport.patch2.37 KBmsonnabaum
Test request sent.
[ View ]

Comments

I suggest to remove REQUEST_TIME definition in favor of #1179402: Define REQUEST_TIME for backports. Its also used in many other places.

Category:feature» task
Status:Active» Needs review
StatusFileSize
new1.99 KB
Test request sent.
[ View ]

StatusFileSize
new1.99 KB
Test request sent.
[ View ]

Cleaner patch

Status:Needs review» Needs work

Status:Needs work» Needs review
StatusFileSize
new7.87 KB
Test request sent.
[ View ]

Updated patch: no REQUEST_TIME dependency

Patch seems not to work for me.

I tried it with a pressflow 6.20 installation.

cd sites/all/modules/mongodb
patch -p1 < patchfile.patch

Created the directory automatically.
Then i was able to activate the module.

Added these to my settings:

$conf['mongodb_connections'] = array(
'mongohost' => array('host' => 'localhost', 'db' => 'mydb'),
);

$conf['mongodb_collections'] = array(
'watchdog' => 'mongohost',
'session' => 'mongohost',
'cache' => 'mongohost',
);

Watchdog messages are written to mydb. Sessions and Cache not.

Any ideas?

In this issue only cache is discussed. Sessions are discussed in different issue.
To use this you need something like this:

$conf['mongodb_connections'] = array('default' => array('host' => 'localhost', 'db' => 'drupal'));
$conf['cache_inc']   = './sites/all/modules/mongodb/mongodb_cache/mongodb_cache.inc';

Alright, that was the point.

Now i get this error:

MongoException: non-utf8 string:

Changed code after line 149 and checked if the data string is valid UTF-8.

if(mb_detect_encoding($entry['data'], 'UTF-8', true)) {
$collection = mongodb_collection($this->bin);
$collection->save($entry);
}

There's an issue here about using mongo binary type for cache.

Thanks.
My changes to use binary storage.....

131,132c131,136
< if ($cache->serialized) {
< $cache->data = unserialize($cache->data);
---
> if($cache->binary && $cache->serialized) {
> $cache->data = unserialize($cache->data->bin);
> } else if(!$cache->binary && $cache->serialized){
> $cache->data = unserialize($cache->data);
> } else {
> $cache->data = $cache->data->bin;
134c138
<
---
>
145a150
> 'binary' => true,
147c152
< 'data' => $scalar ? $data : serialize($data),
---
> 'data' => $scalar ? $data : serialize($data),
149c154
<
---
> $entry['data'] = new MongoBinData($entry['data']);
151d155
<

StatusFileSize
new8.41 KB
Test request sent.
[ View ]

Updated the patch:

StatusFileSize
new8.48 KB
Test request sent.
[ View ]

Fixed patch:

  • Drupal 6 sets HTTP headers in the cache.

There's no need to validate if the cache data is valid utf. Just use binary type everywhere