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