mirror of
https://github.com/nextcloud/android.git
synced 2024-11-22 21:25:35 +03:00
FilesUploadWorker: process uploads in batches of 100 to prevent reading a large amount of rows in every loop
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
parent
079eb6e5c1
commit
e4a922b913
2 changed files with 20 additions and 6 deletions
|
@ -80,12 +80,12 @@ class FilesUploadWorker(
|
|||
|
||||
// get all pending uploads
|
||||
var currentAndPendingUploadsForAccount =
|
||||
uploadsStorageManager.getCurrentAndPendingUploadsForAccount(accountName)
|
||||
uploadsStorageManager.getCurrentAndPendingUploadsForAccount(MAX_UPLOADS_QUERY, accountName)
|
||||
while (currentAndPendingUploadsForAccount.isNotEmpty()) {
|
||||
Log_OC.d(TAG, "Handling ${currentAndPendingUploadsForAccount.size} uploads for account $accountName")
|
||||
handlePendingUploads(currentAndPendingUploadsForAccount, accountName)
|
||||
currentAndPendingUploadsForAccount =
|
||||
uploadsStorageManager.getCurrentAndPendingUploadsForAccount(accountName)
|
||||
uploadsStorageManager.getCurrentAndPendingUploadsForAccount(MAX_UPLOADS_QUERY, accountName)
|
||||
}
|
||||
|
||||
Log_OC.d(TAG, "No more pending uploads for account $accountName, stopping work")
|
||||
|
@ -240,8 +240,9 @@ class FilesUploadWorker(
|
|||
|
||||
companion object {
|
||||
val TAG: String = FilesUploadWorker::class.java.simpleName
|
||||
const val FOREGROUND_SERVICE_ID: Int = 412
|
||||
const val MAX_PROGRESS: Int = 100
|
||||
private const val MAX_UPLOADS_QUERY = 100
|
||||
private const val FOREGROUND_SERVICE_ID: Int = 412
|
||||
private const val MAX_PROGRESS: Int = 100
|
||||
const val ACCOUNT = "data_account"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -364,6 +364,10 @@ public class UploadsStorageManager extends Observable {
|
|||
}
|
||||
|
||||
private OCUpload[] getUploads(@Nullable String selection, @Nullable String... selectionArgs) {
|
||||
return getUploads(0, selection, selectionArgs);
|
||||
}
|
||||
|
||||
private OCUpload[] getUploads(final int limit, @Nullable String selection, @Nullable String... selectionArgs) {
|
||||
ArrayList<OCUpload> uploads = new ArrayList<>();
|
||||
final long pageSize = 100;
|
||||
long page = 0;
|
||||
|
@ -426,7 +430,11 @@ public class UploadsStorageManager extends Observable {
|
|||
} else {
|
||||
break;
|
||||
}
|
||||
} while (rowsRead > 0);
|
||||
} while (rowsRead > 0 && (limit <= 0 || rowsRead < limit));
|
||||
|
||||
if (limit > 0 && uploads.size() > limit) {
|
||||
uploads = new ArrayList<>(uploads.subList(0, limit));
|
||||
}
|
||||
|
||||
Log_OC.v(TAG, String.format(Locale.ENGLISH,
|
||||
"getUploads() returning %d (%d) rows after reading %d pages",
|
||||
|
@ -435,6 +443,7 @@ public class UploadsStorageManager extends Observable {
|
|||
page
|
||||
));
|
||||
|
||||
|
||||
return uploads.toArray(new OCUpload[0]);
|
||||
}
|
||||
|
||||
|
@ -475,7 +484,11 @@ public class UploadsStorageManager extends Observable {
|
|||
}
|
||||
|
||||
public OCUpload[] getCurrentAndPendingUploadsForAccount(final @NonNull String accountName) {
|
||||
return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
|
||||
return getCurrentAndPendingUploadsForAccount(0, accountName);
|
||||
}
|
||||
|
||||
public OCUpload[] getCurrentAndPendingUploadsForAccount(final int limit, final @NonNull String accountName) {
|
||||
return getUploads(limit, ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
|
||||
" OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
||||
"==" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
||||
" OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
||||
|
|
Loading…
Reference in a new issue