Add file locking for thread safety
Opened this issue · 3 comments
Currently nothing prevents multiple instances of Logstash from attempting to write to the same named sequence file. This is not necessarily a common occurrence, but we should be safer here by default.
Well, there are 2 cases:
- multiple input plugins with the same sequence file in the same logstash instance
- multiple input plugins with the same sequence file in different logstash instances
The former can be solved by adding thread safety on SequenceDB::File. The latter will have to be solved with file locking, dealing with the dreaded flock call etc.
Are any of these 2 use cases actually make any sense or both are clear misconfigurations?
Both seem plausible to me.
I've used the less than ideal .lck
file method in the past (where you make an empty file appended with .lck
and check for that as the locking mechanism). Is flock
really so much worse than that?
but does it make sense to have 2 plugins share the same SequenceDB::File
? if not, instead of supporting concurrent access we'd just need to prevent concurrent access which could be done using "poor's man" looking with a .lock
file and leveraging the fact that FS posix rename
is an atomic operation to avoid startup race condition on the .lock
file. Now, I am not sure about Windows...