Refactor concurrency handling to utilize SweepstoreWorkerTicketSnapshot for improved state management and add snapshot method in header.dart
This commit is contained in:
@@ -359,4 +359,58 @@ class SweepstoreWorkerTicket {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
SweepstoreWorkerTicketSnapshot snapshot() {
|
||||
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset, _baseOffset + ticketSize);
|
||||
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset);
|
||||
List<int> existingBuffer = _concurrencyHeader._header._file.readSync(ticketSize);
|
||||
RandomAccessMemory buffer = RandomAccessMemory(existingBuffer);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + ticketSize);
|
||||
|
||||
buffer.setPositionSync(0);
|
||||
int identifier = buffer.readIntSync(4);
|
||||
int workerHeartbeat = buffer.readIntSync(4);
|
||||
SweepstoreTicketState ticketState = SweepstoreTicketState.values[buffer.readIntSync(1)];
|
||||
SweepstoreTicketOperation ticketOperation = SweepstoreTicketOperation.values[buffer.readIntSync(1)];
|
||||
int keyHash = buffer.readIntSync(8);
|
||||
SweepstorePointer writePointer = SweepstorePointer(buffer.readIntSync(8));
|
||||
int writeSize = buffer.readIntSync(4);
|
||||
return SweepstoreWorkerTicketSnapshot._(
|
||||
ticketIndex: ticketIndex,
|
||||
identifier: identifier,
|
||||
workerHeartbeat: workerHeartbeat,
|
||||
ticketState: ticketState,
|
||||
ticketOperation: ticketOperation,
|
||||
keyHash: keyHash,
|
||||
writePointer: writePointer,
|
||||
writeSize: writeSize,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SweepstoreWorkerTicketSnapshot {
|
||||
|
||||
final int ticketIndex;
|
||||
final int identifier;
|
||||
final int workerHeartbeat;
|
||||
final SweepstoreTicketState ticketState;
|
||||
final SweepstoreTicketOperation ticketOperation;
|
||||
final int keyHash;
|
||||
final SweepstorePointer writePointer;
|
||||
final int writeSize;
|
||||
|
||||
SweepstoreWorkerTicketSnapshot._({
|
||||
required this.ticketIndex,
|
||||
required this.identifier,
|
||||
required this.workerHeartbeat,
|
||||
required this.ticketState,
|
||||
required this.ticketOperation,
|
||||
required this.keyHash,
|
||||
required this.writePointer,
|
||||
required this.writeSize,
|
||||
});
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user