Archived

This forum has been archived. Please start a new discussion on GitHub.

Why does Evictor throw the following exception?

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?

Comments

  • xdm
    xdm La Coruña, Spain
    I Observe the same problem

    I Observing the same problem with Ice-3.0.0 Freeze
    FileService-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?


    Thanks
  • bernard
    bernard Jupiter, FL
    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,
    Bernard