[Seaside] Re: Magma + seasidehosting

Chris Muller chris at funkyobjects.org
Fri Aug 25 05:09:24 UTC 2006


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 <iariap at gmail.com> 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
> Magma at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/magma
> 



More information about the Seaside mailing list