@@ -24,65 +24,105 @@ class GcpBatchMachineConstraintsSpec extends AnyFlatSpec with CromwellTimeoutSpe
24
24
25
25
it should " generate valid machine types" in {
26
26
val validTypes = Table (
27
- (" memory" , " cpu" , " cpuPlatformOption" , " machineTypeString" ),
27
+ (" memory" , " cpu" , " cpuPlatformOption" , " standardMachineTypeOption " , " googleLegacyMachineSelection " , " machineTypeString" ),
28
28
// Already ok tuple
29
- (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , " custom-1-1024" ),
29
+ (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , false , " custom-1-1024" ),
30
30
// CPU must be even (except if it's 1)
31
- (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), None , " custom-4-4096" ),
31
+ (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), None , None , false , " custom-4-4096" ),
32
32
// Memory must be a multiple of 256
33
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , " custom-1-1024" ),
33
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , None , false , " custom-1-1024" ),
34
34
// Memory / cpu ratio must be > 0.9GB, increase memory
35
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), None , " custom-4-3840" ),
36
- (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), None , " custom-16-14848" ),
35
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), None , None , false , " custom-4-3840" ),
36
+ (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), None , None , false , " custom-16-14848" ),
37
37
// Memory / cpu ratio must be < 6.5GB, increase CPU
38
- (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , " custom-4-14080" ),
38
+ (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , None , false , " custom-4-14080" ),
39
39
// Memory should be an int
40
- (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , " custom-1-1536" ),
41
- (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , " custom-1-1024" ),
40
+ (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , false , " custom-1-1536" ),
41
+ (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , false , " custom-1-1024" ),
42
42
// Increase to a cpu selection not valid for n2 below
43
- (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , " custom-34-31488" ),
43
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , None , false , " custom-34-31488" ),
44
+
45
+ // Same tests as above but with legacy machine type selection (cpu and memory as specified. No 'custom machine
46
+ // requirement' adjustments are expected this time, except float->int)
47
+ (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , true , " predefined-1-1024" ),
48
+ (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), None , None , true , " predefined-3-4096" ),
49
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , None , true , " predefined-1-1024" ),
50
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), None , None , true , " predefined-4-1024" ),
51
+ (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), None , None , true , " predefined-16-14336" ),
52
+ (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), None , None , true , " predefined-1-13977" ),
53
+ (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , true , " predefined-1-1520" ),
54
+ (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), None , None , true , " predefined-1-1024" ),
55
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , None , true , " predefined-33-2048" ),
44
56
45
57
// Same tests but with cascade lake (n2)
46
- (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, " n2-custom-2-2048" ),
47
- (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2OptionCascadeLake, " n2-custom-4-4096" ),
48
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionCascadeLake, " n2-custom-2-2048" ),
49
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2OptionCascadeLake, " n2-custom-4-4096" ),
50
- (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2OptionCascadeLake, " n2-custom-16-16384" ),
51
- (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionCascadeLake, " n2-custom-2-14080" ),
52
- (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, " n2-custom-2-2048" ),
53
- (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, " n2-custom-2-2048" ),
54
- (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2OptionCascadeLake, " n2-custom-36-36864" ),
58
+ (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, None , false , " n2-custom-2-2048" ),
59
+ (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2OptionCascadeLake, None , false , " n2-custom-4-4096" ),
60
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionCascadeLake, None , false , " n2-custom-2-2048" ),
61
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2OptionCascadeLake, None , false , " n2-custom-4-4096" ),
62
+ (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2OptionCascadeLake, None , false , " n2-custom-16-16384" ),
63
+ (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionCascadeLake, None , false , " n2-custom-2-14080" ),
64
+ (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, None , false , " n2-custom-2-2048" ),
65
+ (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionCascadeLake, None , false , " n2-custom-2-2048" ),
66
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2OptionCascadeLake, None , false , " n2-custom-36-36864" ),
55
67
56
68
// Same tests, but with ice lake. Should produce same results as cascade lake since they're both n2.
57
- (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, " n2-custom-2-2048" ),
58
- (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2OptionIceLake, " n2-custom-4-4096" ),
59
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionIceLake, " n2-custom-2-2048" ),
60
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2OptionIceLake, " n2-custom-4-4096" ),
61
- (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2OptionIceLake, " n2-custom-16-16384" ),
62
- (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionIceLake, " n2-custom-2-14080" ),
63
- (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, " n2-custom-2-2048" ),
64
- (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, " n2-custom-2-2048" ),
65
- (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2OptionIceLake, " n2-custom-36-36864" ),
69
+ (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, None , false , " n2-custom-2-2048" ),
70
+ (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2OptionIceLake, None , false , " n2-custom-4-4096" ),
71
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionIceLake, None , false , " n2-custom-2-2048" ),
72
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2OptionIceLake, None , false , " n2-custom-4-4096" ),
73
+ (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2OptionIceLake, None , false , " n2-custom-16-16384" ),
74
+ (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2OptionIceLake, None , false , " n2-custom-2-14080" ),
75
+ (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, None , false , " n2-custom-2-2048" ),
76
+ (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2OptionIceLake, None , false , " n2-custom-2-2048" ),
77
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2OptionIceLake, None , false , " n2-custom-36-36864" ),
66
78
67
79
// Same tests but with AMD Rome (n2d) #cpu > 16 are in increments of 16
68
- (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, " n2d-custom-2-1024" ),
69
- (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2dOption, " n2d-custom-4-4096" ),
70
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2dOption, " n2d-custom-2-1024" ),
71
- (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2dOption, " n2d-custom-4-2048" ),
72
- (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2dOption, " n2d-custom-16-14336" ),
73
- (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2dOption, " n2d-custom-2-14080" ),
74
- (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, " n2d-custom-2-1536" ),
75
- (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, " n2d-custom-2-1024" ),
76
- (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2dOption, " n2d-custom-48-24576" ),
77
- (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](81 ), n2dOption, " n2d-custom-96-49152" ),
78
- (MemorySize (256 , MemoryUnit .GB ), refineMV[Positive ](128 ), n2dOption, " n2d-custom-96-262144" )
80
+ (MemorySize (1024 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, None , false , " n2d-custom-2-1024" ),
81
+ (MemorySize (4 , MemoryUnit .GB ), refineMV[Positive ](3 ), n2dOption, None , false , " n2d-custom-4-4096" ),
82
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2dOption, None , false , " n2d-custom-2-1024" ),
83
+ (MemorySize (1 , MemoryUnit .GB ), refineMV[Positive ](4 ), n2dOption, None , false , " n2d-custom-4-2048" ),
84
+ (MemorySize (14 , MemoryUnit .GB ), refineMV[Positive ](16 ), n2dOption, None , false , " n2d-custom-16-14336" ),
85
+ (MemorySize (13.65 , MemoryUnit .GB ), refineMV[Positive ](1 ), n2dOption, None , false , " n2d-custom-2-14080" ),
86
+ (MemorySize (1520.96 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, None , false , " n2d-custom-2-1536" ),
87
+ (MemorySize (1024.0 , MemoryUnit .MB ), refineMV[Positive ](1 ), n2dOption, None , false , " n2d-custom-2-1024" ),
88
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), n2dOption, None , false , " n2d-custom-48-24576" ),
89
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](81 ), n2dOption, None , false , " n2d-custom-96-49152" ),
90
+ (MemorySize (256 , MemoryUnit .GB ), refineMV[Positive ](128 ), n2dOption, None , false , " n2d-custom-96-262144" ),
91
+
92
+ // Test Standard Machine types
93
+ // General-purpose machine family
94
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" n1-standard-2" ), false , " n1-standard-2" ),
95
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" n1-highmem-2" ), false , " n1-highmem-2" ),
96
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" n1-highcpu-4" ), false , " n1-highcpu-4" ),
97
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" f1-micro" ), false , " f1-micro" ),
98
+
99
+ // Accelerator-optimized machine family
100
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a2-highgpu-1g" ), false , " a2-highgpu-1g" ),
101
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a3-megagpu-8g" ), false , " a3-megagpu-8g" ),
102
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" g2-standard-4" ), false , " g2-standard-4" ),
103
+
104
+ // Other machine families
105
+ // Storage-optimized
106
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" z3-highmem-88" ), false , " z3-highmem-88" ),
107
+ // Compute-optimized
108
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" h3-standard-88" ), false , " h3-standard-88" ),
109
+ // Memory-optimized
110
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" m3-ultramem-128" ), false , " m3-ultramem-128" ),
111
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a2-highgpu-1g" ), false , " a2-highgpu-1g" ),
112
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a2-highgpu-1g" ), false , " a2-highgpu-1g" ),
113
+
114
+ // Standard machine type overrides legacy selection
115
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a2-highgpu-1g" ), true , " a2-highgpu-1g" ),
116
+ (MemorySize (2 , MemoryUnit .GB ), refineMV[Positive ](33 ), None , Option (" a2-highgpu-1g" ), false , " a2-highgpu-1g" )
79
117
)
80
118
81
- forAll(validTypes) { (memory, cpu, cpuPlatformOption, expected) =>
119
+ forAll(validTypes) { (memory, cpu, cpuPlatformOption, standardMachineTypeOption, googleLegacyMachineSelection, expected) =>
82
120
GcpBatchMachineConstraints .machineType(
83
121
memory = memory,
84
122
cpu = cpu,
85
123
cpuPlatformOption = cpuPlatformOption,
124
+ standardMachineTypeOption = standardMachineTypeOption,
125
+ googleLegacyMachineSelection = googleLegacyMachineSelection,
86
126
jobLogger = mock[JobLogger ]
87
127
) shouldBe expected
88
128
}
0 commit comments