@@ -24,65 +24,105 @@ class GcpBatchMachineConstraintsSpec extends AnyFlatSpec with CromwellTimeoutSpe
2424
2525 it should " generate valid machine types" in {
2626 val validTypes = Table (
27- (" memory" , " cpu" , " cpuPlatformOption" , " machineTypeString" ),
27+ (" memory" , " cpu" , " cpuPlatformOption" , " standardMachineTypeOption " , " googleLegacyMachineSelection " , " machineTypeString" ),
2828 // 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" ),
3030 // 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" ),
3232 // 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" ),
3434 // 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" ),
3737 // 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" ),
3939 // 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" ),
4242 // 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" ),
4456
4557 // 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" ),
5567
5668 // 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" ),
6678
6779 // 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" )
79117 )
80118
81- forAll(validTypes) { (memory, cpu, cpuPlatformOption, expected) =>
119+ forAll(validTypes) { (memory, cpu, cpuPlatformOption, standardMachineTypeOption, googleLegacyMachineSelection, expected) =>
82120 GcpBatchMachineConstraints .machineType(
83121 memory = memory,
84122 cpu = cpu,
85123 cpuPlatformOption = cpuPlatformOption,
124+ standardMachineTypeOption = standardMachineTypeOption,
125+ googleLegacyMachineSelection = googleLegacyMachineSelection,
86126 jobLogger = mock[JobLogger ]
87127 ) shouldBe expected
88128 }
0 commit comments