Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Status of SMB2 corruption-causing bug?
Message
 
À
06/04/2010 22:00:40
Neil Mc Donald
Cencom Systems P/L
The Sun, Australie
Information générale
Forum:
Visual FoxPro
Catégorie:
Problèmes
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2003
Divers
Thread ID:
01440085
Message ID:
01461761
Vues:
203
Latest response from Microsoft:
------------------------------------------
We have been discussing this with the SMB team and they are telling me there is not a way to make SMB2 adjust the response time to the oplock request as was in SMB (LockViolationDelay). It was decided to remove that adjustment and work exactly per the spec when an oplock request is received with the constraint to fail if locked. At this time they are not willing to change SMB2 to work like SMB.

I am now working with the FoxPro team to look at the issue from their end. This activity is just getting under way so I don’t have any progress to give you.

I do have one question for you that came up in some testing I completed earlier this week. I took your script and modified it so that if I select server it just creates the database but does not work on it as a client. I then set up two Vista clients that would simultaneously access the database. After a couple of days of this I was not able to generate an error. Have you tested a similar setup and if so what were your results? What I am trying to determine is if this is a timing issue with FoxPro then how does configuration affect it and what is a standard configuration that FoxPro applications are used in.

------------------------------------------

It would be beneficial to get test results from others on this. If you can test, please run the following code:
** Written by Brandon Harker
** 2009-Oct-26
** Program induces Foxpro index errors when used with SMB2
** Switching to SMB eliminates errors

close data all
SET ESCAPE ON
SET EXCLUSIVE OFF
SET REPROCESS TO 5
SET TABLEVALIDATE TO 3
IF MESSAGEBOX("Server?",4+32+0)=6
	** this is the 1st Vista computer
	** create c:\ice folder and share it before running this program
	IF !DIRECTORY('c:\ice')
		MESSAGEBOX("Please create and share c:\ice before running this program")
		RETURN
	ENDIF
	
	SET DEFAULT TO c:\ice
	
	IF FILE('icedbc.dbc')
		DELETE file c:\ice\icedbc.*
		DELETE FILE c:\ice\icenums.*
		DELETE FILE c:\ice\icetable.*
	ENDIF
	
	CREATE DATABASE 'ICEDBC.DBC'
	
	***** Table setup for TRANSACTIONS *****
	CREATE TABLE 'ICETABLE.DBF' NAME 'ICETABLE' (;
			PK I NOT NULL, ;
			SOURCE C(10) NOT NULL, ;
			SOURCENUM I NOT NULL, ;
			DATE_TIME T NOT NULL)

	***** Create each index for TRANSACTIONS *****
	SET COLLATE TO 'GENERAL'
	ALTER TABLE 'ICETABLE' ADD PRIMARY KEY PK TAG PK
	INDEX ON SOURCE TAG SOURCE
	INDEX ON SOURCENUM TAG SOURCENUM
	INDEX ON SOURCE+STR(SOURCENUM) TAG SOSO
	
	***** Table setup for ICENUMS *****
	CREATE TABLE 'ICENUMS.DBF' NAME 'ICENUMS' (;
			TABLENAME C(30) NOT NULL, ;
			FIELDNAME C(30) NOT NULL, ;
			FIELDVALUE I NOT NULL)

	INSERT INTO icenums (tablename, fieldname, fieldvalue) ;
		VALUES ("icetable","pk",1)

ELSE
	** this is the 2nd Vista computer
	** so point to the 1st Vista's ice share
	SET DEFAULT TO \\serverpc\ice
ENDIF


LOCAL lnPK,lnX,lnLoops,lcSource,lnSourceNum
DO WHILE .T.
	close data all
	TRY
		OPEN DATABASE icedbc SHARED
		USE icenums SHARED IN 0
		USE icetable SHARED IN 0
	CATCH
		** oh well
	ENDTRY
	IF USED('icetable')
		lnLoops=INT(RAND()*200)
		lcSource=SYS(2015)
		lnSourceNum=INT(RAND()*5000)
		
		BEGIN TRANSACTION 
		
		FOR lnX=1 TO lnLoops
			SELECT icenums
			LOCATE FOR tablename="icetable" AND fieldname="pk"
			IF FOUND()
				IF LOCK()
					lnPK=icenums.fieldvalue
					replace icenums.fieldvalue WITH lnPK+1
					
					INSERT INTO icetable ;
						(pk,source,sourcenum,date_time) ;
						VALUES ;
						(lnPK,lcSource,lnSourceNum,DATETIME())
				ENDIF
			ENDIF
		ENDFOR
		
		** rollback every once in a while
		IF INT(RAND()*5)=4
			? 'rolled back'+TTOC(DATETIME())
			ROLLBACK
		ELSE
			? 'committed '+TTOC(DATETIME())
			END TRANSACTION
		ENDIF
		
		UNLOCK ALL
	ENDIF
	
	WAIT WINDOW 'waiting .1 second' TIMEOUT .1
ENDDO

close data all
Brandon Harker
Sebae Data Solutions
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform