
Sorry for the delay here. Original reply bounced due to 'reply to digest' subject line. On Tue, 5 Jan 2010 21:21:29 +0100, "vicente.botet" <vicente.botet@wanadoo.fr> wrote:
I'm interested on a library that has transactional shared memory, but something more general that your containers database in shared memory. Can your library be extendeed to manage with types that are not containers?
Currently there is an interface between the trans infrastructure (TI) and the containers allowing the containers to offer transactional operations, and indicate to the TI how they should be logged, committed, etc. This was intended to help make adding containers easier. There isn't really an assumption that transactional objects are containers - they could be anything which adheres to the interface. For example: I'm planning a quick wrapper for types T which makes T transactional for updates done to it via operator=. I need this for integerss that I want to use as sequences in one use of STLdb. (e.g. for key generation.)
If I have understood, the data is stored using Boost.Interprocess. Could you clarify why do you force the stored types to be Serializable?
I'm not relying on the durability of the boost interprocess region. Nor am I trying to serialize the shared memory from directly to disk. Stefan has challenged me to do that, and I'm considering a variation which would do that, but it isn't without it's own issues. For now, I went with the approach of using serialization for sending K,V types to logs or checkpoints as a way to avoid those issues. My current concern with direct storage is that (assuming K and V may not be concrete types) it seems like it will require a lot of memory use tracking which could add an unwanted expense to shared memory pointer traversal.
With your library, there are alreasy 3 libraries under construction providing a transactional service (Boost.STLdb, Boost.Persistent and TBoost.STM). The ideal would be to have a single transactional framework with several transactional resources, e.g shared memory resource (Boost.STLdb), persistent resource (Boost.Persistent ), in memory resource (Boost.STM). If I'm not wrong Boost.Persistent contains already a Ressource concept. I would like to see how this transactional framework can be made generic so the three libraries can share the same transaction. Stefan, Bob, are you interesteed in participating on such a framework?
Yes. Stefan had suggested this in private e-mails earlier, and I'll have to adapt to fit his interfaces. As I've alluded previously, I would like to see it possible to use Boost.Persistence with my library, as several shortcomings of STLdb would be addressed in that way. Part of doing that involved bringing all transaction control under one manager. Stefans library is the most robust in this sense, so I plan to work with and adapt to his interfaces.
Could you give a link from where to download the code. If you want I can add your library to the Boost Libraries Under Construction page https://svn.boost.org/trac/boost/wiki/LibrariesUnderConstruction.
Currently it's in subversion only on sourceforge. I'm finishing some changes to the checkpointing mechanism, and I'm going to finish that first. Will let you know when its ready, thereby supporting the under construction entry. If it helps at all, I could move the SVN repository to the sandbox, or post the tarball into the Vault (?)