Move the JobDatabase to a separate physical database.
Also removes maxInstancesPerFactory from DB, which was only used during job submission and had no need to be persisted.
This commit is contained in:
parent
198281aa47
commit
01152ead61
13 changed files with 205 additions and 100 deletions
|
@ -45,13 +45,15 @@ public class FlipperSqlCipherAdapter extends DatabaseDriver<FlipperSqlCipherAdap
|
||||||
Field databaseHelperField = DatabaseFactory.class.getDeclaredField("databaseHelper");
|
Field databaseHelperField = DatabaseFactory.class.getDeclaredField("databaseHelper");
|
||||||
databaseHelperField.setAccessible(true);
|
databaseHelperField.setAccessible(true);
|
||||||
|
|
||||||
SignalDatabase mainOpenHelper = Objects.requireNonNull((SQLCipherOpenHelper) databaseHelperField.get(DatabaseFactory.getInstance(getContext())));
|
SignalDatabase mainOpenHelper = Objects.requireNonNull((SQLCipherOpenHelper) databaseHelperField.get(DatabaseFactory.getInstance(getContext())));
|
||||||
SignalDatabase keyValueOpenHelper = KeyValueDatabase.getInstance((Application) getContext());
|
SignalDatabase keyValueOpenHelper = KeyValueDatabase.getInstance((Application) getContext());
|
||||||
SignalDatabase megaphoneOpenHelper = MegaphoneDatabase.getInstance((Application) getContext());
|
SignalDatabase megaphoneOpenHelper = MegaphoneDatabase.getInstance((Application) getContext());
|
||||||
|
SignalDatabase jobManagerOpenHelper = JobDatabase.getInstance((Application) getContext());
|
||||||
|
|
||||||
return Arrays.asList(new Descriptor(mainOpenHelper),
|
return Arrays.asList(new Descriptor(mainOpenHelper),
|
||||||
new Descriptor(keyValueOpenHelper),
|
new Descriptor(keyValueOpenHelper),
|
||||||
new Descriptor(megaphoneOpenHelper));
|
new Descriptor(megaphoneOpenHelper),
|
||||||
|
new Descriptor(jobManagerOpenHelper));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.i(TAG, "Unable to use reflection to access raw database.", e);
|
Log.i(TAG, "Unable to use reflection to access raw database.", e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,10 +74,7 @@ public class FullBackupExporter extends FullBackupBase {
|
||||||
OneTimePreKeyDatabase.TABLE_NAME,
|
OneTimePreKeyDatabase.TABLE_NAME,
|
||||||
SessionDatabase.TABLE_NAME,
|
SessionDatabase.TABLE_NAME,
|
||||||
SearchDatabase.SMS_FTS_TABLE_NAME,
|
SearchDatabase.SMS_FTS_TABLE_NAME,
|
||||||
SearchDatabase.MMS_FTS_TABLE_NAME,
|
SearchDatabase.MMS_FTS_TABLE_NAME
|
||||||
JobDatabase.JOBS_TABLE_NAME,
|
|
||||||
JobDatabase.CONSTRAINTS_TABLE_NAME,
|
|
||||||
JobDatabase.DEPENDENCIES_TABLE_NAME
|
|
||||||
);
|
);
|
||||||
|
|
||||||
public static void export(@NonNull Context context,
|
public static void export(@NonNull Context context,
|
||||||
|
|
|
@ -59,7 +59,6 @@ public class DatabaseFactory {
|
||||||
private final SignedPreKeyDatabase signedPreKeyDatabase;
|
private final SignedPreKeyDatabase signedPreKeyDatabase;
|
||||||
private final SessionDatabase sessionDatabase;
|
private final SessionDatabase sessionDatabase;
|
||||||
private final SearchDatabase searchDatabase;
|
private final SearchDatabase searchDatabase;
|
||||||
private final JobDatabase jobDatabase;
|
|
||||||
private final StickerDatabase stickerDatabase;
|
private final StickerDatabase stickerDatabase;
|
||||||
private final StorageKeyDatabase storageKeyDatabase;
|
private final StorageKeyDatabase storageKeyDatabase;
|
||||||
private final RemappedRecordsDatabase remappedRecordsDatabase;
|
private final RemappedRecordsDatabase remappedRecordsDatabase;
|
||||||
|
@ -144,10 +143,6 @@ public class DatabaseFactory {
|
||||||
return getInstance(context).searchDatabase;
|
return getInstance(context).searchDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JobDatabase getJobDatabase(Context context) {
|
|
||||||
return getInstance(context).jobDatabase;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static StickerDatabase getStickerDatabase(Context context) {
|
public static StickerDatabase getStickerDatabase(Context context) {
|
||||||
return getInstance(context).stickerDatabase;
|
return getInstance(context).stickerDatabase;
|
||||||
}
|
}
|
||||||
|
@ -175,6 +170,9 @@ public class DatabaseFactory {
|
||||||
getInstance(context).mms.trimEntriesForExpiredMessages();
|
getInstance(context).mms.trimEntriesForExpiredMessages();
|
||||||
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS key_value");
|
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS key_value");
|
||||||
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS megaphone");
|
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS megaphone");
|
||||||
|
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS job_spec");
|
||||||
|
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS constraint_spec");
|
||||||
|
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS dependency_spec");
|
||||||
|
|
||||||
instance.databaseHelper.close();
|
instance.databaseHelper.close();
|
||||||
instance = null;
|
instance = null;
|
||||||
|
@ -209,7 +207,6 @@ public class DatabaseFactory {
|
||||||
this.signedPreKeyDatabase = new SignedPreKeyDatabase(context, databaseHelper);
|
this.signedPreKeyDatabase = new SignedPreKeyDatabase(context, databaseHelper);
|
||||||
this.sessionDatabase = new SessionDatabase(context, databaseHelper);
|
this.sessionDatabase = new SessionDatabase(context, databaseHelper);
|
||||||
this.searchDatabase = new SearchDatabase(context, databaseHelper);
|
this.searchDatabase = new SearchDatabase(context, databaseHelper);
|
||||||
this.jobDatabase = new JobDatabase(context, databaseHelper);
|
|
||||||
this.stickerDatabase = new StickerDatabase(context, databaseHelper, attachmentSecret);
|
this.stickerDatabase = new StickerDatabase(context, databaseHelper, attachmentSecret);
|
||||||
this.storageKeyDatabase = new StorageKeyDatabase(context, databaseHelper);
|
this.storageKeyDatabase = new StorageKeyDatabase(context, databaseHelper);
|
||||||
this.remappedRecordsDatabase = new RemappedRecordsDatabase(context, databaseHelper);
|
this.remappedRecordsDatabase = new RemappedRecordsDatabase(context, databaseHelper);
|
||||||
|
|
|
@ -1,34 +1,37 @@
|
||||||
package org.thoughtcrime.securesms.database;
|
package org.thoughtcrime.securesms.database;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
import net.sqlcipher.database.SQLiteOpenHelper;
|
||||||
|
import net.sqlcipher.database.SQLiteDatabase;
|
||||||
|
|
||||||
|
import org.signal.core.util.logging.Log;
|
||||||
|
import org.thoughtcrime.securesms.crypto.DatabaseSecret;
|
||||||
|
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider;
|
||||||
import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec;
|
import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec;
|
||||||
import org.thoughtcrime.securesms.jobmanager.persistence.DependencySpec;
|
import org.thoughtcrime.securesms.jobmanager.persistence.DependencySpec;
|
||||||
import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec;
|
import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec;
|
||||||
import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec;
|
import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec;
|
||||||
|
import org.thoughtcrime.securesms.util.CursorUtil;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class JobDatabase extends Database {
|
public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
|
||||||
|
|
||||||
public static String JOBS_TABLE_NAME = "job_spec";
|
private static final String TAG = Log.tag(JobDatabase.class);
|
||||||
public static String CONSTRAINTS_TABLE_NAME = "constraint_spec";
|
|
||||||
public static String DEPENDENCIES_TABLE_NAME = "dependency_spec";
|
|
||||||
|
|
||||||
public static final String[] CREATE_TABLE = new String[] { Jobs.CREATE_TABLE,
|
private static final int DATABASE_VERSION = 1;
|
||||||
Constraints.CREATE_TABLE,
|
private static final String DATABASE_NAME = "signal-jobmanager.db";
|
||||||
Dependencies.CREATE_TABLE };
|
|
||||||
|
|
||||||
private static final class Jobs {
|
private static final class Jobs {
|
||||||
private static final String TABLE_NAME = JOBS_TABLE_NAME;
|
private static final String TABLE_NAME = "job_spec";
|
||||||
private static final String ID = "_id";
|
private static final String ID = "_id";
|
||||||
private static final String JOB_SPEC_ID = "job_spec_id";
|
private static final String JOB_SPEC_ID = "job_spec_id";
|
||||||
private static final String FACTORY_KEY = "factory_key";
|
private static final String FACTORY_KEY = "factory_key";
|
||||||
|
@ -38,7 +41,6 @@ public class JobDatabase extends Database {
|
||||||
private static final String RUN_ATTEMPT = "run_attempt";
|
private static final String RUN_ATTEMPT = "run_attempt";
|
||||||
private static final String MAX_ATTEMPTS = "max_attempts";
|
private static final String MAX_ATTEMPTS = "max_attempts";
|
||||||
private static final String MAX_BACKOFF = "max_backoff";
|
private static final String MAX_BACKOFF = "max_backoff";
|
||||||
private static final String MAX_INSTANCES = "max_instances";
|
|
||||||
private static final String LIFESPAN = "lifespan";
|
private static final String LIFESPAN = "lifespan";
|
||||||
private static final String SERIALIZED_DATA = "serialized_data";
|
private static final String SERIALIZED_DATA = "serialized_data";
|
||||||
private static final String SERIALIZED_INPUT_DATA = "serialized_input_data";
|
private static final String SERIALIZED_INPUT_DATA = "serialized_input_data";
|
||||||
|
@ -53,7 +55,6 @@ public class JobDatabase extends Database {
|
||||||
RUN_ATTEMPT + " INTEGER, " +
|
RUN_ATTEMPT + " INTEGER, " +
|
||||||
MAX_ATTEMPTS + " INTEGER, " +
|
MAX_ATTEMPTS + " INTEGER, " +
|
||||||
MAX_BACKOFF + " INTEGER, " +
|
MAX_BACKOFF + " INTEGER, " +
|
||||||
MAX_INSTANCES + " INTEGER, " +
|
|
||||||
LIFESPAN + " INTEGER, " +
|
LIFESPAN + " INTEGER, " +
|
||||||
SERIALIZED_DATA + " TEXT, " +
|
SERIALIZED_DATA + " TEXT, " +
|
||||||
SERIALIZED_INPUT_DATA + " TEXT DEFAULT NULL, " +
|
SERIALIZED_INPUT_DATA + " TEXT DEFAULT NULL, " +
|
||||||
|
@ -61,7 +62,7 @@ public class JobDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Constraints {
|
private static final class Constraints {
|
||||||
private static final String TABLE_NAME = CONSTRAINTS_TABLE_NAME;
|
private static final String TABLE_NAME = "constraint_spec";
|
||||||
private static final String ID = "_id";
|
private static final String ID = "_id";
|
||||||
private static final String JOB_SPEC_ID = "job_spec_id";
|
private static final String JOB_SPEC_ID = "job_spec_id";
|
||||||
private static final String FACTORY_KEY = "factory_key";
|
private static final String FACTORY_KEY = "factory_key";
|
||||||
|
@ -73,7 +74,7 @@ public class JobDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Dependencies {
|
private static final class Dependencies {
|
||||||
private static final String TABLE_NAME = DEPENDENCIES_TABLE_NAME;
|
private static final String TABLE_NAME = "dependency_spec";
|
||||||
private static final String ID = "_id";
|
private static final String ID = "_id";
|
||||||
private static final String JOB_SPEC_ID = "job_spec_id";
|
private static final String JOB_SPEC_ID = "job_spec_id";
|
||||||
private static final String DEPENDS_ON_JOB_SPEC_ID = "depends_on_job_spec_id";
|
private static final String DEPENDS_ON_JOB_SPEC_ID = "depends_on_job_spec_id";
|
||||||
|
@ -85,8 +86,65 @@ public class JobDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public JobDatabase(Context context, SQLCipherOpenHelper databaseHelper) {
|
private static volatile JobDatabase instance;
|
||||||
super(context, databaseHelper);
|
|
||||||
|
private final Application application;
|
||||||
|
private final DatabaseSecret databaseSecret;
|
||||||
|
|
||||||
|
public static @NonNull JobDatabase getInstance(@NonNull Application context) {
|
||||||
|
if (instance == null) {
|
||||||
|
synchronized (JobDatabase.class) {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new JobDatabase(context, DatabaseSecretProvider.getOrCreateDatabaseSecret(context));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JobDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) {
|
||||||
|
super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook());
|
||||||
|
|
||||||
|
this.application = application;
|
||||||
|
this.databaseSecret = databaseSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
Log.i(TAG, "onCreate()");
|
||||||
|
|
||||||
|
db.execSQL(Jobs.CREATE_TABLE);
|
||||||
|
db.execSQL(Constraints.CREATE_TABLE);
|
||||||
|
db.execSQL(Dependencies.CREATE_TABLE);
|
||||||
|
|
||||||
|
if (DatabaseFactory.getInstance(application).hasTable("job_spec")) {
|
||||||
|
Log.i(TAG, "Found old job_spec table. Migrating data.");
|
||||||
|
migrateJobSpecsFromPreviousDatabase(DatabaseFactory.getInstance(application).getRawDatabase(), db);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DatabaseFactory.getInstance(application).hasTable("constraint_spec")) {
|
||||||
|
Log.i(TAG, "Found old constraint_spec table. Migrating data.");
|
||||||
|
migrateConstraintSpecsFromPreviousDatabase(DatabaseFactory.getInstance(application).getRawDatabase(), db);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DatabaseFactory.getInstance(application).hasTable("dependency_spec")) {
|
||||||
|
Log.i(TAG, "Found old constraint_spec table. Migrating data.");
|
||||||
|
migrateDependencySpecsFromPreviousDatabase(DatabaseFactory.getInstance(application).getRawDatabase(), db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
Log.i(TAG, "onUpgrade(" + oldVersion + ", " + newVersion + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(SQLiteDatabase db) {
|
||||||
|
Log.i(TAG, "onOpen()");
|
||||||
|
|
||||||
|
dropTableIfPresent("job_spec");
|
||||||
|
dropTableIfPresent("constraint_spec");
|
||||||
|
dropTableIfPresent("dependency_spec");
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void insertJobs(@NonNull List<FullSpec> fullSpecs) {
|
public synchronized void insertJobs(@NonNull List<FullSpec> fullSpecs) {
|
||||||
|
@ -94,7 +152,7 @@ public class JobDatabase extends Database {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
|
|
||||||
|
@ -114,7 +172,7 @@ public class JobDatabase extends Database {
|
||||||
public synchronized @NonNull List<JobSpec> getAllJobSpecs() {
|
public synchronized @NonNull List<JobSpec> getAllJobSpecs() {
|
||||||
List<JobSpec> jobs = new LinkedList<>();
|
List<JobSpec> jobs = new LinkedList<>();
|
||||||
|
|
||||||
try (Cursor cursor = databaseHelper.getReadableDatabase().query(Jobs.TABLE_NAME, null, null, null, null, null, Jobs.CREATE_TIME + ", " + Jobs.ID + " ASC")) {
|
try (Cursor cursor = getReadableDatabase().query(Jobs.TABLE_NAME, null, null, null, null, null, Jobs.CREATE_TIME + ", " + Jobs.ID + " ASC")) {
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
jobs.add(jobSpecFromCursor(cursor));
|
jobs.add(jobSpecFromCursor(cursor));
|
||||||
}
|
}
|
||||||
|
@ -130,7 +188,7 @@ public class JobDatabase extends Database {
|
||||||
String query = Jobs.JOB_SPEC_ID + " = ?";
|
String query = Jobs.JOB_SPEC_ID + " = ?";
|
||||||
String[] args = new String[]{ id };
|
String[] args = new String[]{ id };
|
||||||
|
|
||||||
databaseHelper.getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args);
|
getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) {
|
public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) {
|
||||||
|
@ -143,14 +201,14 @@ public class JobDatabase extends Database {
|
||||||
String query = Jobs.JOB_SPEC_ID + " = ?";
|
String query = Jobs.JOB_SPEC_ID + " = ?";
|
||||||
String[] args = new String[]{ id };
|
String[] args = new String[]{ id };
|
||||||
|
|
||||||
databaseHelper.getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args);
|
getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void updateAllJobsToBePending() {
|
public synchronized void updateAllJobsToBePending() {
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(Jobs.IS_RUNNING, 0);
|
contentValues.put(Jobs.IS_RUNNING, 0);
|
||||||
|
|
||||||
databaseHelper.getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, null, null);
|
getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void updateJobs(@NonNull List<JobSpec> jobs) {
|
public synchronized void updateJobs(@NonNull List<JobSpec> jobs) {
|
||||||
|
@ -158,7 +216,7 @@ public class JobDatabase extends Database {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
|
|
||||||
|
@ -175,7 +233,6 @@ public class JobDatabase extends Database {
|
||||||
values.put(Jobs.RUN_ATTEMPT, job.getRunAttempt());
|
values.put(Jobs.RUN_ATTEMPT, job.getRunAttempt());
|
||||||
values.put(Jobs.MAX_ATTEMPTS, job.getMaxAttempts());
|
values.put(Jobs.MAX_ATTEMPTS, job.getMaxAttempts());
|
||||||
values.put(Jobs.MAX_BACKOFF, job.getMaxBackoff());
|
values.put(Jobs.MAX_BACKOFF, job.getMaxBackoff());
|
||||||
values.put(Jobs.MAX_INSTANCES, job.getMaxInstancesForFactory());
|
|
||||||
values.put(Jobs.LIFESPAN, job.getLifespan());
|
values.put(Jobs.LIFESPAN, job.getLifespan());
|
||||||
values.put(Jobs.SERIALIZED_DATA, job.getSerializedData());
|
values.put(Jobs.SERIALIZED_DATA, job.getSerializedData());
|
||||||
values.put(Jobs.SERIALIZED_INPUT_DATA, job.getSerializedInputData());
|
values.put(Jobs.SERIALIZED_INPUT_DATA, job.getSerializedInputData());
|
||||||
|
@ -194,7 +251,7 @@ public class JobDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void deleteJobs(@NonNull List<String> jobIds) {
|
public synchronized void deleteJobs(@NonNull List<String> jobIds) {
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
|
|
||||||
|
@ -217,7 +274,7 @@ public class JobDatabase extends Database {
|
||||||
public synchronized @NonNull List<ConstraintSpec> getAllConstraintSpecs() {
|
public synchronized @NonNull List<ConstraintSpec> getAllConstraintSpecs() {
|
||||||
List<ConstraintSpec> constraints = new LinkedList<>();
|
List<ConstraintSpec> constraints = new LinkedList<>();
|
||||||
|
|
||||||
try (Cursor cursor = databaseHelper.getReadableDatabase().query(Constraints.TABLE_NAME, null, null, null, null, null, null)) {
|
try (Cursor cursor = getReadableDatabase().query(Constraints.TABLE_NAME, null, null, null, null, null, null)) {
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
constraints.add(constraintSpecFromCursor(cursor));
|
constraints.add(constraintSpecFromCursor(cursor));
|
||||||
}
|
}
|
||||||
|
@ -229,7 +286,7 @@ public class JobDatabase extends Database {
|
||||||
public synchronized @NonNull List<DependencySpec> getAllDependencySpecs() {
|
public synchronized @NonNull List<DependencySpec> getAllDependencySpecs() {
|
||||||
List<DependencySpec> dependencies = new LinkedList<>();
|
List<DependencySpec> dependencies = new LinkedList<>();
|
||||||
|
|
||||||
try (Cursor cursor = databaseHelper.getReadableDatabase().query(Dependencies.TABLE_NAME, null, null, null, null, null, null)) {
|
try (Cursor cursor = getReadableDatabase().query(Dependencies.TABLE_NAME, null, null, null, null, null, null)) {
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
dependencies.add(dependencySpecFromCursor(cursor));
|
dependencies.add(dependencySpecFromCursor(cursor));
|
||||||
}
|
}
|
||||||
|
@ -252,7 +309,6 @@ public class JobDatabase extends Database {
|
||||||
contentValues.put(Jobs.RUN_ATTEMPT, job.getRunAttempt());
|
contentValues.put(Jobs.RUN_ATTEMPT, job.getRunAttempt());
|
||||||
contentValues.put(Jobs.MAX_ATTEMPTS, job.getMaxAttempts());
|
contentValues.put(Jobs.MAX_ATTEMPTS, job.getMaxAttempts());
|
||||||
contentValues.put(Jobs.MAX_BACKOFF, job.getMaxBackoff());
|
contentValues.put(Jobs.MAX_BACKOFF, job.getMaxBackoff());
|
||||||
contentValues.put(Jobs.MAX_INSTANCES, job.getMaxInstancesForFactory());
|
|
||||||
contentValues.put(Jobs.LIFESPAN, job.getLifespan());
|
contentValues.put(Jobs.LIFESPAN, job.getLifespan());
|
||||||
contentValues.put(Jobs.SERIALIZED_DATA, job.getSerializedData());
|
contentValues.put(Jobs.SERIALIZED_DATA, job.getSerializedData());
|
||||||
contentValues.put(Jobs.SERIALIZED_INPUT_DATA, job.getSerializedInputData());
|
contentValues.put(Jobs.SERIALIZED_INPUT_DATA, job.getSerializedInputData());
|
||||||
|
@ -293,7 +349,6 @@ public class JobDatabase extends Database {
|
||||||
cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.MAX_ATTEMPTS)),
|
cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.MAX_ATTEMPTS)),
|
||||||
cursor.getLong(cursor.getColumnIndexOrThrow(Jobs.MAX_BACKOFF)),
|
cursor.getLong(cursor.getColumnIndexOrThrow(Jobs.MAX_BACKOFF)),
|
||||||
cursor.getLong(cursor.getColumnIndexOrThrow(Jobs.LIFESPAN)),
|
cursor.getLong(cursor.getColumnIndexOrThrow(Jobs.LIFESPAN)),
|
||||||
cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.MAX_INSTANCES)),
|
|
||||||
cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_DATA)),
|
cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_DATA)),
|
||||||
cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_INPUT_DATA)),
|
cursor.getString(cursor.getColumnIndexOrThrow(Jobs.SERIALIZED_INPUT_DATA)),
|
||||||
cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.IS_RUNNING)) == 1,
|
cursor.getInt(cursor.getColumnIndexOrThrow(Jobs.IS_RUNNING)) == 1,
|
||||||
|
@ -311,4 +366,73 @@ public class JobDatabase extends Database {
|
||||||
cursor.getString(cursor.getColumnIndexOrThrow(Dependencies.DEPENDS_ON_JOB_SPEC_ID)),
|
cursor.getString(cursor.getColumnIndexOrThrow(Dependencies.DEPENDS_ON_JOB_SPEC_ID)),
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private @NonNull SQLiteDatabase getReadableDatabase() {
|
||||||
|
return getWritableDatabase(databaseSecret.asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private @NonNull SQLiteDatabase getWritableDatabase() {
|
||||||
|
return getWritableDatabase(databaseSecret.asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NonNull SQLiteDatabase getSqlCipherDatabase() {
|
||||||
|
return getWritableDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dropTableIfPresent(@NonNull String table) {
|
||||||
|
if (DatabaseFactory.getInstance(application).hasTable(table)) {
|
||||||
|
Log.i(TAG, "Dropping original " + table + " table from the main database.");
|
||||||
|
DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE " + table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateJobSpecsFromPreviousDatabase(@NonNull SQLiteDatabase oldDb, @NonNull SQLiteDatabase newDb) {
|
||||||
|
try (Cursor cursor = oldDb.rawQuery("SELECT * FROM job_spec", null)) {
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
|
values.put(Jobs.JOB_SPEC_ID, CursorUtil.requireString(cursor, "job_spec_id"));
|
||||||
|
values.put(Jobs.FACTORY_KEY, CursorUtil.requireString(cursor, "factory_key"));
|
||||||
|
values.put(Jobs.QUEUE_KEY, CursorUtil.requireString(cursor, "queue_key"));
|
||||||
|
values.put(Jobs.CREATE_TIME, CursorUtil.requireLong(cursor, "create_time"));
|
||||||
|
values.put(Jobs.NEXT_RUN_ATTEMPT_TIME, CursorUtil.requireLong(cursor, "next_run_attempt_time"));
|
||||||
|
values.put(Jobs.RUN_ATTEMPT, CursorUtil.requireInt(cursor, "run_attempt"));
|
||||||
|
values.put(Jobs.MAX_ATTEMPTS, CursorUtil.requireInt(cursor, "max_attempts"));
|
||||||
|
values.put(Jobs.MAX_BACKOFF, CursorUtil.requireLong(cursor, "max_backoff"));
|
||||||
|
values.put(Jobs.LIFESPAN, CursorUtil.requireLong(cursor, "lifespan"));
|
||||||
|
values.put(Jobs.SERIALIZED_DATA, CursorUtil.requireString(cursor, "serialized_data"));
|
||||||
|
values.put(Jobs.SERIALIZED_INPUT_DATA, CursorUtil.requireString(cursor, "serialized_input_data"));
|
||||||
|
values.put(Jobs.IS_RUNNING, CursorUtil.requireInt(cursor, "is_running"));
|
||||||
|
|
||||||
|
newDb.insert(Jobs.TABLE_NAME, null, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateConstraintSpecsFromPreviousDatabase(@NonNull SQLiteDatabase oldDb, @NonNull SQLiteDatabase newDb) {
|
||||||
|
try (Cursor cursor = oldDb.rawQuery("SELECT * FROM constraint_spec", null)) {
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
|
values.put(Constraints.JOB_SPEC_ID, CursorUtil.requireString(cursor, "job_spec_id"));
|
||||||
|
values.put(Constraints.FACTORY_KEY, CursorUtil.requireString(cursor, "factory_key"));
|
||||||
|
|
||||||
|
newDb.insert(Constraints.TABLE_NAME, null, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void migrateDependencySpecsFromPreviousDatabase(@NonNull SQLiteDatabase oldDb, @NonNull SQLiteDatabase newDb) {
|
||||||
|
try (Cursor cursor = oldDb.rawQuery("SELECT * FROM dependency_spec", null)) {
|
||||||
|
while (cursor.moveToNext()) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
|
values.put(Dependencies.JOB_SPEC_ID, CursorUtil.requireString(cursor, "job_spec_id"));
|
||||||
|
values.put(Dependencies.DEPENDS_ON_JOB_SPEC_ID, CursorUtil.requireString(cursor, "depends_on_job_spec_id"));
|
||||||
|
|
||||||
|
newDb.insert(Dependencies.TABLE_NAME, null, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,7 +201,6 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
|
||||||
db.execSQL(StorageKeyDatabase.CREATE_TABLE);
|
db.execSQL(StorageKeyDatabase.CREATE_TABLE);
|
||||||
db.execSQL(MentionDatabase.CREATE_TABLE);
|
db.execSQL(MentionDatabase.CREATE_TABLE);
|
||||||
executeStatements(db, SearchDatabase.CREATE_TABLE);
|
executeStatements(db, SearchDatabase.CREATE_TABLE);
|
||||||
executeStatements(db, JobDatabase.CREATE_TABLE);
|
|
||||||
executeStatements(db, RemappedRecordsDatabase.CREATE_TABLE);
|
executeStatements(db, RemappedRecordsDatabase.CREATE_TABLE);
|
||||||
|
|
||||||
executeStatements(db, RecipientDatabase.CREATE_INDEXS);
|
executeStatements(db, RecipientDatabase.CREATE_INDEXS);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.components.TypingStatusSender;
|
||||||
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
|
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
||||||
|
import org.thoughtcrime.securesms.database.JobDatabase;
|
||||||
import org.thoughtcrime.securesms.events.ReminderUpdateEvent;
|
import org.thoughtcrime.securesms.events.ReminderUpdateEvent;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Constraint;
|
import org.thoughtcrime.securesms.jobmanager.Constraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
|
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
|
||||||
|
@ -150,7 +151,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
|
||||||
.setJobFactories(JobManagerFactories.getJobFactories(context))
|
.setJobFactories(JobManagerFactories.getJobFactories(context))
|
||||||
.setConstraintFactories(JobManagerFactories.getConstraintFactories(context))
|
.setConstraintFactories(JobManagerFactories.getConstraintFactories(context))
|
||||||
.setConstraintObservers(JobManagerFactories.getConstraintObservers(context))
|
.setConstraintObservers(JobManagerFactories.getConstraintObservers(context))
|
||||||
.setJobStorage(new FastJobStorage(DatabaseFactory.getJobDatabase(context)))
|
.setJobStorage(new FastJobStorage(JobDatabase.getInstance(context)))
|
||||||
.setJobMigrator(new JobMigrator(TextSecurePreferences.getJobManagerVersion(context), JobManager.CURRENT_VERSION, JobManagerFactories.getJobMigrations(context)))
|
.setJobMigrator(new JobMigrator(TextSecurePreferences.getJobManagerVersion(context), JobManager.CURRENT_VERSION, JobManagerFactories.getJobMigrations(context)))
|
||||||
.addReservedJobRunner(new FactoryJobPredicate(PushDecryptMessageJob.KEY, PushProcessMessageJob.KEY, MarkerJob.KEY))
|
.addReservedJobRunner(new FactoryJobPredicate(PushDecryptMessageJob.KEY, PushProcessMessageJob.KEY, MarkerJob.KEY))
|
||||||
.addReservedJobRunner(new FactoryJobPredicate(PushTextSendJob.KEY, PushMediaSendJob.KEY, PushGroupSendJob.KEY, ReactionSendJob.KEY, TypingSendJob.KEY, GroupCallUpdateSendJob.KEY))
|
.addReservedJobRunner(new FactoryJobPredicate(PushTextSendJob.KEY, PushMediaSendJob.KEY, PushGroupSendJob.KEY, ReactionSendJob.KEY, TypingSendJob.KEY, GroupCallUpdateSendJob.KEY))
|
||||||
|
|
|
@ -355,7 +355,6 @@ class JobController {
|
||||||
job.getParameters().getMaxAttempts(),
|
job.getParameters().getMaxAttempts(),
|
||||||
job.getParameters().getMaxBackoff(),
|
job.getParameters().getMaxBackoff(),
|
||||||
job.getParameters().getLifespan(),
|
job.getParameters().getLifespan(),
|
||||||
job.getParameters().getMaxInstancesForFactory(),
|
|
||||||
dataSerializer.serialize(job.serialize()),
|
dataSerializer.serialize(job.serialize()),
|
||||||
null,
|
null,
|
||||||
false,
|
false,
|
||||||
|
@ -469,7 +468,6 @@ class JobController {
|
||||||
jobSpec.getMaxAttempts(),
|
jobSpec.getMaxAttempts(),
|
||||||
jobSpec.getMaxBackoff(),
|
jobSpec.getMaxBackoff(),
|
||||||
jobSpec.getLifespan(),
|
jobSpec.getLifespan(),
|
||||||
jobSpec.getMaxInstancesForFactory(),
|
|
||||||
jobSpec.getSerializedData(),
|
jobSpec.getSerializedData(),
|
||||||
dataSerializer.serialize(inputData),
|
dataSerializer.serialize(inputData),
|
||||||
jobSpec.isRunning(),
|
jobSpec.isRunning(),
|
||||||
|
|
|
@ -71,7 +71,6 @@ public class JobMigrator {
|
||||||
jobSpec.getMaxAttempts(),
|
jobSpec.getMaxAttempts(),
|
||||||
jobSpec.getMaxBackoff(),
|
jobSpec.getMaxBackoff(),
|
||||||
jobSpec.getLifespan(),
|
jobSpec.getLifespan(),
|
||||||
jobSpec.getMaxInstancesForFactory(),
|
|
||||||
dataSerializer.serialize(updatedJobData.getData()),
|
dataSerializer.serialize(updatedJobData.getData()),
|
||||||
jobSpec.getSerializedInputData(),
|
jobSpec.getSerializedInputData(),
|
||||||
jobSpec.isRunning(),
|
jobSpec.isRunning(),
|
||||||
|
|
|
@ -18,7 +18,6 @@ public final class JobSpec {
|
||||||
private final int maxAttempts;
|
private final int maxAttempts;
|
||||||
private final long maxBackoff;
|
private final long maxBackoff;
|
||||||
private final long lifespan;
|
private final long lifespan;
|
||||||
private final int maxInstances;
|
|
||||||
private final String serializedData;
|
private final String serializedData;
|
||||||
private final String serializedInputData;
|
private final String serializedInputData;
|
||||||
private final boolean isRunning;
|
private final boolean isRunning;
|
||||||
|
@ -33,7 +32,6 @@ public final class JobSpec {
|
||||||
int maxAttempts,
|
int maxAttempts,
|
||||||
long maxBackoff,
|
long maxBackoff,
|
||||||
long lifespan,
|
long lifespan,
|
||||||
int maxInstances,
|
|
||||||
@NonNull String serializedData,
|
@NonNull String serializedData,
|
||||||
@Nullable String serializedInputData,
|
@Nullable String serializedInputData,
|
||||||
boolean isRunning,
|
boolean isRunning,
|
||||||
|
@ -48,7 +46,6 @@ public final class JobSpec {
|
||||||
this.runAttempt = runAttempt;
|
this.runAttempt = runAttempt;
|
||||||
this.maxAttempts = maxAttempts;
|
this.maxAttempts = maxAttempts;
|
||||||
this.lifespan = lifespan;
|
this.lifespan = lifespan;
|
||||||
this.maxInstances = maxInstances;
|
|
||||||
this.serializedData = serializedData;
|
this.serializedData = serializedData;
|
||||||
this.serializedInputData = serializedInputData;
|
this.serializedInputData = serializedInputData;
|
||||||
this.isRunning = isRunning;
|
this.isRunning = isRunning;
|
||||||
|
@ -87,10 +84,6 @@ public final class JobSpec {
|
||||||
return maxBackoff;
|
return maxBackoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxInstancesForFactory() {
|
|
||||||
return maxInstances;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getLifespan() {
|
public long getLifespan() {
|
||||||
return lifespan;
|
return lifespan;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +115,6 @@ public final class JobSpec {
|
||||||
maxAttempts == jobSpec.maxAttempts &&
|
maxAttempts == jobSpec.maxAttempts &&
|
||||||
maxBackoff == jobSpec.maxBackoff &&
|
maxBackoff == jobSpec.maxBackoff &&
|
||||||
lifespan == jobSpec.lifespan &&
|
lifespan == jobSpec.lifespan &&
|
||||||
maxInstances == jobSpec.maxInstances &&
|
|
||||||
isRunning == jobSpec.isRunning &&
|
isRunning == jobSpec.isRunning &&
|
||||||
memoryOnly == jobSpec.memoryOnly &&
|
memoryOnly == jobSpec.memoryOnly &&
|
||||||
Objects.equals(id, jobSpec.id) &&
|
Objects.equals(id, jobSpec.id) &&
|
||||||
|
@ -134,13 +126,13 @@ public final class JobSpec {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, maxBackoff, lifespan, maxInstances, serializedData, serializedInputData, isRunning, memoryOnly);
|
return Objects.hash(id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, maxBackoff, lifespan, serializedData, serializedInputData, isRunning, memoryOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("DefaultLocale")
|
@SuppressLint("DefaultLocale")
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String toString() {
|
public @NonNull String toString() {
|
||||||
return String.format("id: JOB::%s | factoryKey: %s | queueKey: %s | createTime: %d | nextRunAttemptTime: %d | runAttempt: %d | maxAttempts: %d | maxBackoff: %d | maxInstances: %d | lifespan: %d | isRunning: %b | memoryOnly: %b",
|
return String.format("id: JOB::%s | factoryKey: %s | queueKey: %s | createTime: %d | nextRunAttemptTime: %d | runAttempt: %d | maxAttempts: %d | maxBackoff: %d | lifespan: %d | isRunning: %b | memoryOnly: %b",
|
||||||
id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, maxBackoff, maxInstances, lifespan, isRunning, memoryOnly);
|
id, factoryKey, queueKey, createTime, nextRunAttemptTime, runAttempt, maxAttempts, maxBackoff, lifespan, isRunning, memoryOnly);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,6 @@ final class WorkManagerDatabase extends SQLiteOpenHelper {
|
||||||
Job.Parameters.UNLIMITED,
|
Job.Parameters.UNLIMITED,
|
||||||
TimeUnit.SECONDS.toMillis(30),
|
TimeUnit.SECONDS.toMillis(30),
|
||||||
TimeUnit.DAYS.toMillis(1),
|
TimeUnit.DAYS.toMillis(1),
|
||||||
Job.Parameters.UNLIMITED,
|
|
||||||
dataSerializer.serialize(DataMigrator.convert(data)),
|
dataSerializer.serialize(DataMigrator.convert(data)),
|
||||||
null,
|
null,
|
||||||
false,
|
false,
|
||||||
|
|
|
@ -178,7 +178,6 @@ public class FastJobStorage implements JobStorage {
|
||||||
existing.getMaxAttempts(),
|
existing.getMaxAttempts(),
|
||||||
existing.getMaxBackoff(),
|
existing.getMaxBackoff(),
|
||||||
existing.getLifespan(),
|
existing.getLifespan(),
|
||||||
existing.getMaxInstancesForFactory(),
|
|
||||||
existing.getSerializedData(),
|
existing.getSerializedData(),
|
||||||
existing.getSerializedInputData(),
|
existing.getSerializedInputData(),
|
||||||
isRunning,
|
isRunning,
|
||||||
|
@ -209,7 +208,6 @@ public class FastJobStorage implements JobStorage {
|
||||||
existing.getMaxAttempts(),
|
existing.getMaxAttempts(),
|
||||||
existing.getMaxBackoff(),
|
existing.getMaxBackoff(),
|
||||||
existing.getLifespan(),
|
existing.getLifespan(),
|
||||||
existing.getMaxInstancesForFactory(),
|
|
||||||
serializedData,
|
serializedData,
|
||||||
existing.getSerializedInputData(),
|
existing.getSerializedInputData(),
|
||||||
isRunning,
|
isRunning,
|
||||||
|
@ -236,7 +234,6 @@ public class FastJobStorage implements JobStorage {
|
||||||
existing.getMaxAttempts(),
|
existing.getMaxAttempts(),
|
||||||
existing.getMaxBackoff(),
|
existing.getMaxBackoff(),
|
||||||
existing.getLifespan(),
|
existing.getLifespan(),
|
||||||
existing.getMaxInstancesForFactory(),
|
|
||||||
existing.getSerializedData(),
|
existing.getSerializedData(),
|
||||||
existing.getSerializedInputData(),
|
existing.getSerializedInputData(),
|
||||||
false,
|
false,
|
||||||
|
|
|
@ -88,7 +88,7 @@ public class JobMigratorTest {
|
||||||
|
|
||||||
private static JobStorage simpleJobStorage() {
|
private static JobStorage simpleJobStorage() {
|
||||||
JobStorage jobStorage = mock(JobStorage.class);
|
JobStorage jobStorage = mock(JobStorage.class);
|
||||||
when(jobStorage.getAllJobSpecs()).thenReturn(new ArrayList<>(Collections.singletonList(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, 1, "", null, false, false))));
|
when(jobStorage.getAllJobSpecs()).thenReturn(new ArrayList<>(Collections.singletonList(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, "", null, false, false))));
|
||||||
return jobStorage;
|
return jobStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,10 +96,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateAllJobsToBePending_allArePending() {
|
public void updateAllJobsToBePending_allArePending() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ public class FastJobStorageTest {
|
||||||
public void updateJobs_writesToDatabase() {
|
public void updateJobs_writesToDatabase() {
|
||||||
JobDatabase database = fixedDataDatabase(DataSet1.FULL_SPECS);
|
JobDatabase database = fixedDataDatabase(DataSet1.FULL_SPECS);
|
||||||
FastJobStorage subject = new FastJobStorage(database);
|
FastJobStorage subject = new FastJobStorage(database);
|
||||||
List<JobSpec> jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false));
|
List<JobSpec> jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false));
|
||||||
|
|
||||||
subject.init();
|
subject.init();
|
||||||
subject.updateJobs(jobs);
|
subject.updateJobs(jobs);
|
||||||
|
@ -128,7 +128,7 @@ public class FastJobStorageTest {
|
||||||
public void updateJobs_memoryOnly_doesNotWriteToDatabase() {
|
public void updateJobs_memoryOnly_doesNotWriteToDatabase() {
|
||||||
JobDatabase database = fixedDataDatabase(DataSetMemory.FULL_SPECS);
|
JobDatabase database = fixedDataDatabase(DataSetMemory.FULL_SPECS);
|
||||||
FastJobStorage subject = new FastJobStorage(database);
|
FastJobStorage subject = new FastJobStorage(database);
|
||||||
List<JobSpec> jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false));
|
List<JobSpec> jobs = Collections.singletonList(new JobSpec("id1", "f1", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false));
|
||||||
|
|
||||||
subject.init();
|
subject.init();
|
||||||
subject.updateJobs(jobs);
|
subject.updateJobs(jobs);
|
||||||
|
@ -138,20 +138,20 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateJobs_updatesAllFields() {
|
public void updateJobs_updatesAllFields() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec3 = new FullSpec(new JobSpec("3", "f3", null, 1, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec3 = new FullSpec(new JobSpec("3", "f3", null, 1, 1, 1, 1, 1, 1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
FastJobStorage subject = new FastJobStorage(fixedDataDatabase(Arrays.asList(fullSpec1, fullSpec2, fullSpec3)));
|
FastJobStorage subject = new FastJobStorage(fixedDataDatabase(Arrays.asList(fullSpec1, fullSpec2, fullSpec3)));
|
||||||
|
|
||||||
JobSpec update1 = new JobSpec("1", "g1", "q1", 2, 2, 2, 2, 2, 2, 2, "abc", null, true, false);
|
JobSpec update1 = new JobSpec("1", "g1", "q1", 2, 2, 2, 2, 2, 2, "abc", null, true, false);
|
||||||
JobSpec update2 = new JobSpec("2", "g2", "q2", 3, 3, 3, 3, 3, 3, 3, "def", "ghi", true, false);
|
JobSpec update2 = new JobSpec("2", "g2", "q2", 3, 3, 3, 3, 3, 3, "def", "ghi", true, false);
|
||||||
|
|
||||||
subject.init();
|
subject.init();
|
||||||
subject.updateJobs(Arrays.asList(update1, update2));
|
subject.updateJobs(Arrays.asList(update1, update2));
|
||||||
|
@ -208,7 +208,7 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateJobAfterRetry_stateUpdated() {
|
public void updateJobAfterRetry_stateUpdated() {
|
||||||
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 3, 30000, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 3, 30000, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -228,10 +228,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenEarlierItemInQueueInRunning() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenEarlierItemInQueueInRunning() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenAllJobsAreRunning() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenAllJobsAreRunning() {
|
||||||
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenNextRunTimeIsAfterCurrentTime() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenNextRunTimeIsAfterCurrentTime() {
|
||||||
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 10, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 10, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -267,10 +267,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenDependentOnAnotherJob() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_noneWhenDependentOnAnotherJob() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.singletonList(new DependencySpec("2", "1", false)));
|
Collections.singletonList(new DependencySpec("2", "1", false)));
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJob() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJob() {
|
||||||
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -295,10 +295,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_multipleEligibleJobs() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_multipleEligibleJobs() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -311,10 +311,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJobInMixedList() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_singleEligibleJobInMixedList() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", null, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -330,10 +330,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_firstItemInQueue() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_firstItemInQueue() {
|
||||||
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec1 = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec fullSpec2 = new FullSpec(new JobSpec("2", "f2", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -349,10 +349,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_migrationJobTakesPrecedence() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_migrationJobTakesPrecedence() {
|
||||||
FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -367,10 +367,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksNormalJobs() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksNormalJobs() {
|
||||||
FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec plainSpec = new FullSpec(new JobSpec("1", "f1", "q", 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec migrationSpec = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -384,10 +384,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksLaterMigrationJobs() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_runningMigrationBlocksLaterMigrationJobs() {
|
||||||
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, true, false),
|
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, true, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -401,10 +401,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyReturnFirstEligibleMigrationJob() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyReturnFirstEligibleMigrationJob() {
|
||||||
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -419,10 +419,10 @@ public class FastJobStorageTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyMigrationJobWithAppropriateNextRunTime() {
|
public void getPendingJobsWithNoDependenciesInCreatedOrder_onlyMigrationJobWithAppropriateNextRunTime() {
|
||||||
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 999, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec1 = new FullSpec(new JobSpec("1", "f1", Job.Parameters.MIGRATION_QUEUE_KEY, 0, 999, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, -1, EMPTY_DATA, null, false, false),
|
FullSpec migrationSpec2 = new FullSpec(new JobSpec("2", "f2", Job.Parameters.MIGRATION_QUEUE_KEY, 5, 0, 0, 0, 0, -1, EMPTY_DATA, null, false, false),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
|
@ -577,9 +577,9 @@ public class FastJobStorageTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class DataSet1 {
|
private static final class DataSet1 {
|
||||||
static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, 6, 7, EMPTY_DATA, null, false, false);
|
static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, 6, EMPTY_DATA, null, false, false);
|
||||||
static final JobSpec JOB_2 = new JobSpec("id2", "f2", "q2", 1, 2, 3, 4, 5, 6, 7, EMPTY_DATA, null, false, false);
|
static final JobSpec JOB_2 = new JobSpec("id2", "f2", "q2", 1, 2, 3, 4, 5, 6, EMPTY_DATA, null, false, false);
|
||||||
static final JobSpec JOB_3 = new JobSpec("id3", "f3", "q3", 1, 2, 3, 4, 5, 6, 7, EMPTY_DATA, null, false, false);
|
static final JobSpec JOB_3 = new JobSpec("id3", "f3", "q3", 1, 2, 3, 4, 5, 6, EMPTY_DATA, null, false, false);
|
||||||
static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", false);
|
static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", false);
|
||||||
static final ConstraintSpec CONSTRAINT_2 = new ConstraintSpec("id2", "f2", false);
|
static final ConstraintSpec CONSTRAINT_2 = new ConstraintSpec("id2", "f2", false);
|
||||||
static final DependencySpec DEPENDENCY_2 = new DependencySpec("id2", "id1", false);
|
static final DependencySpec DEPENDENCY_2 = new DependencySpec("id2", "id1", false);
|
||||||
|
@ -610,7 +610,7 @@ public class FastJobStorageTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class DataSetMemory {
|
private static final class DataSetMemory {
|
||||||
static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, 6, 7, EMPTY_DATA, null, false, true);
|
static final JobSpec JOB_1 = new JobSpec("id1", "f1", "q1", 1, 2, 3, 4, 5, 6, EMPTY_DATA, null, false, true);
|
||||||
static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", true);
|
static final ConstraintSpec CONSTRAINT_1 = new ConstraintSpec("id1", "f1", true);
|
||||||
static final FullSpec FULL_SPEC_1 = new FullSpec(JOB_1, Collections.singletonList(CONSTRAINT_1), Collections.emptyList());
|
static final FullSpec FULL_SPEC_1 = new FullSpec(JOB_1, Collections.singletonList(CONSTRAINT_1), Collections.emptyList());
|
||||||
static final List<FullSpec> FULL_SPECS = Collections.singletonList(FULL_SPEC_1);
|
static final List<FullSpec> FULL_SPECS = Collections.singletonList(FULL_SPEC_1);
|
||||||
|
|
Loading…
Add table
Reference in a new issue