Add file locking for concurrent access in header.dart
This commit is contained in:
@@ -215,50 +215,64 @@ class SweepstoreWorkerTicket {
|
|||||||
|
|
||||||
// Offset 0 - 4 bytes
|
// Offset 0 - 4 bytes
|
||||||
int get identifier {
|
int get identifier {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset, _baseOffset + 4);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset);
|
||||||
int id = _concurrencyHeader._header._file.readIntSync(4);
|
int id = _concurrencyHeader._header._file.readIntSync(4);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset, _baseOffset + 4);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 4 - 4 bytes
|
// Offset 4 - 4 bytes
|
||||||
int get workerHeartbeat {
|
int get workerHeartbeat {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 4, _baseOffset + 8);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 4);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 4);
|
||||||
int heartbeat = _concurrencyHeader._header._file.readIntSync(4);
|
int heartbeat = _concurrencyHeader._header._file.readIntSync(4);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 4, _baseOffset + 8);
|
||||||
return heartbeat;
|
return heartbeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 8 - 1 byte
|
// Offset 8 - 1 byte
|
||||||
SweepstoreTicketState get ticketState {
|
SweepstoreTicketState get ticketState {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 8, _baseOffset + 9);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 8);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 8);
|
||||||
int stateValue = _concurrencyHeader._header._file.readIntSync(1);
|
int stateValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 8, _baseOffset + 9);
|
||||||
return SweepstoreTicketState.values[stateValue];
|
return SweepstoreTicketState.values[stateValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 9 - 1 byte
|
// Offset 9 - 1 byte
|
||||||
SweepstoreTicketOperation get ticketOperation {
|
SweepstoreTicketOperation get ticketOperation {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 9, _baseOffset + 10);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 9);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 9);
|
||||||
int operationValue = _concurrencyHeader._header._file.readIntSync(1);
|
int operationValue = _concurrencyHeader._header._file.readIntSync(1);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 9, _baseOffset + 10);
|
||||||
return SweepstoreTicketOperation.values[operationValue];
|
return SweepstoreTicketOperation.values[operationValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 10 - 8 bytes
|
// Offset 10 - 8 bytes
|
||||||
int get keyHash {
|
int get keyHash {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 10, _baseOffset + 18);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 10);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 10);
|
||||||
int hash = _concurrencyHeader._header._file.readIntSync(8);
|
int hash = _concurrencyHeader._header._file.readIntSync(8);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 10, _baseOffset + 18);
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 18 - 8 bytes
|
// Offset 18 - 8 bytes
|
||||||
SweepstorePointer get writePointer {
|
SweepstorePointer get writePointer {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 18, _baseOffset + 26);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 18);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 18);
|
||||||
int address = _concurrencyHeader._header._file.readIntSync(8);
|
int address = _concurrencyHeader._header._file.readIntSync(8);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 18, _baseOffset + 26);
|
||||||
return SweepstorePointer(address);
|
return SweepstorePointer(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset 26 - 4 bytes
|
// Offset 26 - 4 bytes
|
||||||
int get writeSize {
|
int get writeSize {
|
||||||
|
_concurrencyHeader._header._file.lockSync(FileLock.shared, _baseOffset + 26, _baseOffset + 30);
|
||||||
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 26);
|
_concurrencyHeader._header._file.setPositionSync(_baseOffset + 26);
|
||||||
int size = _concurrencyHeader._header._file.readIntSync(4);
|
int size = _concurrencyHeader._header._file.readIntSync(4);
|
||||||
|
_concurrencyHeader._header._file.unlockSync(_baseOffset + 26, _baseOffset + 30);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user