Refactor concurrency handling to introduce STALE_HEARTBEAT_THRESHOLD_MS constant and utilize SweepstoreWorkerTicketSnapshot for improved state management
This commit is contained in:
@@ -218,68 +218,68 @@ class SweepstoreWorkerTicket {
|
||||
// All offsets are relative to the start of the workers ticket
|
||||
int get _baseOffset => endOfStaticHeaderOffset + (ticketIndex * ticketSize);
|
||||
|
||||
// Offset 0 - 4 bytes
|
||||
int get identifier {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset, _baseOffset + 4);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset);
|
||||
int id = _concurrencyHeader._header._file.readIntSync(4);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + 4);
|
||||
return id;
|
||||
}
|
||||
|
||||
// Offset 4 - 4 bytes
|
||||
int get workerHeartbeat {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 4, _baseOffset + 8);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 4);
|
||||
int heartbeat = _concurrencyHeader._header._file.readIntSync(4);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 4, _baseOffset + 8);
|
||||
return heartbeat;
|
||||
}
|
||||
|
||||
// Offset 8 - 1 byte
|
||||
SweepstoreTicketState get ticketState {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 8, _baseOffset + 9);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 8);
|
||||
int stateValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 8, _baseOffset + 9);
|
||||
return SweepstoreTicketState.values[stateValue];
|
||||
}
|
||||
|
||||
// Offset 9 - 1 byte
|
||||
SweepstoreTicketOperation get ticketOperation {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 9, _baseOffset + 10);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 9);
|
||||
int operationValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 9, _baseOffset + 10);
|
||||
return SweepstoreTicketOperation.values[operationValue];
|
||||
}
|
||||
|
||||
// Offset 10 - 8 bytes
|
||||
int get keyHash {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 10, _baseOffset + 18);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 10);
|
||||
int hash = _concurrencyHeader._header._file.readIntSync(8);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 10, _baseOffset + 18);
|
||||
return hash;
|
||||
}
|
||||
|
||||
// Offset 18 - 8 bytes
|
||||
SweepstorePointer get writePointer {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 18, _baseOffset + 26);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 18);
|
||||
int address = _concurrencyHeader._header._file.readIntSync(8);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 18, _baseOffset + 26);
|
||||
return SweepstorePointer(address);
|
||||
}
|
||||
|
||||
// Offset 26 - 4 bytes
|
||||
int get writeSize {
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 26, _baseOffset + 30);
|
||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 26);
|
||||
int size = _concurrencyHeader._header._file.readIntSync(4);
|
||||
_concurrencyHeader._header._file.unlockSync(_baseOffset + 26, _baseOffset + 30);
|
||||
return size;
|
||||
}
|
||||
// // Offset 0 - 4 bytes
|
||||
// int get identifier {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset, _baseOffset + 4);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset);
|
||||
// int id = _concurrencyHeader._header._file.readIntSync(4);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + 4);
|
||||
// return id;
|
||||
// }
|
||||
//
|
||||
// // Offset 4 - 4 bytes
|
||||
// int get workerHeartbeat {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 4, _baseOffset + 8);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 4);
|
||||
// int heartbeat = _concurrencyHeader._header._file.readIntSync(4);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 4, _baseOffset + 8);
|
||||
// return heartbeat;
|
||||
// }
|
||||
//
|
||||
// // Offset 8 - 1 byte
|
||||
// SweepstoreTicketState get ticketState {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 8, _baseOffset + 9);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 8);
|
||||
// int stateValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 8, _baseOffset + 9);
|
||||
// return SweepstoreTicketState.values[stateValue];
|
||||
// }
|
||||
//
|
||||
// // Offset 9 - 1 byte
|
||||
// SweepstoreTicketOperation get ticketOperation {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 9, _baseOffset + 10);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 9);
|
||||
// int operationValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 9, _baseOffset + 10);
|
||||
// return SweepstoreTicketOperation.values[operationValue];
|
||||
// }
|
||||
//
|
||||
// // Offset 10 - 8 bytes
|
||||
// int get keyHash {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 10, _baseOffset + 18);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 10);
|
||||
// int hash = _concurrencyHeader._header._file.readIntSync(8);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 10, _baseOffset + 18);
|
||||
// return hash;
|
||||
// }
|
||||
//
|
||||
// // Offset 18 - 8 bytes
|
||||
// SweepstorePointer get writePointer {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 18, _baseOffset + 26);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 18);
|
||||
// int address = _concurrencyHeader._header._file.readIntSync(8);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 18, _baseOffset + 26);
|
||||
// return SweepstorePointer(address);
|
||||
// }
|
||||
//
|
||||
// // Offset 26 - 4 bytes
|
||||
// int get writeSize {
|
||||
// _concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset + 26, _baseOffset + 30);
|
||||
// _concurrencyHeader._header._file.setPositionSync(_baseOffset + 26);
|
||||
// int size = _concurrencyHeader._header._file.readIntSync(4);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset + 26, _baseOffset + 30);
|
||||
// return size;
|
||||
// }
|
||||
|
||||
// Writer
|
||||
void write({
|
||||
@@ -362,12 +362,12 @@ class SweepstoreWorkerTicket {
|
||||
|
||||
SweepstoreWorkerTicketSnapshot snapshot() {
|
||||
|
||||
_concurrencyHeader._header._file.lockSync(FileLock.blockingShared, _baseOffset, _baseOffset + ticketSize);
|
||||
// _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);
|
||||
// _concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + ticketSize);
|
||||
|
||||
buffer.setPositionSync(0);
|
||||
int identifier = buffer.readIntSync(4);
|
||||
|
||||
Reference in New Issue
Block a user