On Tue, 31 Jan 2006, Ritesh Kapoor wrote:
>Regarding the configuration of NFS -
>I have two machines with NFS on them.
>- if i run the app on machine 1 it works properly
>- now when i run the app on machine 2 it works properly
>
>But if I login to machine 2 from machine 1 and then run the app I get
>the 'database is locked' error message.
I assume this is using an NFS file from machine 2 from machine 1?
>
>The sequence of statements are -
>
>1 if((fp = fopen(fullFileName.c_str(),"w+")))
>2 {
>3 fclose(fp);
>4 }
>5 else
>6 {
>7 printf("Error creating file");
>8 return;
>9 }
This bit is unnecessary. SQLite will create a file if it does not exist.
>10 int res = sqlite3_open(fullFileName.c_str(), &_db);
>11 if( res != SQLITE_OK )
>12 {
>13 printf("Error opending DB");
>14 sqlite3_close(_db);
_db will not be a valid handle if sqlite3_open failed.
>15 return;
>16 }
>17
>18 sqlite3_trace(getDB(),logSqlQuery,&sqlLogList);
getDB()? Does this return _db?
>19 string query = "create table XYZ";
>20 res = sqlite3_exec(_db, query.c_str(), NULL , 0, &errmsg);
This example won't work as "create table XYZ" isn't a valid complete SQL
statement.
>21
>22 if(res == 5)
>23 ....
>
>
>After line #20 the value of 'res' is 5.
>
>I've even tried to run the app after removing line #18 which contains
>the sqlite3_trace() fn call. But that dosen't seem to be the cause.
>
>I've gone through the mail archive of this list and saw that this
>problem did appear for others as well but there the solution was to
>check if a previously executing sql statement was still not finished
>with its job and a another sql statement was being executed.
>
>Over here the first sql statement's execution returns this error.
Could be that the incomplete statement is causing problems.
>
>Another assumption that I made was that the host machine locks the file
>after I open a sqlite connection (line #10). So I should wait for it to
>release this lock. I ran the app using GDB and after line #10 I paused
>the app for some time hoping that the lock would go away but the problem
>persists even after pausing for 10, 20 and 30 minutes in seperate runs.
>
>
>If NFS is the problem then what configurations do I need to look at and
>change to make my app work properly?
Locking is handled by rpc.lockd(8). It should be started by default.
>
>What if the problem is with the host machine locking the file or some
>other process running on my machine or the host machine which locks the
>file? Is this possible?
Possible. Check your on both machines if the file is in use.
>
>If yes then is there a way to find out which process is doing this
>through the entries in /proc directory?
>
If on Linux, try using fuser(1) to see if other processes have the file
open, and lsof(8) to see if the file has locks associated with it.
>
>Thanks,
>Ritesh
>
>
>
>On Mon, 2006-01-30 at 19:31, [EMAIL PROTECTED] wrote:
>> Ritesh Kapoor <[EMAIL PROTECTED]> wrote:
>> > Yes.
>> > My machine has NFS and the machines I log onto also have NFS. But if
>> > this is the problem then why dosen't it appear on my machine when I run
>> > the app.
>>
>> Perhaps you are using a local filesystem when you run on
>> your machine. Or perhaps NFS is configured properly on
>> your machine but not on the other machines.
>>
>>
>> > Is there a workaround for this? without having to change the file system
>> > from NFS.
>> >
>>
>> Yes. Configure your NFS so that file locking works correctly.
>>
>> --
>> D. Richard Hipp <[EMAIL PROTECTED]>
>>
>
>
--
/"\
\ / ASCII RIBBON CAMPAIGN - AGAINST HTML MAIL
X - AGAINST MS ATTACHMENTS
/ \