@dxos/feed-store 0.7.4 → 0.7.5-feature-compute.4d9d99a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,6 +29,11 @@ export declare class FeedSetIterator<T extends {}> extends AbstractFeedIterator<
29
29
  private readonly _trigger;
30
30
  private readonly _subscriptions;
31
31
  readonly stalled: Event<FeedSetIterator<T>>;
32
+ /**
33
+ * Blocks to be retried once all feeds are processed or stalled.
34
+ * It is used to retry blocks that failed to be processed.
35
+ */
36
+ private readonly _reiterateBlocks;
32
37
  constructor(_selector: FeedBlockSelector<T>, options?: FeedSetIteratorOptions);
33
38
  [inspect.custom](): string;
34
39
  toJSON(): {
@@ -39,10 +44,12 @@ export declare class FeedSetIterator<T extends {}> extends AbstractFeedIterator<
39
44
  get size(): number;
40
45
  get feeds(): FeedWrapper<T>[];
41
46
  get indexes(): FeedIndex[];
47
+ reiterateBlock(block: FeedBlock<T>): void;
42
48
  addFeed(feed: FeedWrapper<T>): Promise<void>;
43
49
  hasFeed(feedKey: PublicKey): boolean;
44
50
  _onOpen(): Promise<void>;
45
51
  _onClose(): Promise<void>;
52
+ private _getNextBlockForReiteration;
46
53
  /**
47
54
  * Gets the next block from the selected queue.
48
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"feed-set-iterator.d.ts","sourceRoot":"","sources":["../../../src/feed-set-iterator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAA+B,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG,SAAS,CAAC;AAElF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IAEnC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,6BAA6B;;CAEzC,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS,EAAE,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAStE,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,OAAO,EAAE,sBAAsB;IATjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2D;IAEvF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,SAAgB,OAAO,4BAAmC;gBAGvC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAChC,OAAO,GAAE,sBAAsD;IAOjF,CAAC,OAAO,CAAC,MAAM,CAAC;IAIP,MAAM;;;;;IAQf,IAAI,IAAI,WAEP;IAED,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAE5B;IAED,IAAI,OAAO,IAAI,SAAS,EAAE,CAKzB;IAEK,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAsBlC,OAAO,CAAC,OAAO,EAAE,SAAS;IAIX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CA8C/D"}
1
+ {"version":3,"file":"feed-set-iterator.d.ts","sourceRoot":"","sources":["../../../src/feed-set-iterator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAA+B,MAAM,aAAa,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,GAAG,SAAS,CAAC;AAElF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IAEnC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,6BAA6B;;CAEzC,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS,EAAE,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAetE,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,OAAO,EAAE,sBAAsB;IAfjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2D;IAEvF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,SAAgB,OAAO,4BAAmC;IAE1D;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;gBAGpC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAChC,OAAO,GAAE,sBAAsD;IAOjF,CAAC,OAAO,CAAC,MAAM,CAAC;IAIP,MAAM;;;;;IAQf,IAAI,IAAI,WAEP;IAED,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAE5B;IAED,IAAI,OAAO,IAAI,SAAS,EAAE,CAKzB;IAED,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAK5B,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAsBlC,OAAO,CAAC,OAAO,EAAE,SAAS;IAIX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC,OAAO,CAAC,2BAA2B;IAOnC;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CAsD/D"}
@@ -0,0 +1 @@
1
+ {"version":"5.7.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/feed-store",
3
- "version": "0.7.4",
3
+ "version": "0.7.5-feature-compute.4d9d99a",
4
4
  "description": "A consistent store for hypercore feeds.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -37,27 +37,27 @@
37
37
  "lodash.defaultsdeep": "^4.6.1",
38
38
  "race-as-promised": "^0.0.2",
39
39
  "streamx": "^2.12.5",
40
- "@dxos/async": "0.7.4",
41
- "@dxos/context": "0.7.4",
42
- "@dxos/codec-protobuf": "0.7.4",
43
- "@dxos/crypto": "0.7.4",
44
- "@dxos/debug": "0.7.4",
45
- "@dxos/hypercore": "0.7.4",
46
- "@dxos/invariant": "0.7.4",
47
- "@dxos/keyring": "0.7.4",
48
- "@dxos/keys": "0.7.4",
49
- "@dxos/node-std": "0.7.4",
50
- "@dxos/log": "0.7.4",
51
- "@dxos/random-access-storage": "0.7.4",
52
- "@dxos/util": "0.7.4"
40
+ "@dxos/async": "0.7.5-feature-compute.4d9d99a",
41
+ "@dxos/codec-protobuf": "0.7.5-feature-compute.4d9d99a",
42
+ "@dxos/context": "0.7.5-feature-compute.4d9d99a",
43
+ "@dxos/debug": "0.7.5-feature-compute.4d9d99a",
44
+ "@dxos/hypercore": "0.7.5-feature-compute.4d9d99a",
45
+ "@dxos/invariant": "0.7.5-feature-compute.4d9d99a",
46
+ "@dxos/keyring": "0.7.5-feature-compute.4d9d99a",
47
+ "@dxos/keys": "0.7.5-feature-compute.4d9d99a",
48
+ "@dxos/crypto": "0.7.5-feature-compute.4d9d99a",
49
+ "@dxos/node-std": "0.7.5-feature-compute.4d9d99a",
50
+ "@dxos/log": "0.7.5-feature-compute.4d9d99a",
51
+ "@dxos/random-access-storage": "0.7.5-feature-compute.4d9d99a",
52
+ "@dxos/util": "0.7.5-feature-compute.4d9d99a"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@types/lodash.defaultsdeep": "^4.6.6",
56
- "@dxos/random": "0.7.4",
57
- "@dxos/keys": "0.7.4"
56
+ "@dxos/keys": "0.7.5-feature-compute.4d9d99a",
57
+ "@dxos/random": "0.7.5-feature-compute.4d9d99a"
58
58
  },
59
59
  "optionalDependencies": {
60
- "@dxos/random": "0.7.4"
60
+ "@dxos/random": "0.7.5-feature-compute.4d9d99a"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public"
@@ -47,6 +47,12 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
47
47
 
48
48
  public readonly stalled = new Event<FeedSetIterator<T>>();
49
49
 
50
+ /**
51
+ * Blocks to be retried once all feeds are processed or stalled.
52
+ * It is used to retry blocks that failed to be processed.
53
+ */
54
+ private readonly _reiterateBlocks: FeedBlock<T>[] = [];
55
+
50
56
  constructor(
51
57
  private readonly _selector: FeedBlockSelector<T>,
52
58
  public readonly options: FeedSetIteratorOptions = defaultFeedSetIteratorOptions,
@@ -83,6 +89,11 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
83
89
  }));
84
90
  }
85
91
 
92
+ reiterateBlock(block: FeedBlock<T>) {
93
+ this._reiterateBlocks.push(block);
94
+ this._trigger.wake();
95
+ }
96
+
86
97
  async addFeed(feed: FeedWrapper<T>) {
87
98
  invariant(!this._feedQueues.has(feed.key), `Feed already added: ${feed.key}`);
88
99
  invariant(feed.properties.opened);
@@ -123,6 +134,13 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
123
134
  this._trigger.wake();
124
135
  }
125
136
 
137
+ private _getNextBlockForReiteration() {
138
+ const block = this._reiterateBlocks.shift();
139
+ invariant(block);
140
+ log('reiterate', { key: block?.feedKey.toHex(), seq: block?.seq });
141
+ return block;
142
+ }
143
+
126
144
  /**
127
145
  * Gets the next block from the selected queue.
128
146
  */
@@ -130,6 +148,7 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
130
148
  let t: NodeJS.Timeout | undefined;
131
149
 
132
150
  while (this._running) {
151
+ let stalled = false;
133
152
  // Get blocks from the head of each queue.
134
153
  const queues = Array.from(this._feedQueues.values());
135
154
  const blocks = queues.map((queue) => queue.peek()).filter(isNotNullOrUndefined);
@@ -142,6 +161,8 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
142
161
  if (t === undefined) {
143
162
  t = setTimeout(() => {
144
163
  this.stalled.emit(this);
164
+ this._trigger.wake();
165
+ stalled = true;
145
166
  }, this.options.stallTimeout);
146
167
  }
147
168
  } else {
@@ -166,10 +187,15 @@ export class FeedSetIterator<T extends {}> extends AbstractFeedIterator<T> {
166
187
  // console.log(Array.from(this._feedQueues.values()));
167
188
  }
168
189
  }
190
+ } else if (this._reiterateBlocks.length) {
191
+ return this._getNextBlockForReiteration();
169
192
  }
170
193
 
171
194
  // Wait until feed added, new block, or closing.
172
195
  await this._trigger.wait();
196
+ if (stalled && this._reiterateBlocks.length) {
197
+ return this._getNextBlockForReiteration();
198
+ }
173
199
  }
174
200
  }
175
201
  }