SF.net SVN: fclient: [126] trunk/sandbox/fcp/fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
From: <ju...@us...> - 2008-02-03 13:14:54
|
Revision: 126 http://fclient.svn.sourceforge.net/fclient/?rev=126&view=rev Author: jurner Date: 2008-02-03 05:14:59 -0800 (Sun, 03 Feb 2008) Log Message: ----------- persistence == connection is now handled ++ some fixes Modified Paths: -------------- trunk/sandbox/fcp/fcp2_0_client.py Modified: trunk/sandbox/fcp/fcp2_0_client.py =================================================================== --- trunk/sandbox/fcp/fcp2_0_client.py 2008-02-03 13:13:56 UTC (rev 125) +++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-03 13:14:59 UTC (rev 126) @@ -485,7 +485,8 @@ self.close() msg = self.Message( consts.Message.ClientDisconnected, - DisconnectReason=consts.DisconnectReason.VersionMissmatch + DisconnectReason=consts.DisconnectReason.VersionMissmatch, + Param=msg, ) self.events.ClientDisconnected(msg) yield self._nodeHelloMessage @@ -503,7 +504,8 @@ msg = self.Message( consts.Message.ClientDisconnected, - DisconnectReason=consts.DisconnectReason.ConnectingFailed + DisconnectReason=consts.DisconnectReason.ConnectingFailed, + Param=None, ) self.events.ClientDisconnected(msg) self._log.info(consts.LogMessages.ConnectingFailed) @@ -605,7 +607,8 @@ self.close() msg = self.Message( consts.Message.ClientDisconnected, - DisconnectReason=DisconnectReason.Shutdown, + DisconnectReason=consts.DisconnectReason.Shutdown, + Param=None, ) self.events.ClientDisconnected(msg) return True @@ -810,45 +813,49 @@ elif msg.name == consts.Message.AllData: if initialRequest is None: return False - + + # Fcp removes requests from queue with Persistence.Connection.. so do we + if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: + del self._requests[requestIdentifier] + + initialRequest['FcStatus'] = consts.MessageStatus.Complete initialRequest.data = msg.data self.events.RequestCompleted(initialRequest) return True elif msg.name == consts.Message.DataFound: - if initialRequest is None: - # something is going wrong return False initialRequest['FcStatus'] = consts.MessageStatus.Complete initialRequest['FcMetadataContentType'] = msg.get('Metadata.ContentType', '') initialRequest['FcDataLength'] = msg.get('DataLength', '') if initialRequest['FcSubType'] != consts.MessageSubType.GetData: + initialRequest['FcStatus'] = consts.MessageStatus.Complete + + # Fcp removes requests from queue with Persistence.Connection.. so do we + if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: + del self._requests[requestIdentifier] self.events.RequestCompleted(initialRequest) return True - + - elif msg.name == consts.Message.GetFailed: - code = msg['Code'] if initialRequest is None: - # something is going wrong return False + # Fcp removes requests from queue with Persistence.Connection.. so do we + if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: + del self._requests[requestIdentifier] + # check if it is one of our requests for key information - if code == self.FetchError.TooBig and initialRequest['FcSubType'] == consts.MessageSubType.GetKeyInfo: + code = msg['Code'] + if code == consts.FetchError.TooBig and initialRequest['FcSubType'] == consts.MessageSubType.GetKeyInfo: initialRequest['FcStatus'] = consts.MessageStatus.Complete initialRequest['FcMetadataContentType'] = msg.get('ExpectedMetadata.ContentType', '') initialRequest['FcDataLength'] = msg.get('ExpectedDataLength', -1) - initialRequest['FcProgressCompleted'] = True - #TODO: check if Fcp removed the request - self.events.RequestCompleted(initialRequest) else: - - #TODO: check if Fcp removed the request - initialRequest['FcErrorMessage'] = msg initialRequest['FcStatus'] = consts.MessageStatus.Error self.events.RequestFailed(initialRequest) @@ -975,7 +982,6 @@ elif msg.name == consts.Message.SimpleProgress: if initialRequest is None: - # something went wrong return False initialRequest['FcProgressTotal'] = msg['Total'] @@ -989,11 +995,24 @@ ## put related elif msg.name == consts.Message.URIGenerated: - if initialRequest is None: # something went wrong + if initialRequest is None: return False initialRequest['URI'] = msg['URI'] return True + elif msg.name == consts.Message.PutFailed: + if initialRequest is None: + return False + + # Fcp removes requests from queue with Persistence.Connection.. so do we + if initialRequest.params.get('Persistence', consts.Persistence.Connection) == consts.Persistence.Connection: + del self._requests[requestIdentifier] + + initialRequest['FcErrorMessage'] = msg + initialRequest['FcStatus'] = consts.MessageStatus.Error + self.events.RequestFailed(initialRequest) + return True + elif msg.name == consts.Message.PutFetchable: if initialRequest is None: @@ -1006,12 +1025,12 @@ elif msg.name == consts.Message.PutSuccessful: if initialRequest is None: - # something went wrong return False # TODO: StartupTime and CompletionTime are passed, but # as long as no corrosponding params are passed in DataFound # we ignore them + initialRequest['FcStatus'] = consts.MessageStatus.Complete initialRequest['URI'] = msg['URI'] self.events.RequestCompleted(initialRequest) return True @@ -1075,9 +1094,10 @@ elif msg.name == consts.Message.CloseConnectionDuplicateClientName: msg = self.Message( consts.Message.ClientDisconnected, - DisconnectReason=DisconnectReason.DuplicateClientName, + DisconnectReason=consts.DisconnectReason.DuplicateClientName, + Param=None, ) - self.events.ClientDisconnect(msg) + self.events.ClientDisconnected(msg) return True @@ -1119,9 +1139,13 @@ msg = self.Message.fromSocket(self._socket) if msg.name == consts.Message.ClientSocketDied: if dispatch: - msg['DisconnectReason'] = consts.DisconnectReason.SocketDied + msg = self.Message( + consts.Message.ClientDisconnected, + DisconnectReason=consts.DisconnectReason.SocketDied, + Param=msg, + ) self.events.ClientDisconnected(msg) - raise socket.error(msg['Details']) + #raise socket.error(msg['Param']['Details']) elif msg.name == consts.Message.ClientSocketTimeout: if dispatch: @@ -1166,14 +1190,12 @@ except socket.error, d: self._log.info(consts.LogMessages.SocketDied) self.close() - - errorMsg = self.Message( - consts.Message.ClientSocketDied, - DisconnectReason=consts.DisconnectReason.SocketDied, - Exception=socket.error, - Details=d + msg = self.Message( + consts.Message.ClientDisconnected, + DisconnectReason=consts.DisconnectReason.SocketDied, + Param=self.Message(consts.Message.ClientSocketDied, Exception=socket.error, Details=d) ) - self.events.ClientDisconnected(errorMsg) + self.events.ClientDisconnected(msg) raise socket.error(d) return msg @@ -1288,12 +1310,19 @@ @param maxSize: (int) maximum size of the file in bytes or None to set no limited @param persistence: (L{consts.Persistence}) persistence of the request @param priorityClass: (L{consts.Priority}) priority of the request - @param userData: any non persistent data to associate to the request @param persistentUserData: any string to associate to the request as persistent data + + @return: (str) request identifier - @return: (str) request identifier - @note: if a filename collision is handled a RequestFilenameChanged event is triggered + @param event: RequestCompleted(event, message) triggered when the request is complete + @param event: RequestFailed(event, message) triggered when the request failes + @param event: RequestStarted(event, message) triggered when as the request is started + @param event: RequestModified(event, message) trigggered if the request identifier changes + or the request is modified otherwise (see L{modifyRequest}) + + @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client + as soon as it completes or failes """ return self.clientGet( uri, @@ -1349,13 +1378,20 @@ @param maxSize: (int) maximum size of the file in bytes or None to set no limited @param persistence: (L{consts.Persistence}) persistence of the request @param priorityClass: (L{consts.Priority}) priority of the request - @param filenameCollision: what to do if the disk target alreaady exists. One of the FilenameCollision.* consts @param userData: any non persistent data to associate to the request @param persistentUserData: any string to associate to the request as persistent data @return: (str) request identifier - @note: if a filename collision is handled a RequestFilenameChanged event is triggered + + @param event: RequestCompleted(event, message) triggered when the request is complete + @param event: RequestFailed(event, message) triggered when the request failes + @param event: RequestStarted(event, message) triggered when as the request is started + @param event: RequestModified(event, message) trigggered if the request identifier changes, + filename changes or the request is modified otherwise (see L{modifyRequest}) + + @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client + as soon as it completes or failes """ return self.clientGet( uri, @@ -1407,6 +1443,15 @@ @param persistentUserData: any string to associate to the request as persistent data @return: (str) request identifier + + @param event: RequestCompleted(event, message) triggered when the request is complete + @param event: RequestFailed(event, message) triggered when the request failes + @param event: RequestStarted(event, message) triggered when as the request is started + @param event: RequestModified(event, message) trigggered if the request identifier changes + or the request is modified otherwise (see L{modifyRequest}) + + @note: if persistence is L{consts.Persistence.Connection} the request is removed from the client + as soon as it completes or failes """ # how to retrieve meta info about a key? ...idea is to provoke a GetFailed (TooBig) return self.clientGet( @@ -1902,9 +1947,9 @@ for i in xrange(50): c.next() - c.removeRequest(identifier) - for i in xrange(5): - c.next() + #c.removeRequest(identifier) + #for i in xrange(5): + # c.next() #testGetData() @@ -1917,30 +1962,42 @@ 'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg', filename, filenameCollision=c.FilenameCollision.HandleRename, - persistence=consts.Persistence.Forever, + #persistence=consts.Persistence.Forever, ) for i in xrange(50): c.next() - c.removeRequest(identifier) - for i in xrange(5): - c.next() + #c.removeRequest(identifier) + #for i in xrange(5): + # c.next() #testGetFile() def testGetKeyInfo(): + + + identifier = c.getKeyInfo( 'CHK@q4~2soHTd9SOINIoXmg~dn7LNUAOYzN1tHNHT3j4c9E,gcVRtoglEhgqN-DJolXPqJ4yX1f~1gBGh89HNWlFMWQ,AAIC--8/snow_002%20%2810%29.jpg', + #persistence=c.consts.Persistence.Reboot, ) - - for i in xrange(50): + + + def cb(event, msg): + if event == c.events.RequestCompleted: + pass + #c.sendMessage(c.consts.Message.GetRequestStatus, Identifier=identifier) + c.events.RequestCompleted += cb + + for i in xrange(55): c.next() - c.removeRequest(identifier) - for i in xrange(5): - c.next() + #c.removeRequest(identifier) + #for i in xrange(5): + # c.next() + c.events.RequestCompleted -= cb #testGetKeyInfo() @@ -1953,9 +2010,9 @@ for i in xrange(100): c.next() - c.removeRequest(myIdentifier) - for i in xrange(5): - c.next() + #c.removeRequest(myIdentifier) + #for i in xrange(5): + # c.next() #testPutData() @@ -1969,9 +2026,9 @@ for i in xrange(1000): c.next() - c.removeRequest(identifier) - for i in xrange(5): - c.next() + #c.removeRequest(identifier) + #for i in xrange(5): + # c.next() #testPutFile() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |