@@ -15,6 +15,7 @@ import (
15
15
"github.com/sylabs/singularity-mpi/internal/pkg/impi"
16
16
"github.com/sylabs/singularity-mpi/internal/pkg/job"
17
17
"github.com/sylabs/singularity-mpi/pkg/buildenv"
18
+ "github.com/sylabs/singularity-mpi/pkg/container"
18
19
"github.com/sylabs/singularity-mpi/pkg/implem"
19
20
"github.com/sylabs/singularity-mpi/pkg/mpi"
20
21
"github.com/sylabs/singularity-mpi/pkg/syexec"
@@ -63,18 +64,11 @@ func NativeGetError(j *job.Job, sysCfg *sys.Config) string {
63
64
return j .ErrBuffer .String ()
64
65
}
65
66
66
- // NativeSubmit is the function to call to submit a job through the native job manager
67
- func NativeSubmit (j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) (syexec.SyCmd , error ) {
68
- var sycmd syexec.SyCmd
69
-
70
- if j .App .BinPath == "" {
71
- return sycmd , fmt .Errorf ("application binary is undefined" )
72
- }
73
-
67
+ func prepareMPISubmit (sycmd * syexec.SyCmd , j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) error {
74
68
var err error
75
69
sycmd .BinPath , err = mpi .GetPathToMpirun (j .HostCfg , env )
76
70
if err != nil {
77
- return sycmd , err
71
+ return err
78
72
}
79
73
if j .NP > 0 {
80
74
sycmd .CmdArgs = append (sycmd .CmdArgs , "-np" )
@@ -83,7 +77,7 @@ func NativeSubmit(j *job.Job, env *buildenv.Info, sysCfg *sys.Config) (syexec.Sy
83
77
84
78
mpirunArgs , err := mpi .GetMpirunArgs (j .HostCfg , env , & j .App , j .Container , sysCfg )
85
79
if err != nil {
86
- return sycmd , fmt .Errorf ("unable to get mpirun arguments: %s" , err )
80
+ return fmt .Errorf ("unable to get mpirun arguments: %s" , err )
87
81
}
88
82
if len (mpirunArgs ) > 0 {
89
83
sycmd .CmdArgs = append (sycmd .CmdArgs , mpirunArgs ... )
@@ -98,6 +92,37 @@ func NativeSubmit(j *job.Job, env *buildenv.Info, sysCfg *sys.Config) (syexec.Sy
98
92
sycmd .Env = append ([]string {"LD_LIBRARY_PATH=" + newLDPath }, os .Environ ()... )
99
93
sycmd .Env = append ([]string {"PATH=" + newPath }, os .Environ ()... )
100
94
95
+ return nil
96
+ }
97
+
98
+ func prepareStdSubmit (sycmd * syexec.SyCmd , j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) error {
99
+ sycmd .BinPath = sysCfg .SingularityBin
100
+ sycmd .CmdArgs = container .GetDefaultExecCfg ()
101
+ sycmd .CmdArgs = append (sycmd .CmdArgs , j .Container .Path , j .App .BinPath )
102
+
103
+ return nil
104
+ }
105
+
106
+ // NativeSubmit is the function to call to submit a job through the native job manager
107
+ func NativeSubmit (j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) (syexec.SyCmd , error ) {
108
+ var sycmd syexec.SyCmd
109
+
110
+ if j .App .BinPath == "" {
111
+ return sycmd , fmt .Errorf ("application binary is undefined" )
112
+ }
113
+
114
+ if implem .IsMPI (j .HostCfg ) {
115
+ err := prepareMPISubmit (& sycmd , j , env , sysCfg )
116
+ if err != nil {
117
+ return sycmd , fmt .Errorf ("unable to prepare MPI job: %s" , err )
118
+ }
119
+ } else {
120
+ err := prepareStdSubmit (& sycmd , j , env , sysCfg )
121
+ if err != nil {
122
+ return sycmd , fmt .Errorf ("unable to prepare MPI job: %s" , err )
123
+ }
124
+ }
125
+
101
126
j .GetOutput = NativeGetOutput
102
127
j .GetError = NativeGetError
103
128
0 commit comments