The sidecar fold every 5 min inside a long par2 pass too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2e25b7c56e
commit
59c93071c7
1 file changed
+13
@@ -18,6 +18,8 @@ const SLACK_FILES = 10
|
|||||||
const ROUND_MS = 60_000
|
const ROUND_MS = 60_000
|
||||||
/** A round looks back this far past the previous one's start (rows committed while it ran). */
|
/** A round looks back this far past the previous one's start (rows committed while it ran). */
|
||||||
const OVERLAP_MS = 60_000
|
const OVERLAP_MS = 60_000
|
||||||
|
/** The sidecar fold also runs this often inside a long par2 pass: its queue grows by the settler's pace. */
|
||||||
|
const FOLD_EVERY_MS = 5 * 60_000
|
||||||
/** The merger's row in worker_cursors: the start of its last whole round, kept over a restart. */
|
/** The merger's row in worker_cursors: the start of its last whole round, kept over a restart. */
|
||||||
const CURSOR = 'merger'
|
const CURSOR = 'merger'
|
||||||
|
|
||||||
@@ -108,6 +110,16 @@ export class Par2Merger {
|
|||||||
// First: sidecars (.nfo, .sfv, .nzb) apart from their upload join it. A queue, not since: it needn't wait for the
|
// First: sidecars (.nfo, .sfv, .nzb) apart from their upload join it. A queue, not since: it needn't wait for the
|
||||||
// par2 pass (hours when that starts over).
|
// par2 pass (hours when that starts over).
|
||||||
const folded = await this.folder.round()
|
const folded = await this.folder.round()
|
||||||
|
let foldedAt = Date.now()
|
||||||
|
const foldAgain = async () => {
|
||||||
|
if (Date.now() - foldedAt < FOLD_EVERY_MS) return
|
||||||
|
const more = await this.folder.round()
|
||||||
|
folded.looked += more.looked
|
||||||
|
folded.sidecars += more.sidecars
|
||||||
|
folded.folded += more.folded
|
||||||
|
foldedAt = Date.now()
|
||||||
|
if (more.folded) logger.info(`Folded ${more.folded} sidecars into their uploads (${more.sidecars} sidecar-only of ${more.looked} small releases).`)
|
||||||
|
}
|
||||||
const { rows } = await db.rawQuery(
|
const { rows } = await db.rawQuery(
|
||||||
`SELECT set_id FROM par2_sets WHERE created_at >= ?
|
`SELECT set_id FROM par2_sets WHERE created_at >= ?
|
||||||
UNION
|
UNION
|
||||||
@@ -117,6 +129,7 @@ export class Par2Merger {
|
|||||||
const round: MergeRound = { sets: rows.length, merges: 0, releases: 0, stems: 0, stemMerges: 0, stemReleases: 0, folded }
|
const round: MergeRound = { sets: rows.length, merges: 0, releases: 0, stems: 0, stemMerges: 0, stemReleases: 0, folded }
|
||||||
for (const { set_id: setId } of rows) {
|
for (const { set_id: setId } of rows) {
|
||||||
if (this.stopped) return round
|
if (this.stopped) return round
|
||||||
|
await foldAgain()
|
||||||
// One set that fails doesn't hold up the others (nor the next round, which would start from the same point).
|
// One set that fails doesn't hold up the others (nor the next round, which would start from the same point).
|
||||||
const merged = await this.mergeSet(setId.trim()).catch((error) => {
|
const merged = await this.mergeSet(setId.trim()).catch((error) => {
|
||||||
logger.error(`Par2 merge of set ${setId.trim()} failed: ${error.message}`)
|
logger.error(`Par2 merge of set ${setId.trim()} failed: ${error.message}`)
|
||||||
|
|||||||
Reference in new issue
Block a user