[Pulp-list] MongoDB document size errors
Mike McCune
mmccune at redhat.com
Tue Aug 3 03:00:08 UTC 2010
I spent some time today tracking down the exception that a few people
were seeing:
InvalidDocument: document too large - BSON documents are limited to 4 MB
I wrote a unit test to create a repo and add 5,000 packages to the
repository and easily hit the above error:
File "/home/mmccune/devel/pulp/test/unit/test_api.py", line 615, in
test_sync_large_repo
self.rapi.update(repo)
File "/home/mmccune/devel/pulp/test/unit/../../src/pulp/auditing.py",
line 166, in _audit
_record_event()
File "/home/mmccune/devel/pulp/test/unit/../../src/pulp/auditing.py",
line 141, in _record_event
_objdb.insert(event, safe=False, check_keys=False)
File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 245,
in insert
message.insert(self.__full_name, docs, check_keys, safe), safe)
InvalidDocument: document too large - BSON documents are limited to 4 MB
Note the trace is contained within the auditing insert() call.
Turns out the Event class has both a 'params' field and a field called
'action' but the action field also contained a copy of the params so for
a large Repo document you get an Event document that is 2-3X the size of
the actual parameter being audited.
Jason is working to trim this down but the short story is, we aren't
hitting the 4MB limit because of the structure of our actual Repo
document, we are hitting it because of the way we were auditing the
parameters of a method call.
Jason also in his latest update took out the repo from the param logging
in RepoApi.update()
@audit(params=[])
def update(self, repo_data):
Also, to make people feel more confortable, with the fix to the audit()
call I was able to create a repo with 20,000 packages without error
whereas before it would bail with a repo with 5,000.
--
Mike McCune
mmccune AT redhat.com
Red Hat Engineering | Portland, OR
Systems Management | 650.254.4248
More information about the Pulp-list
mailing list