|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
error while database is on windows file serverHi
We use Metakit to store miscellaneous information for our programe. It works on windows, macosx and linux. It happens that when the database is created on the windows network, we have some problem with the windows application (we use metakit-2.4.9.6). Below you will find a program that creates a file, adds rows, and retrieves information. The Find function doesn't return anything and a manuel search also gives no result. In our main program, the Find() function remains in an infinite loop. It works fine with other plateform combinations : from windows client to simple windows sharing, from macosx client to windows file server and from macosx client to macosx apple share file server. Thanks for any suggestion about this. PS: our windows file server is a macosx with Samba. we compile with visual studio 2005 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <mk4.h> void main(int argc, char **argv) { char dbpath[100]=""; printf("Choose a db destination :\n\n"); printf("1 - Local\n"); printf("2 - Network : Windows file server\n"); printf("3 - Network : Windows sharing\n\n"); switch (getche()) { case '1': strcpy(dbpath,"c:\\zdrop\\metakit_tutorial.db"); break; case '2': strcpy(dbpath,"\\\\Noe\\Developpement\\metakit_tutorial.db"); break; case '3': strcpy(dbpath,"\\\\Ordiludovic\\partageArticque\\metakit_tutorial.db"); break; default: break; } printf("\n"); if (strlen(dbpath)>0) { fflush(stdin); FILE *fp=NULL; // remove if present if ((fp=fopen(dbpath,"r"))!=NULL) { fclose(fp); unlink(dbpath); } // create db c4_Storage database(dbpath, true); // add datas c4_View maps=database.GetAs("maps[mid:S,mwidth:I,mheight:I,mpath:S]"); c4_StringProp mid("mid"),mpath("mpath"); c4_IntProp mwidth("mwidth"),mheight("mheight"); c4_Row maprow; mid(maprow)="A"; mwidth(maprow)=10; mheight(maprow)=10; mpath(maprow)="/home/MapA.vxf"; maps.Add(maprow); mid(maprow)="B"; mwidth(maprow)=20; mheight(maprow)=20; mpath(maprow)="/home/MapB.vxf"; maps.Add(maprow); mid(maprow)="C"; mwidth(maprow)=30; mheight(maprow)=30; mpath(maprow)="/home/MapC.vxf"; maps.Add(maprow); // save database.Commit(); // add more datas c4_View datas=database.GetAs("datas[did:S,dmapid:S,dpath:S]"); // add data c4_StringProp did("did"),dmapid("dmapid"),dpath("dpath"); c4_Row datarow; did(datarow)="1"; dmapid(datarow)="A"; dpath(datarow)="/home/A1.txt"; datas.Add(datarow); did(datarow)="2"; dmapid(datarow)="A"; dpath(datarow)="/home/A2.txt"; datas.Add(datarow); did(datarow)="3"; dmapid(datarow)="B"; dpath(datarow)="/home/B1.txt"; datas.Add(datarow); did(datarow)="4"; dmapid(datarow)="B"; dpath(datarow)="/home/B2.txt"; datas.Add(datarow); did(datarow)="5"; dmapid(datarow)="C"; dpath(datarow)="/home/C1.txt"; datas.Add(datarow); // save database.Commit(); // Find data long idxsearch=-1; c4_Row findrow; dmapid(findrow)="B"; while(1) { idxsearch=datas.Find(findrow,idxsearch+1); if (idxsearch>=0) printf("DATA %s has dmapid=%s\n", (const char*)dpath(datas[idxsearch]), (const char*)dmapid(datas[idxsearch])); else break; } // manuel search c4_Row strrow; const char*strdata; const char*expr="ome/B"; for (int idx=0;idx<datas.GetSize();idx++) { strdata=(const char*)dpath(datas[idx]); if (strstr(strdata,expr)!=NULL) printf("map %s has the string '%s' in the path\n",strdata,expr); } } printf("Test over\n"); getch(); } -- Florent Lejeune Développeur Articque Moulin des Roches 37230 Fondettes France web = http://www.articque.com tel: +33 02 47 49 90 49 fax: +33 02 47 49 91 49 _____________________________________________ Metakit mailing list - Metakit@... http://www.equi4.com/mailman/listinfo/metakit |
|
|
Re: error while database is on windows file server"Florent Lejeune" <flejeune@...> writes:
>Hi > >We use Metakit to store miscellaneous information for our programe. It works on windows, >macosx and linux. >It happens that when the database is created on the windows network, we have some problem >with the windows application (we use metakit-2.4.9.6). > >Below you will find a program that creates a file, adds rows, and retrieves information. > >The Find function doesn't return anything and a manuel search also gives no result. In our >main program, the Find() function remains in an infinite loop. >It works fine with other plateform combinations : from windows client to simple windows >sharing, from macosx client to windows file server and from macosx client to macosx apple share >file server. > >Thanks for any suggestion about this. You don't say what kind of problem you have with the network files but I will make a guess that it sometimes produces corrupt metakit databases. Metakit works by mapping the file into memory as a read-only memory mapped file and when it saves any changes it serializes the in-memory version to the file, unmaps and re-maps the database. We found that when the file is on a network share the re-map step doesn't re-map the new file, but instead maps the old image and breaks everything. The simplest solution I found was to ensure that if the file is mapped to a network share that we open the windows file for exclusive access. There are likely some longer posts about my bug hunt in the archive for this list if this is relevant. -- Pat Thoyts http://www.patthoyts.tk/ PGP fingerprint 2C 6E 98 07 2C 59 C8 97 10 CE 11 E6 04 E0 B9 DD _____________________________________________ Metakit mailing list - Metakit@... http://www.equi4.com/mailman/listinfo/metakit |
| Free Forum Powered by Nabble | Forum Help |