I don't see yet why this is happening with this specific object.
In your client, put a halt in the MaTcpRequestServerLink>>#getByteArrayResponseFor: aMaServerRequest. When it halts explore that aMaServerRequest to verify you do indeed have IFILevelCollection in there somewhere (exploring all the way down, if necessary). We need to trace back why/how you are putting this in the request, because the generic Magma Server knows nothing of IFILevelCollection's. That's why it is signaling a MalformedRequest.
- Chris
On Dec 14, 2007 5:09 AM, Hilaire Fernandes hilaire@ofset.org wrote:
2007/12/14, Chris Muller asqueaker@gmail.com:
Hi Hilaire, for whatever class you are getting "id not found" look in your client at this path:
theMagmaSession link serializer classIdManager classesById
In 'classesById' look for the id of the class the server image is claiming is not found. THAT is the class of the object that is causing the problem.
Is that the IFICompetencyCollection ? What is IFICompetencyCollection ?
Ok, in the server side I have to put a halt in the following message to get the missing class ID, otherwise the error message in the server is not helpful as the ID is not provided at this moment. Not sure if you can have the ID shipped in the error message object, it will be helpful:
classDefinitionsForId: anInteger ^ self classDefinitionsForId: anInteger ifAbsent: [self halt. MaObjectSerializationSoftwareError signal: 'class-definition not found' ]
Now I see my missing id is 206, and it is an IFILevelCollection, a subclass of OrderedCollection. This class is also present in the server image, but I guess there is no relation. This class is very simple, only with methods addLast: and findLevelWith:
I don't see yet why this is happening with this specific object.
Regards, Chris
On Dec 12, 2007 6:26 AM, Hilaire Fernandes hilaire@ofset.org wrote:
Thanks for your advices, it is helpful.
In this place of the application I am not using read strategy. In other place of the application where I am suing read strategy I don't have the problem, so may be it is a problem underneath.
In the Magma client I only have the modification to StrikeFont>>maAsStorageObject so TextMorph are persisted correctly. I apply this change both to client and server :
StrikeFont>>maAsStorageObject ^ DiskProxy global: #StrikeFont selector: #familyName:pointSize:emphasized: args: { self familyName. self pointSize. self emphasis }
Chris, I went until the MaTcp...>>submit: method, but I don't really understand where to look.
From the MaCommitPackage, the MagmaCollectionChanges looks like:
collectionOid: 4112481 changes: a Dictionary(#added->an IdentityDictionary(66543->an OrderedCollection(#(250776336) #(0) #(10625597) an IFILevelCollection() #(1)) ) #removed->an IdentityDictionary() ) isNewCollection: false collection: a MagmaCollection
The problem happens when I add an object to a MagmaCollection
IFIDbSession commit: [pedagogicalMoments add: moment]
In this commit, TextMorph persitency occurs. I repeat this code is working when Magma is in local mode.
In the client, MagmaRepositoryController basicNew protocol returns, where only IFICompetencyCollection is new (the server has the same protocol size):
{LargePositiveInteger . MaSerializedGraphBuffer . MaByteObjectBuffer . MaVariableWordBuffer . MaVariableObjectBuffer . MaFixedObjectBuffer . MaStorageObjectBuffer . MaVariableBuffer . MaLargeCollectionSegmentRequest . MaLoadProgressRequest . MaRefreshSegmentRequest . MaDownloadCodeRequest . MaLoadFromReaderRequest . MaReaderTrunkRequest . MaAbortTransactionRequest . MaRepositoryConnectionRequest . MaWriteRequest . MagmaPathNameRequest . MaCloseRepositoryRequest . MaLargeCollectionSizeRequest . MaAbstractReadRequest . MaTransactionRequest . MagmaIdRequest . MaAnchorRequest . MaReadRequest . MaKeyIntervalInfoRequest . MaSegmentByIndexRequest . MaRepositoryDisconnectRequest . MaCommitPackage . MaBasicReadStrategy . MaReadStrategy . MagmaCollectionSegment . MaRefreshViewResult . MaReadResult . MagmaLargeCollectionSegment . MaCommitResult . MagmaCollectionReaderSegment . MaFailedCommitResult . MagmaId . UUID . MaFailedCommitResult . MagmaClientConnection . MagmaCommitConflict . Fraction . MaClause . MaExpression . MaQueryTrunkClause . MaQueryTrunk . MagmaSet . IFICompetencyCollection . MagmaCollection . IdentityDictionary . MagmaIndexDescription . MagmaArrayChanges . MagmaCollectionChanges . Association . MaChangedKeySpecification . MaEnvironmentError . MaObjectSerializationUserError . MaUnreadableRecoveryRecord . MagmaEquivalentObjectNotInCollection . MagmaSoftwareError . MaNetworkError . MagmaSessionLost . MagmaEnvironmentError . MaObjectSerializationSecurityViolation . MaHashIndexUserError . MagmaUserError . MagmaInvalidIndexObject . MagmaCommitError . MaClientServerUserError . MagmaCorruptionError . MaSecurityViolation . MagmaGarbageCollectedObject . MagmaDuplicateObjectInCollection . MaSoftwareError . MaCorruptionError . MagmaInvalidOid . MaUserError . MaMalformedRequestError . MaObjectSerializationSoftwareError . MaSpecialCollectionsSoftwareError}
Le mardi 11 décembre 2007 à 23:06 -0500, Chris Muller a écrit :
Hi Hilaire, a the MalformedRequest error is telling you the server received a request from your client that it could not properly materialize. Specifically, it looks like your Magma client has attempted to extend the Magma #protocol ("class id not found"). Are you running a modified Magma client?
It does look like the error-handling code incorrectly passes the MalformedRequestError Exception AS the request which is, of course, a bug. I will fix that, so that it kick the error back to your client as it should.
But I know you are interested in the cause of the error itself. When you get this error, you should break into your client and look in teh debugger at the request it passed to the server. Look at ALL the arguments and find which object whose class is not included in this Array:
MagmaRepositoryController basicNew protocol
THAT is the one that is causing the problem.
- Chris
Magma mailing list Magma@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/magma
-- http://blog.ofset.org/hilaire Smalltalkers do: [:it | All with: Class, (And love: it)]
magma@lists.squeakfoundation.org