Notify a user when they link a device.

This commit is contained in:
Michelle Tang
2025-01-10 17:27:32 -05:00
committed by Greyson Parrelli
parent 919648b94b
commit d4c8c16df3
22 changed files with 382 additions and 91 deletions

View File

@@ -286,6 +286,7 @@ public abstract class Job {
private final boolean memoryOnly;
private final int globalPriority;
private final int queuePriority;
private final long initialDelay;
private Parameters(@NonNull String id,
long createTime,
@@ -298,7 +299,8 @@ public abstract class Job {
@Nullable byte[] inputData,
boolean memoryOnly,
int globalPriority,
int queuePriority)
int queuePriority,
long initialDelay)
{
this.id = id;
this.createTime = createTime;
@@ -312,6 +314,7 @@ public abstract class Job {
this.memoryOnly = memoryOnly;
this.globalPriority = globalPriority;
this.queuePriority = queuePriority;
this.initialDelay = initialDelay;
}
@NonNull String getId() {
@@ -362,8 +365,12 @@ public abstract class Job {
return queuePriority;
}
long getInitialDelay() {
return initialDelay;
}
public Builder toBuilder() {
return new Builder(id, createTime, lifespan, maxAttempts, maxInstancesForFactory, maxInstancesForQueue, queue, constraintKeys, inputData, memoryOnly, globalPriority, queuePriority);
return new Builder(id, createTime, lifespan, maxAttempts, maxInstancesForFactory, maxInstancesForQueue, queue, constraintKeys, inputData, memoryOnly, globalPriority, queuePriority, initialDelay);
}
@@ -380,13 +387,14 @@ public abstract class Job {
private boolean memoryOnly;
private int globalPriority;
private int queuePriority;
private long initialDelay;
public Builder() {
this(UUID.randomUUID().toString());
}
Builder(@NonNull String id) {
this(id, System.currentTimeMillis(), IMMORTAL, 1, UNLIMITED, UNLIMITED, null, new LinkedList<>(), null, false, Parameters.PRIORITY_DEFAULT, Parameters.PRIORITY_DEFAULT);
this(id, System.currentTimeMillis(), IMMORTAL, 1, UNLIMITED, UNLIMITED, null, new LinkedList<>(), null, false, Parameters.PRIORITY_DEFAULT, Parameters.PRIORITY_DEFAULT, 0);
}
private Builder(@NonNull String id,
@@ -400,7 +408,8 @@ public abstract class Job {
@Nullable byte[] inputData,
boolean memoryOnly,
int globalPriority,
int queuePriority)
int queuePriority,
long initialDelay)
{
this.id = id;
this.createTime = createTime;
@@ -414,6 +423,7 @@ public abstract class Job {
this.memoryOnly = memoryOnly;
this.globalPriority = globalPriority;
this.queuePriority = queuePriority;
this.initialDelay = initialDelay;
}
/** Should only be invoked by {@link JobController} */
@@ -553,8 +563,16 @@ public abstract class Job {
return this;
}
/**
* Specifies a delay (in milliseconds) before the job runs. Default is 0.
*/
public @NonNull Builder setInitialDelay(long initialDelay) {
this.initialDelay = initialDelay;
return this;
}
public @NonNull Parameters build() {
return new Parameters(id, createTime, lifespan, maxAttempts, maxInstancesForFactory, maxInstancesForQueue, queue, constraintKeys, inputData, memoryOnly, globalPriority, queuePriority);
return new Parameters(id, createTime, lifespan, maxAttempts, maxInstancesForFactory, maxInstancesForQueue, queue, constraintKeys, inputData, memoryOnly, globalPriority, queuePriority, initialDelay);
}
}
}

View File

@@ -449,7 +449,8 @@ class JobController {
false,
job.getParameters().isMemoryOnly(),
job.getParameters().getGlobalPriority(),
job.getParameters().getQueuePriority());
job.getParameters().getQueuePriority(),
job.getParameters().getInitialDelay());
List<ConstraintSpec> constraintSpecs = Stream.of(job.getParameters().getConstraintKeys())
.map(key -> new ConstraintSpec(jobSpec.getId(), key, jobSpec.isMemoryOnly()))
@@ -476,7 +477,7 @@ class JobController {
constraints.add(constraintInstantiator.instantiate(key));
}
scheduler.schedule(0, constraints);
scheduler.schedule(job.getParameters().getInitialDelay(), constraints);
}
}
@@ -558,7 +559,8 @@ class JobController {
jobSpec.isRunning(),
jobSpec.isMemoryOnly(),
jobSpec.getGlobalPriority(),
jobSpec.getQueuePriority());
jobSpec.getQueuePriority(),
jobSpec.getInitialDelay());
}
interface Callback {

View File

@@ -73,7 +73,8 @@ public class JobMigrator {
jobSpec.isRunning(),
jobSpec.isMemoryOnly(),
jobSpec.getGlobalPriority(),
jobSpec.getQueuePriority());
jobSpec.getQueuePriority(),
jobSpec.getInitialDelay());
});
}

View File

@@ -15,7 +15,8 @@ data class JobSpec(
val isRunning: Boolean,
val isMemoryOnly: Boolean,
val globalPriority: Int,
val queuePriority: Int
val queuePriority: Int,
val initialDelay: Long
) {
fun withNextBackoffInterval(updated: Long): JobSpec {
@@ -27,7 +28,7 @@ data class JobSpec(
}
override fun toString(): String {
return "id: JOB::$id | factoryKey: $factoryKey | queueKey: $queueKey | createTime: $createTime | lastRunAttemptTime: $lastRunAttemptTime | nextBackoffInterval: $nextBackoffInterval | runAttempt: $runAttempt | maxAttempts: $maxAttempts | lifespan: $lifespan | isRunning: $isRunning | memoryOnly: $isMemoryOnly | globalPriority: $globalPriority | queuePriorty: $queuePriority"
return "id: JOB::$id | factoryKey: $factoryKey | queueKey: $queueKey | createTime: $createTime | lastRunAttemptTime: $lastRunAttemptTime | nextBackoffInterval: $nextBackoffInterval | runAttempt: $runAttempt | maxAttempts: $maxAttempts | lifespan: $lifespan | isRunning: $isRunning | memoryOnly: $isMemoryOnly | globalPriority: $globalPriority | queuePriorty: $queuePriority | initialDelay: $initialDelay"
}
override fun equals(other: Any?): Boolean {