Archived
This forum has been archived. Please start a new discussion on GitHub.
Why does Evictor throw the following exception?
in Help Center
Hi,
I am using Ice-3.0.0 's Evictor to hold my servant objects whose size is a little big than 4K, when fetching it from Evictor, the following exception is often throwed:
icebox: warning: dispatch exception: ObjectStore.cpp:353: Freeze: :DatabaseException:
Db::get: Dbt not large enough for available data: Cannot allocate memory
What's the problem?When I use Ice-2.1.2 a few days ago, I have never got this problem even though the servant object is a little big too. Why?
I am using Ice-3.0.0 's Evictor to hold my servant objects whose size is a little big than 4K, when fetching it from Evictor, the following exception is often throwed:
icebox: warning: dispatch exception: ObjectStore.cpp:353: Freeze: :DatabaseException:
Db::get: Dbt not large enough for available data: Cannot allocate memory
What's the problem?When I use Ice-2.1.2 a few days ago, I have never got this problem even though the servant object is a little big too. Why?
0
Comments
-
I Observe the same problem
I Observing the same problem with Ice-3.0.0 FreezeFileService-Files: warning: dispatch exception: ObjectStore.cpp:353: Freeze::DatabaseException: Db::get: Dbt not large enough for available data: Cannot allocate memory identity: FileServer/029C23C2-9B5D-4BC2-BB57-5671EBBD96E6 facet: operation: ice_isA
with the previous Ice version this not happen
Any ideas about this problem?
Thanks0 -
Thanks for the bug report.
I've just posted a patch here:
http://www.zeroc.com/vbulletin/showthread.php?p=8635
The problem did not occur with Ice 2.1.x because it was using Berkeley DB 4.2.x.
It's really a bug in Berkeley DB/C++: Berkeley DB 4.3 introduced a new error code, DB_BUFFER_SMALL, to distinguish between expected memory issues (when the buffer provided by Freeze is not big enough) and real out-of-memory error conditions (ENOMEM). Unfortunately the C++ interface of Berkeley DB in 4.3 and 4.4 does not handle well DB_BUFFER_SMALL ... I've reported the bug to Sleepycat. Until it's fixed, Freeze won't distinguish between DB_BUFFER_SMALL and ENOMEM.
Best regards,
Bernard0