Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/libs/API/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,19 +155,23 @@ function prepareRequest<TCommand extends ApiCommand>(
* Process a prepared request according to its type.
*/
function processRequest(request: OnyxRequest, type: ApiRequestType): Promise<void | Response> {
Log.info('[API] Processing request', false, {command: request.command, type});
// Write commands can be saved and retried, so push it to the SequentialQueue
if (type === CONST.API_REQUEST_TYPE.WRITE) {
Log.info('[API] Write command. Pushing to SequentialQueue', false, {command: request.command});
pushToSequentialQueue(request);
return Promise.resolve();
}

// Read requests are processed right away, but don't return the response to the caller
if (type === CONST.API_REQUEST_TYPE.READ) {
Log.info('[API] Read command. Processing request with middleware', false, {command: request.command});
processWithMiddleware(request);
return Promise.resolve();
}

// Requests with side effects process right away, and return the response to the caller
Log.info('[API] Side effect command. Processing request with middleware', false, {command: request.command});
return processWithMiddleware(request);
}

Expand Down
4 changes: 4 additions & 0 deletions src/libs/Network/SequentialQueue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -352,21 +352,25 @@ function push(newRequest: OnyxRequest) {
delete newRequest.checkAndFixConflictingRequest;
handleConflictActions(conflictAction, newRequest);
} else {
Log.info('[SequentialQueue] No conflict action. Adding request to Persisted Requests', false, {command: newRequest.command});
// Add request to Persisted Requests so that it can be retried if it fails
savePersistedRequest(newRequest);
}

// If we are offline we don't need to trigger the queue to empty as it will happen when we come back online
if (isOffline()) {
Log.info('[SequentialQueue] Unable to push request due to offline status');
return;
}

// If the queue is running this request will run once it has finished processing the current batch
if (isSequentialQueueRunning) {
Log.info('[SequentialQueue] Queue is running. Will flush when the current request is finished.');
isReadyPromise.then(() => flush(true));
return;
}

Log.info('[SequentialQueue] Queue is not running. Flushing the queue.');
flush(true);
}

Expand Down
11 changes: 8 additions & 3 deletions src/libs/actions/PersistedRequests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ function getLength(): number {
}

function save(requestToPersist: Request) {
Log.info('[PersistedRequests] Saving request to queue started', false, {command: requestToPersist.command});
// If not initialized yet, queue the request for later processing
if (!isInitialized) {
Log.info('[PersistedRequests] Queueing request until initialization completes', false);
Expand All @@ -86,9 +87,13 @@ function save(requestToPersist: Request) {
// If the command is not in the keepLastInstance array, add the new request as usual
const requests = [...persistedRequests, requestToPersist];
persistedRequests = requests;
Onyx.set(ONYXKEYS.PERSISTED_REQUESTS, requests).then(() => {
Log.info(`[SequentialQueue] '${requestToPersist.command}' command queued. Queue length is ${getLength()}`);
});
Onyx.set(ONYXKEYS.PERSISTED_REQUESTS, requests)
Comment thread
TMisiukiewicz marked this conversation as resolved.
.then(() => {
Log.info(`[SequentialQueue] '${requestToPersist.command}' command queued. Queue length is ${getLength()}`);
})
.catch(() => {
Log.info('[SequentialQueue] Error saving request to queue', false, {command: requestToPersist.command});
});
}

function endRequestAndRemoveFromQueue(requestToRemove: Request) {
Expand Down
Loading