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
    / \

Reply via email to