hypercore 10.37.25 → 10.37.27

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.
Files changed (2) hide show
  1. package/lib/replicator.js +19 -4
  2. package/package.json +1 -1
package/lib/replicator.js CHANGED
@@ -38,6 +38,8 @@ const DEFAULT_SEGMENT_SIZE = 256 * 1024 * 8 // 256 KiB in bits
38
38
  const NOT_DOWNLOADING_SLACK = 20000 + (Math.random() * 20000) | 0
39
39
  const MAX_PEERS_UPGRADE = 3
40
40
 
41
+ const MAX_RANGES = 64
42
+
41
43
  const PRIORITY = {
42
44
  NORMAL: 0,
43
45
  HIGH: 1,
@@ -1623,11 +1625,18 @@ module.exports = class Replicator {
1623
1625
 
1624
1626
  const ref = r.attach(session)
1625
1627
 
1626
- this._ranges.push(r)
1627
-
1628
1628
  // Trigger this to see if this is already resolved...
1629
1629
  // Also auto compresses the range based on local bitfield
1630
- this._updateNonPrimary(true)
1630
+ clampRange(this.core, r)
1631
+
1632
+ this._ranges.push(r)
1633
+
1634
+ if (r.end !== -1 && r.start >= r.end) {
1635
+ this._resolveRangeRequest(r, this._ranges.length - 1)
1636
+ return ref
1637
+ }
1638
+
1639
+ this.updateAll()
1631
1640
 
1632
1641
  return ref
1633
1642
  }
@@ -1899,13 +1908,17 @@ module.exports = class Replicator {
1899
1908
  async _updateNonPrimary (updateAll) {
1900
1909
  // Check if running, if so skip it and the running one will issue another update for us (debounce)
1901
1910
  while (++this._updatesPending === 1) {
1902
- for (let i = 0; i < this._ranges.length; i++) {
1911
+ let len = Math.min(MAX_RANGES, this._ranges.length)
1912
+
1913
+ for (let i = 0; i < len; i++) {
1903
1914
  const r = this._ranges[i]
1904
1915
 
1905
1916
  clampRange(this.core, r)
1906
1917
 
1907
1918
  if (r.end !== -1 && r.start >= r.end) {
1908
1919
  this._resolveRangeRequest(r, i--)
1920
+ if (len > this._ranges.length) len--
1921
+ if (this._ranges.length === MAX_RANGES) updateAll = true
1909
1922
  }
1910
1923
  }
1911
1924
 
@@ -2187,11 +2200,13 @@ module.exports = class Replicator {
2187
2200
  }
2188
2201
 
2189
2202
  const ranges = new RandomIterator(this._ranges)
2203
+ let tried = 0
2190
2204
 
2191
2205
  for (const r of ranges) {
2192
2206
  if (peer._requestRange(r) === true) {
2193
2207
  return true
2194
2208
  }
2209
+ if (++tried >= MAX_RANGES) break
2195
2210
  }
2196
2211
 
2197
2212
  // Iterate from newest fork to oldest fork...
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hypercore",
3
- "version": "10.37.25",
3
+ "version": "10.37.27",
4
4
  "description": "Hypercore is a secure, distributed append-only log",
5
5
  "main": "index.js",
6
6
  "scripts": {