Hi, When I configure a production image with command st handler as following:
pharo myImage st --save --quit configureMyImage.st I notice at image start up, a Socket timeout error. In the configureMyImage.st script, among other things, I open a singleton Voyage repository. I added a 5s delay at the end of this script, just wondering if image was shutdown before Voyage establishes connection with the Mongo DB, but no. Any incompatibility issues to be aware of between st command handler (particularly the --save part) and Voyage repository? Thanks, Hilaire -- Dr. Geo http://drgeo.eu
THERE_BE_DRAGONS_HERE ConnectionTimedOut: Cannot connect to 127.0.0.1:27017 22 Mars 2017 8:28:44.426873 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.20 uuid: cf2aeeee-897d-48fd-8251-6789dd21d958 Jun 14 2014 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.20 uuid: cf2aeeee-897d-48fd-8251-6789dd21d958 Jun 14 2014 https://github.com/pharo-project/pharo-vm.git Commit: 0e8bbfbaeb03237fa6bb63ba834773fab18ca307 Date: 2014-06-14 12:20:21 -0300 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #14833 Image: Pharo4.0 [Latest update: #40626] [ ConnectionTimedOut signal: 'Cannot connect to ' , (NetNameResolver stringFromAddress: hostAddress) , ':' , port asString ] in Socket>>connectTo:port:waitForConnectionFor: Receiver: a Socket[invalidSocketHandle] Arguments and temporary variables: hostAddress: #[127 0 0 1] port: 27017 timeout: 45 Receiver's instance variables: semaphore: a Semaphore() socketHandle: #[22 158 214 88 0 0 0 0 168 244 243 8] readSemaphore: a Semaphore() writeSemaphore: a Semaphore() Socket>>waitForConnectionFor:ifTimedOut: Receiver: a Socket[invalidSocketHandle] Arguments and temporary variables: timeout: 45 timeoutBlock: [ ConnectionTimedOut signal: 'Cannot connect to ' , (NetNameResol...etc... startTime: 265 msecsDelta: 45000 msecsEllapsed: 0 status: -1 Receiver's instance variables: semaphore: a Semaphore() socketHandle: #[22 158 214 88 0 0 0 0 168 244 243 8] readSemaphore: a Semaphore() writeSemaphore: a Semaphore() Socket>>connectTo:port:waitForConnectionFor: Receiver: a Socket[invalidSocketHandle] Arguments and temporary variables: hostAddress: #[127 0 0 1] port: 27017 timeout: 45 Receiver's instance variables: semaphore: a Semaphore() socketHandle: #[22 158 214 88 0 0 0 0 168 244 243 8] readSemaphore: a Semaphore() writeSemaphore: a Semaphore() SocketStream class>>openConnectionToHost:port:timeout: Receiver: SocketStream Arguments and temporary variables: hostIP: #[127 0 0 1] portNumber: 27017 timeout: 45 socket: a Socket[invalidSocketHandle] Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#'<<'->SocketStream>>#'<<' #adjustInBuffer:->Soc...etc... format: 154 layout: a FixedLayout instanceVariables: #('recentlyRead' 'socket' 'inBuffer' 'outBuffer' 'inNextToWr...etc... organization: a ClassOrganization subclasses: nil name: #SocketStream classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Network-Kernel' traitComposition: {} localSelectors: nil SocketStream class>>openConnectionToHost:port: Receiver: SocketStream Arguments and temporary variables: hostIP: #[127 0 0 1] portNumber: 27017 Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#'<<'->SocketStream>>#'<<' #adjustInBuffer:->Soc...etc... format: 154 layout: a FixedLayout instanceVariables: #('recentlyRead' 'socket' 'inBuffer' 'outBuffer' 'inNextToWr...etc... organization: a ClassOrganization subclasses: nil name: #SocketStream classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Network-Kernel' traitComposition: {} localSelectors: nil SocketStream class>>openConnectionToHostNamed:port: Receiver: SocketStream Arguments and temporary variables: hostName: 'localhost' portNumber: 27017 hostIP: #[127 0 0 1] Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#'<<'->SocketStream>>#'<<' #adjustInBuffer:->Soc...etc... format: 154 layout: a FixedLayout instanceVariables: #('recentlyRead' 'socket' 'inBuffer' 'outBuffer' 'inNextToWr...etc... organization: a ClassOrganization subclasses: nil name: #SocketStream classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Network-Kernel' traitComposition: {} localSelectors: nil GratuitousIncompatibilities class>>socketStreamHost:port: Receiver: GratuitousIncompatibilities Arguments and temporary variables: aString: 'localhost' anInteger: 27017 result: nil Receiver's instance variables: superclass: Object methodDict: a MethodDictionary() format: 2 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #GratuitousIncompatibilities classPool: a Dictionary(#UTF8Codec->nil #UTF8Converter->nil ) sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Mongo-Squeak' traitComposition: {} localSelectors: nil Mongo>>open Receiver: Mongo (localhost:27017) Arguments and temporary variables: Receiver's instance variables: host: 'localhost' port: 27017 stream: nil requestID: 0 authCache: nil VOMongoSessionPool(VOSessionPool)>>ensureConnected: Receiver: a VOMongoSessionPool Arguments and temporary variables: aSession: Mongo (localhost:27017) Receiver's instance variables: sessions: SharedQueue with 0 items size: 10 mutex: a Semaphore() process: a Process in nil host: 'localhost' port: 27017 database: 'DBRefinancement' username: nil password: nil [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] in [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] in [ self isPopulating ifFalse: [ process := [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] forkAt: Processor lowestPriority named: 'Voyage mongo pool: populating' ] ] in VOMongoSessionPool(VOSessionPool)>>populate Receiver: a VOMongoSessionPool Arguments and temporary variables: Receiver's instance variables: sessions: SharedQueue with 0 items size: 10 mutex: a Semaphore() process: a Process in nil host: 'localhost' port: 27017 database: 'DBRefinancement' username: nil password: nil SmallInteger(Integer)>>timesRepeat: Receiver: 10 Arguments and temporary variables: aBlock: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: se...etc... count: 1 Receiver's instance variables: 10 [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] in [ self isPopulating ifFalse: [ process := [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] forkAt: Processor lowestPriority named: 'Voyage mongo pool: populating' ] ] in VOMongoSessionPool(VOSessionPool)>>populate Receiver: a VOMongoSessionPool Arguments and temporary variables: Receiver's instance variables: sessions: SharedQueue with 0 items size: 10 mutex: a Semaphore() process: a Process in nil host: 'localhost' port: 27017 database: 'DBRefinancement' username: nil password: nil [ self value. Processor terminateActive ] in BlockClosure>>newProcess Receiver: [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureC...etc... Arguments and temporary variables: Receiver's instance variables: outerContext: [ self isPopulating ifFalse: [ process := [ self size ...etc... startpc: 81 numArgs: 0 --- The full stack --- [ ConnectionTimedOut signal: 'Cannot connect to ' , (NetNameResolver stringFromAddress: hostAddress) , ':' , port asString ] in Socket>>connectTo:port:waitForConnectionFor: Socket>>waitForConnectionFor:ifTimedOut: Socket>>connectTo:port:waitForConnectionFor: SocketStream class>>openConnectionToHost:port:timeout: SocketStream class>>openConnectionToHost:port: SocketStream class>>openConnectionToHostNamed:port: GratuitousIncompatibilities class>>socketStreamHost:port: Mongo>>open VOMongoSessionPool(VOSessionPool)>>ensureConnected: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] in [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] in [ self isPopulating ifFalse: [ process := [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] forkAt: Processor lowestPriority named: 'Voyage mongo pool: populating' ] ] in VOMongoSessionPool(VOSessionPool)>>populate SmallInteger(Integer)>>timesRepeat: [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] in [ self isPopulating ifFalse: [ process := [ self size timesRepeat: [ self isFull ifFalse: [ self returnToPool: (self ensureConnected: self newSession) ] ] ] forkAt: Processor lowestPriority named: 'Voyage mongo pool: populating' ] ] in VOMongoSessionPool(VOSessionPool)>>populate [ self value. Processor terminateActive ] in BlockClosure>>newProcess -------------------------------------------------------------------------------