Hi Pablo, sorry for the delayed response.
>From looking at the stack trace, it appears the problem is caused either by locked files or bugs or inconsistencies in UnixFileDirectory. Let me explain. In MaObjectFiler>>#open, Magma asks the UnixFileDirectory directory exists and: [ directory fileExists: self class objectsFilename ] and the system reported true for this, otherwise it would have stopped you right there with a MagmaEnvironmentError. Under this assumption, Magma then proceeds to open the object file. FileDirectory>>#fileNamed: is used to create the FileStream which is required by Magma. Unfortunately if some problem occurs, FileDirectory>>#fileNamed: doesn't signal a meaningful error, it only answers nil. Since we just checked fileExists: its not because it doesn't exist so is it possible the files are "locked" by another process or something? Did they get closed after the upload? Otherwise, there may be some bad inconsistency with UnixFileDirectory>>#fileExists: and UnixFileDirectory>>#fileNamed:. I'm no Unix expert, anyone else have any ideas? - Chris --- Pablo Iaria <[hidden email]> wrote: > Hi all, > > I'm deploying a small seaside application that uses magma to store > objects. I did it in win2k. > > When I try to create the repository I got an error because > seasidehosting uses a modified version of the VM with some sort of > issue in the SecurityPlugin that dont let me do that. (this part > isn't > related to Magma but I wrote it to put as in context ) > > So I tried to create the repository in my win2k and then upload it to > the server. > > When I startup the application I got an error (I included the stack > trace at the end of the message and attached the blank repository I'm > trying to use). > > Does anybody knows what I'm doing wrong and why I couln'd use the > repository created with win2k in linux? > > Thanks! > Pablo.- > > > I set WAMagmaConfiguration's Repository Location to > '/service/edp/files/magma' (as seaside suggested). I'm using the > Sq3.8f+seaside+magma image. > > > MaUserError: fileStream required > > * MaUserError class(Exception class)>>signal: > > self MaUserError > temps > signalerText 'fileStream required' > inst vars > superclass MaError > methodDict a MethodDictionary(#isUserError->a > CompiledMethod (196) ) > format 140 > instanceVariables nil > organization ('as yet unclassified' isUserError) > subclasses #(MaClientServerUserError MagmaUserError > MaHashIndexUserError MaObjectSerializationUserError MauiUse...etc... > name #MaUserError > classPool nil > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MaTransactionalFileStream class>>fileStream: > > self MaTransactionalFileStream > temps > aFileStream nil > inst vars > superclass MaObject > methodDict a MethodDictionary(#bePhysical->a CompiledMethod > (520) #binary->a CompiledMethod (680) #close->a Com...etc... > format 142 > instanceVariables #('filename' 'fileStream' 'guard' > 'uncommittedSize' 'position' 'writers') > organization ('accessing' bePhysical committedSize > copyToDirectory: physicalStream writersDo:) ('filestream api' > ....etc... > subclasses nil > name #MaTransactionalFileStream > classPool nil > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MaObjectFiler>>openFile: > > self a MaObjectFiler > temps > unqualifiedName 'objects' > answer nil > inst vars > directory UnixFileDirectory on '/service/edp/files/magma' > file nil > preMadeObjectBuffer a MaObjectBuffer oid : **invalid** > classId : **invalid** objectInstSize : **invalid** > filePositionIndex nil > usedByteArrays #(a ByteArray(0) a ByteArray(0 0) a > ByteArray(0 0 0) a ByteArray(0 0 0 0) a ByteArray(0 0 0 0 0) a > B...etc... > primitiveAttributeAddressesMap a > Dictionary('anchorOid'->43->64 'booleanFlags'->10->8 > 'classDefinitionsOid'->27->64 'definitionOid'...etc... > > * MaObjectFiler>>openObjectsFile > > self a MaObjectFiler > temps > inst vars > directory UnixFileDirectory on '/service/edp/files/magma' > file nil > preMadeObjectBuffer a MaObjectBuffer oid : **invalid** > classId : **invalid** objectInstSize : **invalid** > filePositionIndex nil > usedByteArrays #(a ByteArray(0) a ByteArray(0 0) a > ByteArray(0 0 0) a ByteArray(0 0 0 0) a ByteArray(0 0 0 0 0) a > B...etc... > primitiveAttributeAddressesMap a > Dictionary('anchorOid'->43->64 'booleanFlags'->10->8 > 'classDefinitionsOid'->27->64 'definitionOid'...etc... > > * MaObjectFiler>>open > > self a MaObjectFiler > temps > inst vars > directory UnixFileDirectory on '/service/edp/files/magma' > file nil > preMadeObjectBuffer a MaObjectBuffer oid : **invalid** > classId : **invalid** objectInstSize : **invalid** > filePositionIndex nil > usedByteArrays #(a ByteArray(0) a ByteArray(0 0) a > ByteArray(0 0 0) a ByteArray(0 0 0 0) a ByteArray(0 0 0 0 0) a > B...etc... > primitiveAttributeAddressesMap a > Dictionary('anchorOid'->43->64 'booleanFlags'->10->8 > 'classDefinitionsOid'->27->64 'definitionOid'...etc... > > * MaObjectFiler class>>open: > > self MaObjectFiler > temps > aFileDirectory UnixFileDirectory on > '/service/edp/files/magma' > inst vars > superclass MaObject > methodDict a MethodDictionary(#anchorOid->a CompiledMethod > (795) #anchorOid:->a CompiledMethod (2841) #appendOb...etc... > format 142 > instanceVariables #('directory' 'file' > 'preMadeObjectBuffer' > 'filePositionIndex' 'usedByteArrays' 'primitiveAttributeA...etc... > organization ('accessing' anchorOid classDefinitionsOid > dataFileName definitionOid directory filePointerForOid: f...etc... > subclasses nil > name #MaObjectFiler > classPool nil > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MaObjectRepository>>open: > > self a MaObjectRepository > temps > aFileDirectory UnixFileDirectory on > '/service/edp/files/magma' > inst vars > transactionLog a MaTransactionLog > sessions a Dictionary() > filer nil > repositoryController a MagmaRepositoryController > largeCollectionManagers a Dictionary() > systemReadStrategy nil > nextOid nil > recoveryManager nil > commitGuard a Semaphore() > applyProcess nil > > * MaObjectRepository class>>open:controller: > > self MaObjectRepository > temps > aFileDirectory UnixFileDirectory on > '/service/edp/files/magma' > aMaRepositoryController a MagmaRepositoryController > inst vars > superclass MaObject > methodDict a MethodDictionary(#abortTransactionFor:->a > CompiledMethod (2026) #applyToCache:->a CompiledMethod (...etc... > format 150 > instanceVariables #('transactionLog' 'sessions' 'filer' > 'repositoryController' 'largeCollectionManagers' > 'systemReadSt...etc... > organization ('client-requests' abortTransactionFor: > numberOfEntriesFrom:to:inLargeCollection:on: readAnchorFor:u...etc... > subclasses nil > name #MaObjectRepository > classPool a Dictionary(#RunningTestCases->false > #SimulateOutage->false ) > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MagmaRepositoryController>>privateOpen: > > self a MagmaRepositoryController > temps > aFileDirectory UnixFileDirectory on > '/service/edp/files/magma' > inst vars > repository a MaObjectRepository > session a MagmaSession > serverSerializer a MaObjectSerializer > requestInterruptGuard a Semaphore() > directory UnixFileDirectory on '/service/edp/files/magma' > preferences a MagmaServerPreferences > > * [] in MagmaRepositoryController>>open {[self privateOpen: > directory]} > > self a MagmaRepositoryController > temps > didRetry false > err nil > inst vars > repository a MaObjectRepository > session a MagmaSession > serverSerializer a MaObjectSerializer > requestInterruptGuard a Semaphore() > directory UnixFileDirectory on '/service/edp/files/magma' > preferences a MagmaServerPreferences > > * BlockContext>>on:do: > > self [] in MagmaRepositoryController>>open {[self > privateOpen: directory]} > temps > exception MagmaCorruptionError > handlerAction [] in MagmaRepositoryController>>open {[:err > | > didRetry ifTrue: [self error: 'serious problem'] ...etc... > handlerActive true > inst vars > sender BlockContext>>on:do: > pc 63 > stackp 0 > nargs 0 > startpc 60 > home MagmaRepositoryController>>open > > * MagmaRepositoryController>>open > > self a MagmaRepositoryController > temps > didRetry false > err nil > inst vars > repository a MaObjectRepository > session a MagmaSession > serverSerializer a MaObjectSerializer > requestInterruptGuard a Semaphore() > directory UnixFileDirectory on '/service/edp/files/magma' > preferences a MagmaServerPreferences > > * MagmaRepositoryController>>open: > > self a MagmaRepositoryController > temps > aFileDirectory UnixFileDirectory on > '/service/edp/files/magma' > inst vars > repository a MaObjectRepository > session a MagmaSession > serverSerializer a MaObjectSerializer > requestInterruptGuard a Semaphore() > directory UnixFileDirectory on '/service/edp/files/magma' > preferences a MagmaServerPreferences > > * MagmaRepositoryController class>>open: > > self MagmaRepositoryController > temps > fullyQualifiedPathString '/service/edp/files/magma' > inst vars > superclass MaObject > methodDict a MethodDictionary(#averageObjectSize->a > CompiledMethod (263) #backupTo:->a CompiledMethod (2344) #b...etc... > format 142 > instanceVariables #('repository' 'session' > 'serverSerializer' 'requestInterruptGuard' 'directory' 'preferences') > organization ('statistics' averageObjectSize > numberOfConnectedClients objectCount version) ('utilities' > backupTo:...etc... > subclasses nil > name #MagmaRepositoryController > classPool a Dictionary(#OpenControllers->a Set() ) > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MagmaRepositoryController class>>openedOn: > > self MagmaRepositoryController > temps > fullyQualifiedPathString '/service/edp/files/magma' > existingController nil > inst vars > superclass MaObject > methodDict a MethodDictionary(#averageObjectSize->a > CompiledMethod (263) #backupTo:->a CompiledMethod (2344) #b...etc... > format 142 > instanceVariables #('repository' 'session' > 'serverSerializer' 'requestInterruptGuard' 'directory' 'preferences') > organization ('statistics' averageObjectSize > numberOfConnectedClients objectCount version) ('utilities' > backupTo:...etc... > subclasses nil > name #MagmaRepositoryController > classPool a Dictionary(#OpenControllers->a Set() ) > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * MagmaSession class>>openLocal: > > self MagmaSession > temps > pathString '/service/edp/files/magma' > inst vars > superclass MaObject > methodDict a MethodDictionary(size 109) > format 152 > instanceVariables #('id' 'user' 'serializer' 'transaction' > 'readStrategy' 'definition' 'preferences' 'anchor' 'transac...etc... > organization ('transactions' abort begin commit > commitAndBegin commitAndBegin: commit: didChange: > inNestedTransac...etc... > subclasses nil > name #MagmaSession > classPool a Dictionary(#ConnectedSessions->a Set(a > MagmaSession a MagmaSession a MagmaSession a MagmaSessio...etc... > sharedPools nil > environment a SystemDictionary(lots of globals) > category nil > > * [] in MagmaLocalLocation>>newSession {[sessionClass openLocal: > fullPath]} > > self /service/edp/files/magma > temps > sessionClass MagmaSession > fullPath '/service/edp/files/magma' > each a MagmaSession > foundSession nil > inst vars > name nil > path '/service/edp/files/magma' > > _______________________________________________ > Magma mailing list > [hidden email] > http://lists.squeakfoundation.org/mailman/listinfo/magma > _______________________________________________ Seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
On Thu, Aug 24, 2006 at 10:09:24PM -0700, Chris Muller wrote:
> Hi Pablo, sorry for the delayed response. > > >From looking at the stack trace, it appears the problem is caused > either by locked files or bugs or inconsistencies in UnixFileDirectory. > Let me explain. > > In MaObjectFiler>>#open, Magma asks the UnixFileDirectory > > directory exists and: [ directory fileExists: self class > objectsFilename ] > > and the system reported true for this, otherwise it would have stopped > you right there with a MagmaEnvironmentError. > > Under this assumption, Magma then proceeds to open the object file. > FileDirectory>>#fileNamed: is used to create the FileStream which is > required by Magma. Unfortunately if some problem occurs, > FileDirectory>>#fileNamed: doesn't signal a meaningful error, it only > answers nil. Since we just checked fileExists: its not because it > doesn't exist so is it possible the files are "locked" by another > process or something? Did they get closed after the upload? > > Otherwise, there may be some bad inconsistency with > UnixFileDirectory>>#fileExists: and UnixFileDirectory>>#fileNamed:. > > I'm no Unix expert, anyone else have any ideas? I don't know if this relates to the original problem, but on Unix the fact that a file exists does not imply that you have permission to open it, read it, or write to it. It is quite normal to have a file that exists but gives you a nil when you try to open it. Granted, it might be nice if the exceptions were more helpful in this regard ;) Dave _______________________________________________ Seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Free forum by Nabble | Edit this page |