Skip to content

Commit 973dc72

Browse files
greyson-signalnicholas-signal
authored andcommitted
Use a minimal job spec representation in memory.
1 parent eb59afc commit 973dc72

5 files changed

Lines changed: 340 additions & 142 deletions

File tree

app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.kt

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.signal.core.util.delete
1313
import org.signal.core.util.insertInto
1414
import org.signal.core.util.logging.Log
1515
import org.signal.core.util.readToList
16+
import org.signal.core.util.readToSingleObject
1617
import org.signal.core.util.requireBlob
1718
import org.signal.core.util.requireBoolean
1819
import org.signal.core.util.requireInt
@@ -29,6 +30,7 @@ import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec
2930
import org.thoughtcrime.securesms.jobmanager.persistence.DependencySpec
3031
import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec
3132
import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec
33+
import org.thoughtcrime.securesms.jobs.MinimalJobSpec
3234

3335
class JobDatabase(
3436
application: Application,
@@ -183,6 +185,43 @@ class JobDatabase(
183185

184186
@Synchronized
185187
fun getAllJobSpecs(): List<JobSpec> {
188+
return readableDatabase
189+
.select()
190+
.from(Jobs.TABLE_NAME)
191+
.orderBy("${Jobs.CREATE_TIME}, ${Jobs.ID} ASC")
192+
.run()
193+
.readToList { cursor ->
194+
jobSpecFromCursor(cursor)
195+
}
196+
}
197+
198+
@Synchronized
199+
fun getOldestJobSpecs(limit: Int): List<JobSpec> {
200+
return readableDatabase
201+
.select()
202+
.from(Jobs.TABLE_NAME)
203+
.orderBy("${Jobs.CREATE_TIME}, ${Jobs.ID} ASC")
204+
.limit(limit)
205+
.run()
206+
.readToList { cursor ->
207+
jobSpecFromCursor(cursor)
208+
}
209+
}
210+
211+
@Synchronized
212+
fun getJobSpec(id: String): JobSpec? {
213+
return readableDatabase
214+
.select()
215+
.from(Jobs.TABLE_NAME)
216+
.where("${Jobs.JOB_SPEC_ID} = ?", id)
217+
.run()
218+
.readToSingleObject {
219+
jobSpecFromCursor(it)
220+
}
221+
}
222+
223+
@Synchronized
224+
fun getAllMinimalJobSpecs(): List<MinimalJobSpec> {
186225
val columns = arrayOf(
187226
Jobs.ID,
188227
Jobs.JOB_SPEC_ID,
@@ -191,18 +230,23 @@ class JobDatabase(
191230
Jobs.CREATE_TIME,
192231
Jobs.LAST_RUN_ATTEMPT_TIME,
193232
Jobs.NEXT_BACKOFF_INTERVAL,
194-
Jobs.RUN_ATTEMPT,
195-
Jobs.MAX_ATTEMPTS,
196-
Jobs.LIFESPAN,
197-
Jobs.SERIALIZED_DATA,
198-
Jobs.SERIALIZED_INPUT_DATA,
199233
Jobs.IS_RUNNING,
200234
Jobs.PRIORITY
201235
)
202236
return readableDatabase
203237
.query(Jobs.TABLE_NAME, columns, null, null, null, null, "${Jobs.CREATE_TIME}, ${Jobs.ID} ASC")
204238
.readToList { cursor ->
205-
jobSpecFromCursor(cursor)
239+
MinimalJobSpec(
240+
id = cursor.requireNonNullString(Jobs.JOB_SPEC_ID),
241+
factoryKey = cursor.requireNonNullString(Jobs.FACTORY_KEY),
242+
queueKey = cursor.requireNonNullString(Jobs.QUEUE_KEY),
243+
createTime = cursor.requireLong(Jobs.CREATE_TIME),
244+
lastRunAttemptTime = cursor.requireLong(Jobs.LAST_RUN_ATTEMPT_TIME),
245+
nextBackoffInterval = cursor.requireLong(Jobs.NEXT_BACKOFF_INTERVAL),
246+
priority = cursor.requireInt(Jobs.PRIORITY),
247+
isRunning = cursor.requireBoolean(Jobs.IS_RUNNING),
248+
isMemoryOnly = false
249+
)
206250
}
207251
}
208252

0 commit comments

Comments
 (0)