mirror of
				https://github.com/oxen-io/session-android.git
				synced 2025-10-31 17:59:40 +00:00 
			
		
		
		
	fix: check actual collisions instead of not
This commit is contained in:
		| @@ -23,14 +23,6 @@ class SessionJobDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa | |||||||
|     fun persistJob(job: Job) { |     fun persistJob(job: Job) { | ||||||
|         val database = databaseHelper.writableDatabase |         val database = databaseHelper.writableDatabase | ||||||
|         val contentValues = ContentValues(4) |         val contentValues = ContentValues(4) | ||||||
|         val existing = database.get(sessionJobTable, "$jobID = ?", arrayOf(job.id!!)) { cursor -> |  | ||||||
|             cursor.count |  | ||||||
|         } ?: 0 |  | ||||||
|         // When adding multiple jobs in rapid succession, timestamps might not be good enough as a unique ID. To |  | ||||||
|         // deal with this we keep track of the number of jobs with a given timestamp and that to the end of the |  | ||||||
|         // timestamp to make it a unique ID. We can't use a random number because we do still want to keep track |  | ||||||
|         // of the order in which the jobs were added. |  | ||||||
|         job.id += existing |  | ||||||
|         contentValues.put(jobID, job.id) |         contentValues.put(jobID, job.id) | ||||||
|         contentValues.put(jobType, job.getFactoryKey()) |         contentValues.put(jobType, job.getFactoryKey()) | ||||||
|         contentValues.put(failureCount, job.failureCount) |         contentValues.put(failureCount, job.failureCount) | ||||||
|   | |||||||
| @@ -6,7 +6,9 @@ import kotlinx.coroutines.channels.Channel.Factory.UNLIMITED | |||||||
| import org.session.libsession.messaging.MessagingConfiguration | import org.session.libsession.messaging.MessagingConfiguration | ||||||
| import org.session.libsignal.utilities.logging.Log | import org.session.libsignal.utilities.logging.Log | ||||||
| import java.util.* | import java.util.* | ||||||
|  | import java.util.concurrent.ConcurrentHashMap | ||||||
| import java.util.concurrent.Executors | import java.util.concurrent.Executors | ||||||
|  | import java.util.concurrent.atomic.AtomicInteger | ||||||
| import kotlin.concurrent.schedule | import kotlin.concurrent.schedule | ||||||
| import kotlin.math.min | import kotlin.math.min | ||||||
| import kotlin.math.pow | import kotlin.math.pow | ||||||
| @@ -16,6 +18,8 @@ import kotlin.math.roundToLong | |||||||
| class JobQueue : JobDelegate { | class JobQueue : JobDelegate { | ||||||
|     private var hasResumedPendingJobs = false // Just for debugging |     private var hasResumedPendingJobs = false // Just for debugging | ||||||
|  |  | ||||||
|  |     private val jobTimestampMap = ConcurrentHashMap<Long, AtomicInteger>() | ||||||
|  |  | ||||||
|     private val dispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher() |     private val dispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher() | ||||||
|     private val scope = GlobalScope + SupervisorJob() |     private val scope = GlobalScope + SupervisorJob() | ||||||
|     private val queue = Channel<Job>(UNLIMITED) |     private val queue = Channel<Job>(UNLIMITED) | ||||||
| @@ -44,7 +48,14 @@ class JobQueue : JobDelegate { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun addWithoutExecuting(job: Job) { |     private fun addWithoutExecuting(job: Job) { | ||||||
|         job.id = System.currentTimeMillis().toString() |         // When adding multiple jobs in rapid succession, timestamps might not be good enough as a unique ID. To | ||||||
|  |         // deal with this we keep track of the number of jobs with a given timestamp and that to the end of the | ||||||
|  |         // timestamp to make it a unique ID. We can't use a random number because we do still want to keep track | ||||||
|  |         // of the order in which the jobs were added. | ||||||
|  |         val currentTime = System.currentTimeMillis() | ||||||
|  |         jobTimestampMap.putIfAbsent(currentTime, AtomicInteger()) | ||||||
|  |         job.id = jobTimestampMap[currentTime]!!.getAndIncrement().toString() | ||||||
|  |  | ||||||
|         MessagingConfiguration.shared.storage.persistJob(job) |         MessagingConfiguration.shared.storage.persistJob(job) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 jubb
					jubb