Issue 147 in soar: EpMem and SMem Database Enhancement - Multiple Agents Same System

5 views
Skip to first unread message

so...@googlecode.com

unread,
Aug 6, 2013, 10:00:53 AM8/6/13
to soar-...@googlegroups.com
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 147 by alex.tur...@soartech.com: EpMem and SMem Database
Enhancement - Multiple Agents Same System
http://code.google.com/p/soar/issues/detail?id=147

Currently CSoar does not support multiple agents in the same database nor
does it support epmem and smem in the same database. This is a feature
request for both of these. Theoretically smem and epmem are set up to
support being in the same database, the only issue is that currently they
both try to connect to the database even if it is open in the other memory
(ie. epmem has open /csoar.sqlite and smem tries to connect again to
/csoar.sqlite). This will fail because you cannot have multiple
connections to the same sqlite database.

The second part of this feature requests is multiple agents in the same
database. The reason you would want to do this is in an embedded system
because typically these will have little space on an hdd and if you want
CSoar to run for a long time with an smem and epmem db you will want to
write it to a file and will run out of space eventually. The solution to
this is to support multiple connections to a db over the network (either
via TCP or fancy file system hacks, ie. network drive mounting). Support
for this actually isn't too hard to implement, it just requires the
following:

1. Change the statements from a hardcoded epmem_ or smem_ prefix to a
variable (as in JSoar) and then support replacing say "@PREFIX@" in those
statements with the prefix. JSoar already does this and so you can just
copy the statements from JSoar and look at how JSoar does this replacement
for an example and for code which already works.

2. Change how the database is loaded. You would have to check whether smem
and epmem are trying to connect to the same database, and if they are, use
the existing connection. You also have to have code which, once the
database is loaded, polls for the latest prefix. To do this, you could do
something like the following:

Have a table called 'prefix' (without a prefix, just like the versions
table) and in the table have the following format:

| id | system | count |
-----------------------
| 1 | epmem | 1 |
| 2 | smem | 1 |
| 3 | smem | 2 |
-----------------------

So to get the latest prefix, you would have a sql statement like "SELECT
count FROM prefix WHERE system='epmem' ORDER BY DESC" which would return as
the first result, the last epmem schema count.

3. Then once you get the last count you have a statement which sets the
prefix based on the count, so you have 'epmem_' for a count of '0'
and 'epmem2_' for a count of '1' and so on ((++count) > 1 ? count : "");

The only issue in CSoar is that if you wanted to have multiple agents
outside of one kernel connecting to the same database, you would need to
use something other than sqlite because it isn't designed to allow multiple
connections that support read/write. You would need to add support for
networked databases for instance via a mysql driver or postgresql driver or
something like that. In CSoar this might be a bit of a problem to provide
an abstraction around the databases but I haven't looked in CSoar too much
at how one might do that. I would bet though that it wouldn't be too hard
to do that, you would need to handle differences between supported drivers
though.

--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

so...@googlecode.com

unread,
Aug 6, 2013, 10:01:53 AM8/6/13
to soar-...@googlegroups.com
Updates:
Labels: -Type-Defect -Priority-Medium Type-Enhancement Priority-Low

Comment #1 on issue 147 by pawngam...@gmail.com: EpMem and SMem Database
Enhancement - Multiple Agents Same System
http://code.google.com/p/soar/issues/detail?id=147

(No comment was entered for this change.)
Reply all
Reply to author
Forward
0 new messages