Skip to content

Commit 5b9c673

Browse files
committed
switch envs, resources are shared on multiple envs and are exclusive
1 parent 0f34ddf commit 5b9c673

4 files changed

Lines changed: 215 additions & 188 deletions

File tree

src/@types/C2D/C2D.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,19 @@ export interface ComputeEnvironment extends ComputeEnvironmentBaseConfig {
139139
runMaxWaitTimeFree: number
140140
}
141141

142+
export interface C2DEnvironmentConfig {
143+
id?: string
144+
description?: string
145+
storageExpiry?: number
146+
minJobDuration?: number
147+
maxJobDuration?: number
148+
maxJobs?: number
149+
fees?: ComputeEnvFeesStructure
150+
access?: ComputeAccessList
151+
free?: ComputeEnvironmentFreeOptions
152+
resources?: string[]
153+
}
154+
142155
export interface C2DDockerConfig {
143156
socketPath: string
144157
protocol: string
@@ -147,17 +160,11 @@ export interface C2DDockerConfig {
147160
caPath: string
148161
certPath: string
149162
keyPath: string
150-
storageExpiry?: number
151-
maxJobDuration?: number
152-
minJobDuration?: number
153-
maxJobs?: number
154-
fees: ComputeEnvFeesStructure
155-
resources?: ComputeResource[] // optional, owner can overwrite
156-
free?: ComputeEnvironmentFreeOptions
157-
access: ComputeAccessList
163+
resources?: ComputeResource[]
158164
imageRetentionDays?: number // Default: 7 days
159165
imageCleanupInterval?: number // Default: 86400 seconds (24 hours)
160-
paymentClaimInterval?: number // Default: 3600 seconds (1 hours)
166+
paymentClaimInterval?: number // Default: 3600 seconds (1 hour)
167+
environments: C2DEnvironmentConfig[]
161168
}
162169

163170
export type ComputeResultType =

src/components/c2d/compute_engine_base.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,9 @@ export abstract class C2DEngine {
316316
} catch (e) {
317317
CORE_LOGGER.error('Failed to get running jobs:' + e.message)
318318
}
319+
320+
const envResourceIds = new Set((env.resources || []).map((r) => r.id))
321+
319322
let totalJobs = 0
320323
let totalFreeJobs = 0
321324
let queuedJobs = 0
@@ -324,9 +327,13 @@ export abstract class C2DEngine {
324327
let maxWaitTimeFree = 0
325328
let maxRunningTime = 0
326329
let maxRunningTimeFree = 0
330+
327331
for (const job of jobs) {
328-
if (job.environment === env.id) {
329-
if (job.queueMaxWaitTime === 0) {
332+
const isThisEnv = job.environment === env.id
333+
const isRunning = job.queueMaxWaitTime === 0
334+
335+
if (isThisEnv) {
336+
if (isRunning) {
330337
const timeElapsed =
331338
new Date().getTime() / 1000 - Number.parseFloat(job?.algoStartTimestamp)
332339
totalJobs++
@@ -335,23 +342,27 @@ export abstract class C2DEngine {
335342
totalFreeJobs++
336343
maxRunningTimeFree += job.maxJobDuration - timeElapsed
337344
}
345+
} else {
346+
queuedJobs++
347+
maxWaitTime += job.maxJobDuration
348+
if (job.isFree) {
349+
queuedFreeJobs++
350+
maxWaitTimeFree += job.maxJobDuration
351+
}
352+
}
353+
}
338354

339-
for (const resource of job.resources) {
355+
// Resource usage is checked on ALL envs
356+
if (isRunning) {
357+
for (const resource of job.resources) {
358+
if (envResourceIds.has(resource.id)) {
340359
if (!(resource.id in usedResources)) usedResources[resource.id] = 0
341360
usedResources[resource.id] += resource.amount
342361
if (job.isFree) {
343362
if (!(resource.id in usedFreeResources)) usedFreeResources[resource.id] = 0
344363
usedFreeResources[resource.id] += resource.amount
345364
}
346365
}
347-
} else {
348-
// queued job
349-
queuedJobs++
350-
maxWaitTime += job.maxJobDuration
351-
if (job.isFree) {
352-
queuedFreeJobs++
353-
maxWaitTimeFree += job.maxJobDuration
354-
}
355366
}
356367
}
357368
}

0 commit comments

Comments
 (0)