mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-11-13 07:11:44 -05:00
reorganize the sample file directory
The filenames now represent composite ids (stream id + recording id) rather
than a separate uuid system with its own reservation for a few benefits:
* This provides more information when there are inconsistencies.
* This avoids the need for managing the reservations during recording. I
expect this to simplify delaying flushing of newly written sample files.
Now the directory has to be scanned at startup for files that never got
written to the database, but that's acceptably fast even with millions of
files.
* Less information to keep in memory and in the recording_playback table.
I'd considered using one directory per stream, which might help if the
filesystem has trouble coping with huge directories. But that would mean each
dir has to be fsync()ed separately (more latency and/or more multithreading).
So I'll stick with this until I see concrete evidence of a problem that would
solve.
Test coverage of the error conditions is poor. I plan to do some restructuring
of the db/dir code, hopefully making steps toward testability along the way.
This commit is contained in:
@@ -192,17 +192,28 @@ dropped from 605 to 39.
|
||||
|
||||
The general upgrade procedure applies to this upgrade.
|
||||
|
||||
### Version 1 to version 2
|
||||
### Version 1 to version 2 to version 3
|
||||
|
||||
Version 2 adds:
|
||||
This upgrade affects the sample file directory as well as the database. Thus,
|
||||
the restore procedure written above of simply copying back the databae is
|
||||
insufficient. To do a full restore, you would need to back up and restore the
|
||||
sample file directory as well. This directory is considerably larger, so
|
||||
consider an alternate procedure of crossing your fingers, and being prepared
|
||||
to start over from scratch if there's a problem.
|
||||
|
||||
Version 2 represents a half-finished upgrade from version 1 to version 3; it
|
||||
is never used.
|
||||
|
||||
Version 3 adds over version 1:
|
||||
|
||||
* recording of sub streams (splits a new `stream` table out of `camera`)
|
||||
* support for multiple sample file directories, to take advantage of
|
||||
multiple hard drives (or multiple RAID volumes).
|
||||
* interlock between database and sample file directories to avoid various
|
||||
* an interlock between database and sample file directories to avoid various
|
||||
mixups that could cause data integrity problems.
|
||||
* records the RFC-6381 codec associated with a video sample entry, so that
|
||||
* recording the RFC-6381 codec associated with a video sample entry, so that
|
||||
logic for determining this is no longer needed as part of the database
|
||||
layer.
|
||||
|
||||
The general upgrade procedure applies to this upgrade.
|
||||
* a simpler sample file directory layout in which files are represented by
|
||||
the same sequentially increasing id as in the database, rather than a
|
||||
separate uuid which has to be reserved in advance.
|
||||
|
||||
Reference in New Issue
Block a user