@@ -18,8 +18,7 @@ import { enumeratePrefixedKeys } from './storageHelper.js';
18
18
* @typedef { import('../../types-external.js').ManagerOptions } ManagerOptions
19
19
* @typedef { import('../../types-external.js').SnapStore } SnapStore
20
20
* @typedef { import('../../types-external.js').SourceOfBundle } SourceOfBundle
21
- * @typedef { import('../../types-external.js').StreamPosition } StreamPosition
22
- * @typedef { import('../../types-external.js').StreamStore } StreamStore
21
+ * @typedef { import('../../types-external.js').TranscriptStore } TranscriptStore
23
22
* @typedef { import('../../types-external.js').VatManager } VatManager
24
23
* @typedef { import('../../types-internal.js').RecordedVatOptions } RecordedVatOptions
25
24
* @typedef { import('../../types-external.js').TranscriptEntry } TranscriptEntry
@@ -36,25 +35,24 @@ const FIRST_DEVICE_ID = 70n;
36
35
* Establish a vat's state.
37
36
*
38
37
* @param {* } kvStore The key-value store in which the persistent state will be kept
39
- * @param {* } streamStore Accompanying stream store
38
+ * @param {* } transcriptStore Accompanying transcript store
40
39
* @param {string } vatID The vat ID string of the vat in question
41
40
* TODO: consider making this part of makeVatKeeper
42
41
*/
43
- export function initializeVatState ( kvStore , streamStore , vatID ) {
42
+ export function initializeVatState ( kvStore , transcriptStore , vatID ) {
44
43
kvStore . set ( `${ vatID } .o.nextID` , `${ FIRST_OBJECT_ID } ` ) ;
45
44
kvStore . set ( `${ vatID } .p.nextID` , `${ FIRST_PROMISE_ID } ` ) ;
46
45
kvStore . set ( `${ vatID } .d.nextID` , `${ FIRST_DEVICE_ID } ` ) ;
47
46
kvStore . set ( `${ vatID } .nextDeliveryNum` , `0` ) ;
48
47
kvStore . set ( `${ vatID } .incarnationNumber` , `1` ) ;
49
- kvStore . set ( `${ vatID } .t.startPosition` , `${ streamStore . STREAM_START } ` ) ;
50
- kvStore . set ( `${ vatID } .t.endPosition` , `${ streamStore . STREAM_START } ` ) ;
48
+ transcriptStore . initTranscript ( vatID ) ;
51
49
}
52
50
53
51
/**
54
52
* Produce a vat keeper for a vat.
55
53
*
56
54
* @param {KVStore } kvStore The keyValue store in which the persistent state will be kept
57
- * @param {StreamStore } streamStore Accompanying stream store, for the transcripts
55
+ * @param {TranscriptStore } transcriptStore Accompanying transcript store, for the transcripts
58
56
* @param {* } kernelSlog
59
57
* @param {string } vatID The vat ID string of the vat in question
60
58
* @param {* } addKernelObject Kernel function to add a new object to the kernel's
@@ -76,7 +74,7 @@ export function initializeVatState(kvStore, streamStore, vatID) {
76
74
*/
77
75
export function makeVatKeeper (
78
76
kvStore ,
79
- streamStore ,
77
+ transcriptStore ,
80
78
kernelSlog ,
81
79
vatID ,
82
80
addKernelObject ,
@@ -94,7 +92,6 @@ export function makeVatKeeper(
94
92
snapStore = undefined ,
95
93
) {
96
94
insistVatID ( vatID ) ;
97
- const transcriptStream = `transcript-${ vatID } ` ;
98
95
99
96
function getRequired ( key ) {
100
97
const value = kvStore . get ( key ) ;
@@ -475,20 +472,12 @@ export function makeVatKeeper(
475
472
/**
476
473
* Generator function to return the vat's transcript, one entry at a time.
477
474
*
478
- * @param {StreamPosition } [startPos] Optional position to begin reading from
475
+ * @param {number } [startPos] Optional position to begin reading from
479
476
*
480
477
* @yields { TranscriptEntry } a stream of transcript entries
481
478
*/
482
479
function * getTranscript ( startPos ) {
483
- if ( startPos === undefined ) {
484
- startPos = Number ( getRequired ( `${ vatID } .t.startPosition` ) ) ;
485
- }
486
- const endPos = Number ( getRequired ( `${ vatID } .t.endPosition` ) ) ;
487
- for ( const entry of streamStore . readStream (
488
- transcriptStream ,
489
- /** @type { StreamPosition } */ ( startPos ) ,
490
- endPos ,
491
- ) ) {
480
+ for ( const entry of transcriptStore . readTranscript ( vatID , startPos ) ) {
492
481
yield /** @type { TranscriptEntry } */ ( JSON . parse ( entry ) ) ;
493
482
}
494
483
}
@@ -499,21 +488,13 @@ export function makeVatKeeper(
499
488
* @param {object } entry The transcript entry to append.
500
489
*/
501
490
function addToTranscript ( entry ) {
502
- const oldPos = Number ( getRequired ( `${ vatID } .t.endPosition` ) ) ;
503
- const newPos = streamStore . writeStreamItem (
504
- transcriptStream ,
505
- JSON . stringify ( entry ) ,
506
- oldPos ,
507
- ) ;
508
- kvStore . set ( `${ vatID } .t.endPosition` , `${ newPos } ` ) ;
491
+ transcriptStore . writeTranscriptItem ( vatID , JSON . stringify ( entry ) ) ;
509
492
}
510
493
511
- /** @returns {StreamPosition } */
494
+ /** @returns {number } */
512
495
function getTranscriptEndPosition ( ) {
513
- const endPosition =
514
- kvStore . get ( `${ vatID } .t.endPosition` ) ||
515
- assert . fail ( 'missing endPosition' ) ;
516
- return Number ( endPosition ) ;
496
+ const { endPos } = transcriptStore . getCurrentTranscriptBounds ( vatID ) ;
497
+ return endPos ;
517
498
}
518
499
519
500
function getSnapshotInfo ( ) {
@@ -540,6 +521,7 @@ export function makeVatKeeper(
540
521
541
522
const endPosition = getTranscriptEndPosition ( ) ;
542
523
const info = await manager . makeSnapshot ( endPosition , snapStore ) ;
524
+ transcriptStore . rolloverSpan ( vatID ) ;
543
525
const {
544
526
hash,
545
527
uncompressedSize,
@@ -570,9 +552,7 @@ export function makeVatKeeper(
570
552
if ( snapStore ) {
571
553
snapStore . deleteVatSnapshots ( vatID ) ;
572
554
}
573
-
574
- const endPos = getRequired ( `${ vatID } .t.endPosition` ) ;
575
- kvStore . set ( `${ vatID } .t.startPosition` , endPos ) ;
555
+ transcriptStore . rolloverSpan ( vatID ) ;
576
556
}
577
557
578
558
function vatStats ( ) {
@@ -584,9 +564,9 @@ export function makeVatKeeper(
584
564
const objectCount = getCount ( `${ vatID } .o.nextID` , FIRST_OBJECT_ID ) ;
585
565
const promiseCount = getCount ( `${ vatID } .p.nextID` , FIRST_PROMISE_ID ) ;
586
566
const deviceCount = getCount ( `${ vatID } .d.nextID` , FIRST_DEVICE_ID ) ;
587
- const startCount = Number ( getRequired ( ` ${ vatID } .t.startPosition` ) ) ;
588
- const endCount = Number ( getRequired ( ` ${ vatID } .t.endPosition` ) ) ;
589
- const transcriptCount = endCount - startCount ;
567
+ const { startPos , endPos } =
568
+ transcriptStore . getCurrentTranscriptBounds ( vatID ) ;
569
+ const transcriptCount = endPos - startPos ;
590
570
591
571
// TODO: Fix the downstream JSON.stringify to allow the counts to be BigInts
592
572
return harden ( {
0 commit comments