Nicolas Cellier uploaded a new version of SMBase to project The Trunk:
http://source.squeak.org/trunk/SMBase-tpr.141.mcz==================== Summary ====================
Name: SMBase-tpr.141
Author: tpr
Time: 18 January 2019, 4:24:49.815196 pm
UUID: 4997d27a-e261-41e0-b019-7723c85a5c1b
Ancestors: SMBase-cmm.140
First step towards improving the SM loading stuff; allow up to 3 attempts to help with handling network slowness etc.
Next step should be using a webclient instead of the httpsocket and getting somewhat nice eror handling.
=============== Diff against SMBase-cmm.140 ===============
Item was changed:
----- Method: SMSqueakMap>>loadFullFrom: (in category 'private') -----
+ loadFullFrom: aServerName
+ "Contact the SqueakMap at aServerName, building the the url for this version and load a full map from scratch.
+ Allow several retries in case of net slowness etc."
+ | url zipped attempts mapContents |
+ url := '
http://' , aServerName , '/loadgz?mapversion=' , SMSqueakMap version , '&checkpoint=' , checkpointNumber asString.
+ attempts := 0.
- loadFullFrom: aServerName
- "Contact the SqueakMap at the url <aSqueakMapUrl>
- and load a full map from scratch."
+ [attempts := attempts + 1.
+ zipped := HTTPSocket httpGet: url.
+ zipped isString
+ ifTrue: ["awful legacy way to detect net error - use a proper technique
+ when the httpsocket can be replaced with a webclient. For now, raise a generic exception"
+ NetworkError signal]]
+ on: NetworkError
+ do: [:ex |
+ attempts >= 3
+ ifTrue: [self halt: 'Unable to load SqueakMap map update after ' , attempts asString , ' attempts'].
+ ex retry].
+
+ mapContents := zipped contents.
+ ((self checkVersion: mapContents)
+ and: [mapContents ~= 'UPTODATE'])
+ ifTrue: [self saveCheckpoint: mapContents.
+ self reload]!
- | url zipped |
- url := '
http://', aServerName, '/loadgz?mapversion=', SMSqueakMap version, '&checkpoint=', checkpointNumber asString.
- Transcript show: 'Fetch: ', (Time millisecondsToRun: [ zipped := (HTTPSocket httpGet: url) contents]) asString, ' ms';cr.
- Transcript show: 'Size: ', zipped size asString, ' bytes';cr.
- ((self checkVersion: zipped) and: [zipped ~= 'UPTODATE'])
- ifTrue:[
- Transcript show: 'Save checkpoint to disk: ', (Time millisecondsToRun: [
- self saveCheckpoint: zipped]) asString, ' ms';cr.
- Transcript show: 'Full reload from checkpoint: ', (Time millisecondsToRun: [
- self reload]) asString, ' ms';cr.]!