Skip to content

Commit

Permalink
Issue #4: implement startStone.solo
Browse files Browse the repository at this point in the history
  • Loading branch information
dalehenrich committed May 31, 2023
1 parent 3f3006f commit 5e795fa
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 42 deletions.
110 changes: 110 additions & 0 deletions bin/startStone.solo
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/usr/bin/env superdoit_solo
options
{
SuperDoitRequiredOptionWithRequiredArg long: 'registry'.
SuperDoitOptionalOptionWithNoArg long: 'netldi' short: 'b'.
SuperDoitOptionalOptionWithNoArg long: 'restart' short: 'r'.
SuperDoitOptionalOptionWithNoArg long: 'notranlogs' short: 'N'.
SuperDoitOptionalOptionWithNoArg long: 'restore' short: 'R'.
SuperDoitOptionalOptionWithRequiredArg long: 'wait' short: 'w'.
SuperDoitOptionalOptionWithNoArg long: 'verbose' short: 'v'.
}
%
Usage
-----
USAGE $basename [--help | -h] [--debug | -D] [--debugGem] [-v | --verbose] \
--registry=<registry-name> <stone-name>

DESCRIPTION
Start named stone.

OPTIONS
-h, --help display usage message
-D, --debug bring up topaz debugger in the event of a script error
--debugGem If terminal is connected to stdout, bring up debugger. If not,
dump stack to stdout and wait for topaz to attach using topaz
DEBUGGEM command.
-v, --verbose Verbose logging enabled.
--registry Name of registry that stone is defined in (Required).
-b, --netldi Start netldi associated with the stone.
-r, --restart Stop and restart stone if is is already running.
-N, --notranlogs
Start without transaction logs.
-R, --restore Start for restore.
-w <waitstone-timeout>,
--wait=<waitstone-timeout>
If stone not started within <waitstone-timeout> seconds, signal
an error.


EXAMPLES
$basename --help
$basename -D
$basename --debugGem
$basename --registry=bosch bosch_370
$basename --registry=bosch bosch_370 -b
$basename --registry=bosch bosch_370 -r
$basename --registry=bosch bosch_370 -N
$basename --registry=bosch bosch_370 -w 5
-----
%
specs
[
RwLoadSpecificationV2 {
#projectName : 'GsDevKit_stones',
#projectSpecFile : 'rowan/project.ston',
#componentNames : [
'Core',
'Solo'
],
#platformProperties : {
'gemstone' : {
'allusers' : {
#defaultSymbolDictName : 'Globals'
}
}
},
#comment : ''
},
RwLoadSpecificationV2 {
#projectName : 'GsCommands',
#projectSpecFile : 'rowan/project.ston',
#diskUrl : '$GEMSTONE/examples/GsCommands/projectsHome/GsCommands',
#componentNames : [
'Commands'
],
#platformProperties : {
'gemstone' : {
'allusers' : {
#defaultSymbolDictName : 'UserGlobals'
}
}
},
#comment : ''
}
]
%
doit
| registryClass stonesRegistry stoneName stoneSpec |
self preDoitSpecLoad: [:spec |
spec projectName = 'GsCommands'
ifTrue: [ spec projectsHome: '$GEMSTONE/examples/GsCommands/projectsHome' ]
ifFalse: [ spec projectsHome: self dirname asFileReference parent parent ] ].
registryClass := (self globalNamed: 'GDKRegistry').
self verbose
ifTrue: [ (self globalNamed: 'GDKGsDevKit_stonesBase') verbose: true ].
stonesRegistry := registryClass stonesRegistryNamed: self registry.
self positionalArgs size ~= 1
ifTrue: [ self error: 'Expected a positional argument: <stone-name>' ].
stoneName := self positionalArgs at: 1.
stoneSpec := stonesRegistry stoneNamed: stoneName.
System gemEnvironmentVariable: 'GEMSTONE' put: stoneSpec gemstonePath.
stoneSpec startStone: self withSuperDoitOptions: true.
self wait
ifNotNil: [:waitTime |
| status |
status := stoneSpec waitStone: waitTime asNumber.
status != 0
ifTrue: [ self error: 'The stone did not start within ', waitTime, ' seconds.' ] ].
^ stonesRegistry
%
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ createStoneStructure: stoneSpec
gemstoneReference / 'data' / 'system.conf' copyTo: stoneRoot / 'system.conf'.
systemConfStream := GsFile
open: (stoneRoot / 'system.conf') pathString
mode: 'w+'
onClient: false. "need to append entries to the file"
mode: 'a+'
onClient: false.
exportDir
at: GDKGsDevKit_stonesBase dataHomeEnvVar
put: self class data_home pathString.
Expand Down Expand Up @@ -101,6 +101,6 @@ createStoneStructure: stoneSpec
fileStream
nextPutAll: 'set GEMSTONE ' , stoneSpec stoneName;
lf;
nextPutAll: 'set u ', userId, ' p ', password;
nextPutAll: 'set u ' , userId , ' p ' , password;
lf ].
self class chmod: (stoneRoot / '.topazini') pathString fileMode: 'u+w,og-rw'
Original file line number Diff line number Diff line change
@@ -1,41 +1,4 @@
runtime
startStone: superDoitScriptOrNil
| arrayOfOutputs stoneLogFile stdout scriptPath |
stdout := superDoitScriptOrNil
ifNotNil: [
scriptPath := superDoitScriptOrNil scriptPath.
superDoitScriptOrNil stdout ]
ifNil: [
scriptPath := ''.
GsFile stdout ].
stdout
lf;
nextPutAll:
'====== ' , scriptPath , ' starting stone at ' , DateAndTime now printString;
lf;
lf.
self defineCustomEnvVars.
stoneLogFile := (self rootDir / self stoneDirectorySpec logs / self stoneName
, 'log') pathString.
[
arrayOfOutputs := (Rowan globalNamed: 'GsStartStone')
startStone: self stoneName
exeConfFile: self sysConfFile pathString
logFile: stoneLogFile ]
on: ChildError
do: [ :ex |
| stoneLog |
stoneLog := stoneLogFile asFileReference.
stoneLog exists
ifFalse: [ ^ ex pass ].
stdout
nextPutAll: stoneLog contents;
lf.
stdout
nextPutAll: '****************************************';
lf.
^ self error: 'Stone did not start' ].
stdout nextPutAll: (arrayOfOutputs at: 1). "stdout"
stdout
nextPutAll: '****************************************';
lf

self startStone: superDoitScriptOrNil withSuperDoitOptions: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
runtime
startStone: superDoitScriptOrNil withSuperDoitOptions: superDoitOptionsBoolean
"if superDoitOptionsBoolean is true, then superDoitScriptOrNil is expected to respond to the following messages:
restart
conversion
notranlogs
restore"

| arrayOfOutputs stoneLogFile stdout scriptPath notranlogsMode restorMode |
notranlogsMode := restorMode := false.
stdout := superDoitScriptOrNil
ifNotNil: [
scriptPath := superDoitScriptOrNil scriptPath.
superDoitOptionsBoolean
ifTrue: [
notranlogsMode := superDoitScriptOrNil notranlogs.
restorMode := superDoitScriptOrNil restore ].
superDoitScriptOrNil stdout ]
ifNil: [
scriptPath := ''.
GsFile stdout ].
stdout
lf;
nextPutAll:
'====== ' , scriptPath , ' starting stone at ' , DateAndTime now printString;
lf;
lf.
self defineCustomEnvVars.
stoneLogFile := (self rootDir / self stoneDirectorySpec logs / self stoneName
, 'log') pathString.
[
arrayOfOutputs := (Rowan globalNamed: 'GsStartStone')
startStone: self stoneName
exeConfFile: self sysConfFile pathString
sysConfFile: self sysConfFile pathString
logFile: stoneLogFile
noTranlogs: notranlogsMode
restoreMode: restorMode
conversionMode: false ]
on: ChildError
do: [ :ex |
| stoneLog |
stoneLog := stoneLogFile asFileReference.
stoneLog exists
ifFalse: [ ^ ex pass ].
stdout
nextPutAll: stoneLog contents;
lf.
stdout
nextPutAll: '****************************************';
lf.
^ self error: 'Stone did not start' ].
stdout nextPutAll: (arrayOfOutputs at: 1). "stdout"
stdout
nextPutAll: '****************************************';
lf

0 comments on commit 5e795fa

Please sign in to comment.