Skip to content

Commit

Permalink
Sharding between Mac & Windows almost working, if it wasn't for Samba…
Browse files Browse the repository at this point in the history
… errors
  • Loading branch information
mkromberg committed Sep 29, 2016
1 parent 60cb4cb commit 28f0fff
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 82 deletions.
41 changes: 23 additions & 18 deletions APLProcess.dyalog
Original file line number Diff line number Diff line change
Expand Up @@ -51,28 +51,29 @@
Start(Ws Args RunTime)

Start(ws args rt);psi;pid
Start(ws args rt);psi;pid;cmd;host;port;keyfile;exe
(Ws Args)ws args
:If 0RIDE_INIT
argsargs,' RIDE_SPAWNED=1 RIDE_INIT=',RIDE_INIT
:EndIf

:If ~0 210|⎕DR rt if rt is character, it's the executable name
Exe(RunTimeNamert)GetCurrentExecutable
:If ~0 2 610|⎕DR rt if rt is character or nested, it defines what to start
Exe(RunTimeNamert) GetCurrentExecutable else, deduce it
:Else
Exert
rt0
:EndIf
ws,←rt/' salt' ⍝ if runtime, load the salt workspace first, which will subsequently load the target workspace
:If IsWinIsWindows

:If IsWinIsWindows~IsSsh326=⎕DR Exe
⎕USING'System,System.dll'
psi⎕NEW Diagnostics.ProcessStartInfo,Exe(ws,' ',args)
psi.WindowStyleDiagnostics.ProcessWindowStyle.Minimized
ProcDiagnostics.Process.Start psi
:Else Unix
:If IsSsh326=⎕DR Exe
∘∘∘
ProcSshProc Exe
:If IsSsh
(host port keyfile exe)Exe
cmdargs,' ',exe,' -q +s ',ws
ProcSshProc host port keyfile cmd
:Else
pid_SH'{ ',args,' ',Exe,' +s ',ws,' -c APLppid=',(GetCurrentProcessId),' </dev/null >/dev/null 2>&1 & } ; echo $!'
Proc.Idpid
Expand Down Expand Up @@ -111,7 +112,6 @@
:If IsWin
r't'⎕NA'U4 kernel32|GetCurrentProcessId'
:ElseIf IsSsh
∘∘∘
rProc.Pid
:Else
rtonum_SH'echo $PPID'
Expand All @@ -120,7 +120,7 @@

rGetCurrentExecutable;⎕USING;t;gmfn
:Access Public Shared
:If IsWin
:If IsWindows
r''
:Trap 0
'gmfn'⎕NA'U4 kernel32|GetModuleFileName* P =T[] U4'
Expand Down Expand Up @@ -305,10 +305,8 @@

rHasExited
:Access public instance
:If IsWin
:If IsWinIsSsh
r{0:: Proc.HasExited}1
:ElseIf IsSsh
∘∘∘
:Else
r~UNIXIsRunning Proc.Id AWS
:EndIf
Expand Down Expand Up @@ -480,14 +478,21 @@
listpids{0~2(⎕UCS 10)⎕VFI (conn.RunCommand 'ps -u ',user,' | grep dyalog | grep -v grep | awk ''{print $2}''').Result}
guid'dyalog-ssh-',(⎕TS)~' '
pidslistpids
tidconn.RunCommand&cmd ,' -c ''',guid,''''
:If 1=pid(listpids )~pids pidpid
:Else ∘∘∘ :EndIf failed to start
Proc⎕NS ''
Proc.SshConnconn
Proc.HasExited0
tid{SshRun conn Proc}&cmd
Proc.tidtid
Proc.Pid

⎕DL 1
:If 1=pid(listpids )~pids pidpid
:Else ∘∘∘ :EndIf failed to start
Proc.Pidpid

SshRun (conn cmd proc)
Wait until APL exits, then set HasExited←1
conn.RunCommand cmd
proc.HasExited1

:EndClass
33 changes: 21 additions & 12 deletions TestVecdbSrv.dyalog
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
LOG1
toJson(0 1)(7160)

zBenchmark;columns;data;options;params;folder;types;name;ix;users;srvproc;clt;TEST;config;db;path
zBenchmark;columns;data;options;params;folder;types;name;ix;users;srvproc;clt;TEST;config;db;path;tn;folders
Test database with 2 shards
Also acts as test for add/remove columns

pathInit
pathInit
path'//Mortens-Macbook-Air/vecdb'
folderpath,'/',(name'srvtest'),'/'
'Clearing: ',folder
:Trap 22 {}#.vecdb.Delete folder :EndTrap
Expand All @@ -23,7 +24,13 @@

--- Launch and connect to server, open database ---

srvproc#.vecdbsrv.Launch folder 8100
tn(folder,'meta.vecdb') ⎕FSTIE 0
↓↓↓ Arrgh, need to rename shards with local view from PC and Mac
folders⎕FREAD tn,6
'c:\devt\vecdb\srvtest\shard1\' '//Users/mkrom/vecdb/srvtest/shard2/' ⎕FREPLACE tn,6
⎕FUNTIE tn

srvproc#.vecdbsrv.Launch folder 8100 'c:\devt\vecdb\vecdbboot.dws'
#.vecdbclt.Connect '127.0.0.1' 8100 'mkrom'
db#.vecdbclt.Open folder

Expand Down Expand Up @@ -54,7 +61,12 @@
:If ~srvproc.HasExited srvproc.Kill :EndIf
⎕DL 3

TEST'Erase database'
TEST'Erase database'
tn(folder,'meta.vecdb') ⎕FSTIE 0
↓↓↓ Arrgh, need to rename shards with local view from PC and Mac
folders ⎕FREPLACE tn,6
⎕FUNTIE tn

db⎕NEW #.vecdb(,folder)
assert 0={db.Erase}time

Expand All @@ -74,18 +86,12 @@
ServerBasic

TestSsh;cmd
cmd'RIDE_SPAWNED=1 RIDE_INIT=SERVE::5678 /Applications/Dyalog-15.0.app/Contents/Resources/Dyalog/mapl -q +s'
##.APLProcess.NewSshClient '192.168.6.120' 'mkrom' 'c:\docs\personal\macbook-air' cmd
##.APLProcess.NewSshClient '192.168.17.129' 'mkrom' 'c:\docs\personal\macbook-air' cmd

configCreateBenchConfig filename;db;config;user;vecdbsrv;cmd;host;keyfile;userid
cmd'RIDE_SPAWNED=1 RIDE_INIT=SERVE::5678 /Applications/Dyalog-15.0.app/Contents/Resources/Dyalog/mapl'
host'Mortens-Macbook-Air'
userid'mkrom'
keyfile'c:\docs\personal\macbook_air'
keyfile'c:\docs\personal\macbook-air'

user⎕NS ''
user.(Name Id Admin)'mkrom' 1001 1
Expand All @@ -96,8 +102,11 @@
db.Folderfolder
db.Slaves⎕NS¨2''
db.Slaves.Shards,¨1 2 Distribution of shards to slave processors
db.Slaves.Folderfolder
db.Slaves[1].(Launch⎕NS '').Type'local'
db.Slaves[1].Folder'//Mortens-Macbook-Air/vecdb/srvtest/' If different seen from this slave
db.Slaves[2].(Launch⎕NS '').(Type Host User KeyFile Cmd)'ssh' host userid keyfile cmd
db.Slaves[2].Folder'/Users/mkrom/vecdb/srvtest/'
config⎕NS''
config.Servervecdbsrv
config.DBs,db
Expand Down Expand Up @@ -129,7 +138,7 @@

options⎕NS''
options.BlockSize10000
options.ShardFolders(folder,'Shard1') '\\Mortens-Macbook-Air\vecdb\Shard2'
options.ShardFolders'c:\devt\vecdb\srvtest\shard1' '//Mortens-Macbook-Air/vecdb/srvtest/shard2'
options.(ShardFn ShardCols)'{2-2|⎕UCS ⊃¨⊃⍵}' 1

paramsname folder columns types options data
Expand Down
33 changes: 20 additions & 13 deletions vecdb.dyalog
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@
Extract calculation data from meta file

:If 8=2⎕FSIZE tn If File format pre-dates calculated columns
'unused'FAPPEND tn 8
'unused'FAPPEND tn 9
( )FAPPEND tn 10 Calc Col Names, Source Columns, Data Type
'unused'FAPPEND tn 8
'unused'FAPPEND tn 9
( )FAPPEND tn 10 Calc Col Names, Source Columns, Data Type
:EndIf

(_CalcCols _CalcSources _CalcTypes)⎕FREAD tn,10 Calculated column definitions
Expand Down Expand Up @@ -365,8 +365,7 @@
:EndIf

:For f :In ShardFolders
:If ~Exists sffShardFolders MkDir sf :EndIf

3 ⎕MKDIR sffShardFolders
ddata[;shardsf] extract records for one shard
nd
sizeBlockSize×1⌈⌈n÷BlockSize At least one block
Expand All @@ -391,20 +390,28 @@
:EndFor

:If create
tnmetafile ⎕FCREATE 0
('vecdb ',Version)⎕FAPPEND tn 1
'See github.com/Dyalog/vecdb/doc/Implementation.md'⎕FAPPEND tn 2
'unused'⎕FAPPEND tn 3
(fileprops(¨fileprops))⎕FAPPEND tn 4 (Name BlockSize)
(_Columns _Types)⎕FAPPEND tn 5
ShardFolders ⎕FAPPEND tn 6
(ShardFn ShardCols)⎕FAPPEND tn 7
tnmetafile (⎕FCREATE3) 0
('vecdb ',Version)∆FAPPEND tn 1
'See github.com/Dyalog/vecdb/doc/Implementation.md'∆FAPPEND tn 2
'unused'∆FAPPEND tn 3
(fileprops(¨fileprops))∆FAPPEND tn 4 (Name BlockSize)
(_Columns _Types)∆FAPPEND tn 5
ShardFolders ∆FAPPEND tn 6
(ShardFn ShardCols)∆FAPPEND tn 7
'unused'∆FAPPEND tn 8
'unused'∆FAPPEND tn 9
( )∆FAPPEND tn 10 Calc Col Names, Source Columns, Data Type

:Else Extending
tnmetafile ⎕FTIE 0
(_Columns _Types)⎕FREPLACE tn 5
:EndIf
⎕FUNTIE tn

X ∆FAPPEND Y
X ⎕FAPPEND Y
⎕FUNTIE

(shards data)cix ShardData data;six;s;char;rawdata;sym;c;counts;m
Expand Down
Binary file modified vecdbboot.dws
Binary file not shown.
3 changes: 2 additions & 1 deletion vecdbslave.dyalog
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@
DB⎕NEW ##.vecdb(folder shards)
STATE0
1 Log'Slave startup completed, ',STATUS'Folder= ',folder,', shards= ',shards
:Else
:Else
STATE2 Startup Failed
3 Log STATUS'Startup failed: ',⎕DM
∘∘∘
:EndTrap

Expand Down
87 changes: 49 additions & 38 deletions vecdbsrv.dyalog
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,15 @@
r Need a result

{r}Init config;db;i;j;slave
{r}Init config;db;i;j;slave;path;ws
Intialise the vecdb server

:Trap 6 sourceSALT_Data.SourceFile
:Else source⎕WSID
:EndTrap

path{(-/()'\/')}source

CONNSTASKSUSERSTOKENS
NEXTTASK1000
LOGLEVEL0
Expand All @@ -57,9 +63,20 @@
:For j :In db.Slaves
slavejdb.Slaves
slave.PortNEXTPORT
slave.Address'127.0.0.1' /// for now
slave.UserId¯1 /// ditto
slave.Procslave.Shards Launch db.Folder slave.Port
:Select slave.Launch.Type
:Case 'local'
slave.Address'127.0.0.1' /// for now
slave.UserId¯1 /// ditto
wspath,'/vecdbboot.dws'
slave.Procslave.Shards Launch slave.Folder slave.Port RUNTIME ws
:Case 'ssh'
slave.Addressslave.Launch.Host
slave.UserId¯1
ws({(-/()'\/')}¯1slave.Folder),'/vecdbboot.dws'
slave.Procslave.Shards Launch slave.Folder slave.Port slave.Launch.(Host User KeyFile Cmd) ws
:Else
∘∘∘ Unknown launch type
:EndSelect
NEXTPORTNEXTPORT+1
:EndFor
:EndFor
Expand All @@ -81,28 +98,28 @@
r Need a result

(sdata is)SlavePartition (cmd slaves data);ixs;cols;new;slave;slave_recs
(sdata is)SlavePartition(cmd slaves data);ixs;cols;new;slave;slave_recs

Shardsslaves.Shards
ShardSlaves(¨slaves.Shards)/slaves.Shards

:Select cmd
:Case 'Read'
(ixs cols)data
slaveShardSlaves[Shardsixs[;1]]
sdata(slave{}ixs),cols
issdata
:Case 'Read'
(ixs cols)data
slaveShardSlaves[Shardsixs[;1]]
sdata(slave{}ixs),cols
issdata
:Case 'Update'
(ixs cols new)data
slaveShardSlaves[Shardsixs[;1]]
slave_recs(¨ixs[;2])/slave
:If 1=,cols Simple column name
sdata(slave{}ixs),(cols),slave_recs{}new
:Else Multiple columns
sdata(slave{}ixs),(cols),{slave_recs{}}¨new
∘∘∘
:EndIf
issdata
(ixs cols new)data
slaveShardSlaves[Shardsixs[;1]]
slave_recs(¨ixs[;2])/slave
:If 1=,cols Simple column name
sdata(slave{}ixs),(cols),slave_recs{}new
:Else Multiple columns
sdata(slave{}ixs),(cols),{slave_recs{}}¨new
∘∘∘
:EndIf
issdata
:Else
sdata,data is(slaves)/1
:EndSelect
Expand All @@ -128,19 +145,19 @@
r999('Database not found: ',arg)
:Else
slaves(dbiDBs).Slaves
(sdata ixs)SlavePartition cmd slaves (2arg)
(sdata ixs)SlavePartition cmd slaves(2arg)
cmds(slaves)''

:For s :In slaves Send all the commands
slavesslaves
(scmds)#.vecdbclt.SrvSend slave.Connection(cmd ((sixs)sdata))
(scmds)#.vecdbclt.SrvSend slave.Connection(cmd((sixs)sdata))
:EndFor

rs
rs
:For s :In cmds Receive all the results
rs,#.vecdbclt.SrvRcv s
:EndFor

r0 rs
:EndIf
:Else
Expand All @@ -154,17 +171,11 @@
:EndIf

proc{shards}Launch(target port);path;runtime;args;slave;ws;source
proc{shards}Launch(target port runtime ws);path;runtime;args;slave;source
Launch a full vecdbsrv or, if shards is defined, a slave

:Trap 6 sourceSALT_Data.SourceFile
:Else source⎕WSID
:EndTrap

path{(-/()'\/')}source
wspath,'/vecdbboot.dws'
runtimeRUNTIME


:If 0=runtime runtimeRUNTIME :EndIf

:If slave2=⎕NC'shards'
args'VECDBSLAVE="',target,'" SHARDS="',(shards),'" PORT=',(port),' TOKEN="',TOKEN,'"'
:Else
Expand Down

0 comments on commit 28f0fff

Please sign in to comment.