void IDBTransaction::OnRequestFinished(bool aActorDestroyedNormally) { AssertIsOnOwningThread(); MOZ_ASSERT(mPendingRequestCount); --mPendingRequestCount; if (!mPendingRequestCount && !mDatabase->IsInvalidated()) { mReadyState = COMMITTING; if (aActorDestroyedNormally) { if (NS_SUCCEEDED(mAbortCode)) { SendCommit(); } else { SendAbort(mAbortCode); } } else { // Don't try to send any more messages to the parent if the request actor // was killed. #ifdef DEBUG MOZ_ASSERT(!mSentCommitOrAbort); mSentCommitOrAbort = true; #endif IDB_LOG_MARK("IndexedDB %s: Child Transaction[%lld]: " "Request actor was killed, transaction will be aborted", "IndexedDB %s: C T[%lld]: IDBTransaction abort", IDB_LOG_ID_STRING(), LoggingSerialNumber()); } } }
void ShardMigrationWriter::SendNext() { ASSERT(cursor != NULL); kv = cursor->Next(kv); if (kv) SendItem(kv); else SendCommit(); }
NS_IMETHODIMP IDBTransaction::Run() { AssertIsOnOwningThread(); // We're back at the event loop, no longer newborn. mCreating = false; // Maybe commit if there were no requests generated. if (mReadyState == IDBTransaction::INITIAL) { mReadyState = DONE; SendCommit(); } return NS_OK; }
void ShardMigrationWriter::SendFirst() { ClusterMessage msg; ReadBuffer key; ReadBuffer value; ASSERT(cursor == NULL); cursor = environment->GetBulkCursor(QUORUM_DATABASE_DATA_CONTEXT, srcShardID); cursor->SetOnBlockShard(MFUNC(ShardMigrationWriter, OnBlockShard)); msg.ShardMigrationBegin(quorumID, srcShardID, dstShardID); CONTEXT_TRANSPORT->SendClusterMessage(nodeID, msg); Log_Debug("ShardMigrationWriter sending BEGIN"); // send first KV kv = cursor->First(); if (kv) SendItem(kv); else SendCommit(); }