gitx.do 0.0.2 → 0.0.3
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.
- package/dist/cli/commands/blame.d.ts +259 -0
- package/dist/cli/commands/blame.d.ts.map +1 -0
- package/dist/cli/commands/blame.js +609 -0
- package/dist/cli/commands/blame.js.map +1 -0
- package/dist/cli/commands/branch.d.ts +249 -0
- package/dist/cli/commands/branch.d.ts.map +1 -0
- package/dist/cli/commands/branch.js +693 -0
- package/dist/cli/commands/branch.js.map +1 -0
- package/dist/cli/commands/commit.d.ts +182 -0
- package/dist/cli/commands/commit.d.ts.map +1 -0
- package/dist/cli/commands/commit.js +437 -0
- package/dist/cli/commands/commit.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +464 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +958 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/log.d.ts +239 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +535 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/review.d.ts +457 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +533 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/status.d.ts +269 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +493 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/web.d.ts +199 -0
- package/dist/cli/commands/web.d.ts.map +1 -0
- package/dist/cli/commands/web.js +696 -0
- package/dist/cli/commands/web.js.map +1 -0
- package/dist/cli/fs-adapter.d.ts +656 -0
- package/dist/cli/fs-adapter.d.ts.map +1 -0
- package/dist/cli/fs-adapter.js +1179 -0
- package/dist/cli/fs-adapter.js.map +1 -0
- package/dist/cli/index.d.ts +387 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +523 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/components/DiffView.d.ts +7 -0
- package/dist/cli/ui/components/DiffView.d.ts.map +1 -0
- package/dist/cli/ui/components/DiffView.js +11 -0
- package/dist/cli/ui/components/DiffView.js.map +1 -0
- package/dist/cli/ui/components/ErrorDisplay.d.ts +6 -0
- package/dist/cli/ui/components/ErrorDisplay.d.ts.map +1 -0
- package/dist/cli/ui/components/ErrorDisplay.js +11 -0
- package/dist/cli/ui/components/ErrorDisplay.js.map +1 -0
- package/dist/cli/ui/components/FuzzySearch.d.ts +9 -0
- package/dist/cli/ui/components/FuzzySearch.d.ts.map +1 -0
- package/dist/cli/ui/components/FuzzySearch.js +12 -0
- package/dist/cli/ui/components/FuzzySearch.js.map +1 -0
- package/dist/cli/ui/components/LoadingSpinner.d.ts +6 -0
- package/dist/cli/ui/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/cli/ui/components/LoadingSpinner.js +10 -0
- package/dist/cli/ui/components/LoadingSpinner.js.map +1 -0
- package/dist/cli/ui/components/NavigationList.d.ts +9 -0
- package/dist/cli/ui/components/NavigationList.d.ts.map +1 -0
- package/dist/cli/ui/components/NavigationList.js +11 -0
- package/dist/cli/ui/components/NavigationList.js.map +1 -0
- package/dist/cli/ui/components/ScrollableContent.d.ts +8 -0
- package/dist/cli/ui/components/ScrollableContent.d.ts.map +1 -0
- package/dist/cli/ui/components/ScrollableContent.js +11 -0
- package/dist/cli/ui/components/ScrollableContent.js.map +1 -0
- package/dist/cli/ui/components/index.d.ts +7 -0
- package/dist/cli/ui/components/index.d.ts.map +1 -0
- package/dist/cli/ui/components/index.js +9 -0
- package/dist/cli/ui/components/index.js.map +1 -0
- package/dist/cli/ui/terminal-ui.d.ts +52 -0
- package/dist/cli/ui/terminal-ui.d.ts.map +1 -0
- package/dist/cli/ui/terminal-ui.js +121 -0
- package/dist/cli/ui/terminal-ui.js.map +1 -0
- package/dist/durable-object/object-store.d.ts +401 -23
- package/dist/durable-object/object-store.d.ts.map +1 -1
- package/dist/durable-object/object-store.js +414 -25
- package/dist/durable-object/object-store.js.map +1 -1
- package/dist/durable-object/schema.d.ts +188 -0
- package/dist/durable-object/schema.d.ts.map +1 -1
- package/dist/durable-object/schema.js +160 -0
- package/dist/durable-object/schema.js.map +1 -1
- package/dist/durable-object/wal.d.ts +336 -31
- package/dist/durable-object/wal.d.ts.map +1 -1
- package/dist/durable-object/wal.js +272 -27
- package/dist/durable-object/wal.js.map +1 -1
- package/dist/index.d.ts +379 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +379 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/adapter.d.ts +579 -38
- package/dist/mcp/adapter.d.ts.map +1 -1
- package/dist/mcp/adapter.js +426 -33
- package/dist/mcp/adapter.js.map +1 -1
- package/dist/mcp/sandbox.d.ts +532 -29
- package/dist/mcp/sandbox.d.ts.map +1 -1
- package/dist/mcp/sandbox.js +389 -22
- package/dist/mcp/sandbox.js.map +1 -1
- package/dist/mcp/sdk-adapter.d.ts +478 -56
- package/dist/mcp/sdk-adapter.d.ts.map +1 -1
- package/dist/mcp/sdk-adapter.js +346 -44
- package/dist/mcp/sdk-adapter.js.map +1 -1
- package/dist/mcp/tools.d.ts +445 -30
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +363 -33
- package/dist/mcp/tools.js.map +1 -1
- package/dist/ops/blame.d.ts +424 -21
- package/dist/ops/blame.d.ts.map +1 -1
- package/dist/ops/blame.js +303 -20
- package/dist/ops/blame.js.map +1 -1
- package/dist/ops/branch.d.ts +583 -32
- package/dist/ops/branch.d.ts.map +1 -1
- package/dist/ops/branch.js +365 -23
- package/dist/ops/branch.js.map +1 -1
- package/dist/ops/commit-traversal.d.ts +164 -24
- package/dist/ops/commit-traversal.d.ts.map +1 -1
- package/dist/ops/commit-traversal.js +68 -2
- package/dist/ops/commit-traversal.js.map +1 -1
- package/dist/ops/commit.d.ts +387 -53
- package/dist/ops/commit.d.ts.map +1 -1
- package/dist/ops/commit.js +249 -29
- package/dist/ops/commit.js.map +1 -1
- package/dist/ops/merge-base.d.ts +195 -21
- package/dist/ops/merge-base.d.ts.map +1 -1
- package/dist/ops/merge-base.js +122 -12
- package/dist/ops/merge-base.js.map +1 -1
- package/dist/ops/merge.d.ts +600 -130
- package/dist/ops/merge.d.ts.map +1 -1
- package/dist/ops/merge.js +408 -60
- package/dist/ops/merge.js.map +1 -1
- package/dist/ops/tag.d.ts +67 -2
- package/dist/ops/tag.d.ts.map +1 -1
- package/dist/ops/tag.js +42 -1
- package/dist/ops/tag.js.map +1 -1
- package/dist/ops/tree-builder.d.ts +102 -6
- package/dist/ops/tree-builder.d.ts.map +1 -1
- package/dist/ops/tree-builder.js +30 -5
- package/dist/ops/tree-builder.js.map +1 -1
- package/dist/ops/tree-diff.d.ts +50 -2
- package/dist/ops/tree-diff.d.ts.map +1 -1
- package/dist/ops/tree-diff.js +50 -2
- package/dist/ops/tree-diff.js.map +1 -1
- package/dist/pack/delta.d.ts +211 -39
- package/dist/pack/delta.d.ts.map +1 -1
- package/dist/pack/delta.js +232 -46
- package/dist/pack/delta.js.map +1 -1
- package/dist/pack/format.d.ts +390 -28
- package/dist/pack/format.d.ts.map +1 -1
- package/dist/pack/format.js +344 -33
- package/dist/pack/format.js.map +1 -1
- package/dist/pack/full-generation.d.ts +313 -28
- package/dist/pack/full-generation.d.ts.map +1 -1
- package/dist/pack/full-generation.js +238 -19
- package/dist/pack/full-generation.js.map +1 -1
- package/dist/pack/generation.d.ts +346 -23
- package/dist/pack/generation.d.ts.map +1 -1
- package/dist/pack/generation.js +269 -21
- package/dist/pack/generation.js.map +1 -1
- package/dist/pack/index.d.ts +407 -86
- package/dist/pack/index.d.ts.map +1 -1
- package/dist/pack/index.js +351 -70
- package/dist/pack/index.js.map +1 -1
- package/dist/refs/branch.d.ts +517 -71
- package/dist/refs/branch.d.ts.map +1 -1
- package/dist/refs/branch.js +410 -26
- package/dist/refs/branch.js.map +1 -1
- package/dist/refs/storage.d.ts +610 -57
- package/dist/refs/storage.d.ts.map +1 -1
- package/dist/refs/storage.js +481 -29
- package/dist/refs/storage.js.map +1 -1
- package/dist/refs/tag.d.ts +677 -67
- package/dist/refs/tag.d.ts.map +1 -1
- package/dist/refs/tag.js +497 -30
- package/dist/refs/tag.js.map +1 -1
- package/dist/storage/lru-cache.d.ts +556 -53
- package/dist/storage/lru-cache.d.ts.map +1 -1
- package/dist/storage/lru-cache.js +439 -36
- package/dist/storage/lru-cache.js.map +1 -1
- package/dist/storage/object-index.d.ts +483 -38
- package/dist/storage/object-index.d.ts.map +1 -1
- package/dist/storage/object-index.js +388 -22
- package/dist/storage/object-index.js.map +1 -1
- package/dist/storage/r2-pack.d.ts +957 -94
- package/dist/storage/r2-pack.d.ts.map +1 -1
- package/dist/storage/r2-pack.js +756 -48
- package/dist/storage/r2-pack.js.map +1 -1
- package/dist/tiered/cdc-pipeline.d.ts +1610 -38
- package/dist/tiered/cdc-pipeline.d.ts.map +1 -1
- package/dist/tiered/cdc-pipeline.js +1131 -22
- package/dist/tiered/cdc-pipeline.js.map +1 -1
- package/dist/tiered/migration.d.ts +903 -41
- package/dist/tiered/migration.d.ts.map +1 -1
- package/dist/tiered/migration.js +646 -24
- package/dist/tiered/migration.js.map +1 -1
- package/dist/tiered/parquet-writer.d.ts +944 -47
- package/dist/tiered/parquet-writer.d.ts.map +1 -1
- package/dist/tiered/parquet-writer.js +667 -39
- package/dist/tiered/parquet-writer.js.map +1 -1
- package/dist/tiered/read-path.d.ts +728 -34
- package/dist/tiered/read-path.d.ts.map +1 -1
- package/dist/tiered/read-path.js +310 -27
- package/dist/tiered/read-path.js.map +1 -1
- package/dist/types/objects.d.ts +457 -0
- package/dist/types/objects.d.ts.map +1 -1
- package/dist/types/objects.js +305 -4
- package/dist/types/objects.js.map +1 -1
- package/dist/types/storage.d.ts +407 -35
- package/dist/types/storage.d.ts.map +1 -1
- package/dist/types/storage.js +27 -3
- package/dist/types/storage.js.map +1 -1
- package/dist/utils/hash.d.ts +133 -12
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js +133 -12
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/sha1.d.ts +102 -9
- package/dist/utils/sha1.d.ts.map +1 -1
- package/dist/utils/sha1.js +114 -11
- package/dist/utils/sha1.js.map +1 -1
- package/dist/wire/capabilities.d.ts +896 -88
- package/dist/wire/capabilities.d.ts.map +1 -1
- package/dist/wire/capabilities.js +566 -62
- package/dist/wire/capabilities.js.map +1 -1
- package/dist/wire/pkt-line.d.ts +293 -15
- package/dist/wire/pkt-line.d.ts.map +1 -1
- package/dist/wire/pkt-line.js +251 -15
- package/dist/wire/pkt-line.js.map +1 -1
- package/dist/wire/receive-pack.d.ts +814 -64
- package/dist/wire/receive-pack.d.ts.map +1 -1
- package/dist/wire/receive-pack.js +542 -41
- package/dist/wire/receive-pack.js.map +1 -1
- package/dist/wire/smart-http.d.ts +575 -97
- package/dist/wire/smart-http.d.ts.map +1 -1
- package/dist/wire/smart-http.js +337 -46
- package/dist/wire/smart-http.js.map +1 -1
- package/dist/wire/upload-pack.d.ts +492 -98
- package/dist/wire/upload-pack.d.ts.map +1 -1
- package/dist/wire/upload-pack.js +347 -59
- package/dist/wire/upload-pack.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-path.d.ts","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"read-path.d.ts","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"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"}
|
package/dist/tiered/read-path.js
CHANGED
|
@@ -1,20 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tiered Read Path
|
|
2
|
+
* @fileoverview Tiered Read Path Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* @description
|
|
5
|
+
* Implements reading objects from a multi-tier storage system designed for
|
|
6
|
+
* Git object storage. The tiered approach optimizes for both performance and
|
|
7
|
+
* cost by organizing data across multiple storage layers with different
|
|
8
|
+
* characteristics:
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
10
|
+
* **Storage Tiers:**
|
|
11
|
+
* - **Hot tier**: Durable Object SQLite (fastest, local, highest cost)
|
|
12
|
+
* - **Warm tier**: R2 object storage (medium latency, packed objects)
|
|
13
|
+
* - **Cold tier**: Analytics/Parquet (highest latency, lowest cost)
|
|
13
14
|
*
|
|
14
|
-
*
|
|
15
|
+
* **Features:**
|
|
16
|
+
* - Automatic tier fallback on cache miss
|
|
17
|
+
* - Read-through caching with promotion to hotter tiers
|
|
18
|
+
* - Configurable promotion policies (aggressive, conservative, none)
|
|
19
|
+
* - Latency tracking for performance monitoring
|
|
20
|
+
*
|
|
21
|
+
* **Architecture:**
|
|
22
|
+
* The TieredReader orchestrates reads across all tiers, attempting to serve
|
|
23
|
+
* data from the fastest available tier while optionally promoting frequently
|
|
24
|
+
* accessed objects to faster tiers.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Create a tiered reader with all backends
|
|
29
|
+
* const reader = new TieredReader(
|
|
30
|
+
* hotBackend,
|
|
31
|
+
* warmBackend,
|
|
32
|
+
* coldBackend,
|
|
33
|
+
* {
|
|
34
|
+
* hot: { enabled: true, maxSize: 1024 * 1024 },
|
|
35
|
+
* warm: { enabled: true },
|
|
36
|
+
* cold: { enabled: true },
|
|
37
|
+
* promotionPolicy: 'aggressive'
|
|
38
|
+
* }
|
|
39
|
+
* )
|
|
40
|
+
*
|
|
41
|
+
* // Read an object - will try hot -> warm -> cold
|
|
42
|
+
* const result = await reader.read('abc123...')
|
|
43
|
+
* if (result.object) {
|
|
44
|
+
* console.log(`Found in ${result.tier} tier`)
|
|
45
|
+
* console.log(`Latency: ${result.latencyMs}ms`)
|
|
46
|
+
* if (result.promoted) {
|
|
47
|
+
* console.log('Object was promoted to hot tier')
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @module tiered/read-path
|
|
53
|
+
* @see {@link TieredReader} - Main implementation class
|
|
54
|
+
* @see {@link TieredStorageConfig} - Configuration options
|
|
15
55
|
*/
|
|
16
56
|
/**
|
|
17
|
-
* Validates a SHA-1 hash
|
|
57
|
+
* Validates a SHA-1 hash string.
|
|
58
|
+
*
|
|
59
|
+
* @description
|
|
60
|
+
* Checks that the provided string is a valid 40-character hexadecimal
|
|
61
|
+
* SHA-1 hash. Used internally to validate input before querying storage.
|
|
62
|
+
*
|
|
63
|
+
* @param sha - The string to validate
|
|
64
|
+
* @returns true if the string is a valid SHA-1 hash, false otherwise
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* isValidSha('abc123') // false - too short
|
|
69
|
+
* isValidSha('a1b2c3d4e5f678901234567890abcdef12345678') // true
|
|
70
|
+
* isValidSha('xyz123...') // false - invalid characters
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
18
74
|
*/
|
|
19
75
|
function isValidSha(sha) {
|
|
20
76
|
if (!sha || sha.length !== 40) {
|
|
@@ -23,16 +79,122 @@ function isValidSha(sha) {
|
|
|
23
79
|
return /^[0-9a-f]{40}$/i.test(sha);
|
|
24
80
|
}
|
|
25
81
|
/**
|
|
26
|
-
* TieredReader - Main implementation of the tiered read path
|
|
82
|
+
* TieredReader - Main implementation of the tiered read path.
|
|
83
|
+
*
|
|
84
|
+
* @description
|
|
85
|
+
* TieredReader orchestrates reads across multiple storage tiers (hot, warm, cold),
|
|
86
|
+
* implementing automatic fallback and optional promotion to hotter tiers. It provides
|
|
87
|
+
* a unified interface for reading Git objects regardless of which tier they reside in.
|
|
88
|
+
*
|
|
89
|
+
* **Read Algorithm:**
|
|
90
|
+
* 1. Validate the SHA-1 hash
|
|
91
|
+
* 2. If hot tier enabled, attempt to read from hot tier
|
|
92
|
+
* 3. If not found and warm tier enabled, attempt warm tier
|
|
93
|
+
* 4. If not found and cold tier enabled, attempt cold tier
|
|
94
|
+
* 5. If found in warm/cold, optionally promote to hot tier
|
|
95
|
+
* 6. Return result with object, source tier, and metrics
|
|
96
|
+
*
|
|
97
|
+
* **Promotion Policies:**
|
|
98
|
+
* - `aggressive`: Immediately promote any object read from warm/cold to hot
|
|
99
|
+
* - `conservative`: Reserved for future implementation (repeated access tracking)
|
|
100
|
+
* - `none`: Never automatically promote objects
|
|
101
|
+
*
|
|
102
|
+
* **Error Handling:**
|
|
103
|
+
* Individual tier failures are silently caught and the next tier is tried.
|
|
104
|
+
* This ensures graceful degradation when a tier is temporarily unavailable.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* // Create backends for each tier
|
|
109
|
+
* const hotBackend = new SqliteHotBackend(db)
|
|
110
|
+
* const warmBackend = new R2WarmBackend(r2)
|
|
111
|
+
* const coldBackend = new ParquetColdBackend(parquet)
|
|
112
|
+
*
|
|
113
|
+
* // Configure the tiered storage
|
|
114
|
+
* const config: TieredStorageConfig = {
|
|
115
|
+
* hot: { enabled: true, maxSize: 1024 * 1024 },
|
|
116
|
+
* warm: { enabled: true },
|
|
117
|
+
* cold: { enabled: true },
|
|
118
|
+
* promotionPolicy: 'aggressive'
|
|
119
|
+
* }
|
|
27
120
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
121
|
+
* // Create the reader
|
|
122
|
+
* const reader = new TieredReader(hotBackend, warmBackend, coldBackend, config)
|
|
123
|
+
*
|
|
124
|
+
* // Read an object
|
|
125
|
+
* const result = await reader.read('a1b2c3d4e5f678901234567890abcdef12345678')
|
|
126
|
+
*
|
|
127
|
+
* if (result.object) {
|
|
128
|
+
* console.log(`Object type: ${result.object.type}`)
|
|
129
|
+
* console.log(`Size: ${result.object.size} bytes`)
|
|
130
|
+
* console.log(`Served from: ${result.tier} tier`)
|
|
131
|
+
* console.log(`Latency: ${result.latencyMs}ms`)
|
|
132
|
+
*
|
|
133
|
+
* if (result.promoted) {
|
|
134
|
+
* console.log('Object was promoted to hot tier')
|
|
135
|
+
* }
|
|
136
|
+
* } else {
|
|
137
|
+
* console.log('Object not found in any tier')
|
|
138
|
+
* }
|
|
139
|
+
*
|
|
140
|
+
* // Direct tier access
|
|
141
|
+
* const hotOnly = await reader.readFromHot(sha)
|
|
142
|
+
* const warmOnly = await reader.readFromWarm(sha)
|
|
143
|
+
* const coldOnly = await reader.readFromCold(sha)
|
|
144
|
+
*
|
|
145
|
+
* // Manual promotion
|
|
146
|
+
* if (warmOnly) {
|
|
147
|
+
* await reader.promoteToHot(sha, warmOnly)
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* @class TieredReader
|
|
152
|
+
* @implements {TieredObjectStore}
|
|
30
153
|
*/
|
|
31
154
|
export class TieredReader {
|
|
155
|
+
/**
|
|
156
|
+
* Backend for the hot storage tier (Durable Object SQLite).
|
|
157
|
+
* @private
|
|
158
|
+
*/
|
|
32
159
|
hotBackend;
|
|
160
|
+
/**
|
|
161
|
+
* Backend for the warm storage tier (R2 object storage).
|
|
162
|
+
* @private
|
|
163
|
+
*/
|
|
33
164
|
warmBackend;
|
|
165
|
+
/**
|
|
166
|
+
* Backend for the cold storage tier (Analytics/Parquet).
|
|
167
|
+
* @private
|
|
168
|
+
*/
|
|
34
169
|
coldBackend;
|
|
170
|
+
/**
|
|
171
|
+
* Configuration for all tiers and promotion policy.
|
|
172
|
+
* @private
|
|
173
|
+
*/
|
|
35
174
|
config;
|
|
175
|
+
/**
|
|
176
|
+
* Creates a new TieredReader instance.
|
|
177
|
+
*
|
|
178
|
+
* @param hotBackend - Backend for the hot tier (Durable Object SQLite)
|
|
179
|
+
* @param warmBackend - Backend for the warm tier (R2)
|
|
180
|
+
* @param coldBackend - Backend for the cold tier (Parquet)
|
|
181
|
+
* @param config - Configuration for all tiers and promotion policy
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* const reader = new TieredReader(
|
|
186
|
+
* hotBackend,
|
|
187
|
+
* warmBackend,
|
|
188
|
+
* coldBackend,
|
|
189
|
+
* {
|
|
190
|
+
* hot: { enabled: true, maxSize: 1024 * 1024 },
|
|
191
|
+
* warm: { enabled: true },
|
|
192
|
+
* cold: { enabled: true },
|
|
193
|
+
* promotionPolicy: 'aggressive'
|
|
194
|
+
* }
|
|
195
|
+
* )
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
36
198
|
constructor(hotBackend, warmBackend, coldBackend, config) {
|
|
37
199
|
this.hotBackend = hotBackend;
|
|
38
200
|
this.warmBackend = warmBackend;
|
|
@@ -40,10 +202,39 @@ export class TieredReader {
|
|
|
40
202
|
this.config = config;
|
|
41
203
|
}
|
|
42
204
|
/**
|
|
43
|
-
*
|
|
205
|
+
* Reads an object from the tiered storage system.
|
|
206
|
+
*
|
|
207
|
+
* @description
|
|
208
|
+
* Attempts to read the object from each enabled tier in order
|
|
209
|
+
* (hot -> warm -> cold), returning as soon as the object is found.
|
|
210
|
+
* Objects found in warm or cold tiers may be promoted to hot tier
|
|
211
|
+
* based on the configured promotion policy.
|
|
212
|
+
*
|
|
213
|
+
* **Invalid SHA Handling:**
|
|
214
|
+
* If the SHA is invalid (not 40 hex characters), returns immediately
|
|
215
|
+
* with null object and no tier lookup is performed.
|
|
44
216
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
217
|
+
* **Error Handling:**
|
|
218
|
+
* If a tier fails (throws an error), the error is caught silently
|
|
219
|
+
* and the next tier is attempted. This provides graceful degradation.
|
|
220
|
+
*
|
|
221
|
+
* @param sha - The 40-character SHA-1 hash of the object to read
|
|
222
|
+
* @returns Promise resolving to the read result with object, tier, and metrics
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const result = await reader.read('a1b2c3d4e5f678901234567890abcdef12345678')
|
|
227
|
+
*
|
|
228
|
+
* if (result.object) {
|
|
229
|
+
* // Object found
|
|
230
|
+
* console.log(`Type: ${result.object.type}`)
|
|
231
|
+
* console.log(`Tier: ${result.tier}`)
|
|
232
|
+
* console.log(`Promoted: ${result.promoted}`)
|
|
233
|
+
* } else {
|
|
234
|
+
* // Object not found
|
|
235
|
+
* console.log(`Search took ${result.latencyMs}ms`)
|
|
236
|
+
* }
|
|
237
|
+
* ```
|
|
47
238
|
*/
|
|
48
239
|
async read(sha) {
|
|
49
240
|
const startTime = performance.now();
|
|
@@ -118,7 +309,25 @@ export class TieredReader {
|
|
|
118
309
|
};
|
|
119
310
|
}
|
|
120
311
|
/**
|
|
121
|
-
*
|
|
312
|
+
* Reads an object directly from the hot tier only.
|
|
313
|
+
*
|
|
314
|
+
* @description
|
|
315
|
+
* Bypasses the tier fallback logic to read directly from the hot tier.
|
|
316
|
+
* Useful for checking if an object is already in the hot cache.
|
|
317
|
+
* Errors are caught and null is returned.
|
|
318
|
+
*
|
|
319
|
+
* @param sha - The 40-character SHA-1 hash of the object
|
|
320
|
+
* @returns Promise resolving to the object or null if not in hot tier
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* const cached = await reader.readFromHot(sha)
|
|
325
|
+
* if (cached) {
|
|
326
|
+
* console.log('Object is in hot cache')
|
|
327
|
+
* } else {
|
|
328
|
+
* console.log('Object not in hot cache')
|
|
329
|
+
* }
|
|
330
|
+
* ```
|
|
122
331
|
*/
|
|
123
332
|
async readFromHot(sha) {
|
|
124
333
|
try {
|
|
@@ -129,7 +338,24 @@ export class TieredReader {
|
|
|
129
338
|
}
|
|
130
339
|
}
|
|
131
340
|
/**
|
|
132
|
-
*
|
|
341
|
+
* Reads an object directly from the warm tier only.
|
|
342
|
+
*
|
|
343
|
+
* @description
|
|
344
|
+
* Bypasses the tier fallback logic to read directly from the warm tier.
|
|
345
|
+
* Does not trigger automatic promotion to hot tier.
|
|
346
|
+
* Errors are caught and null is returned.
|
|
347
|
+
*
|
|
348
|
+
* @param sha - The 40-character SHA-1 hash of the object
|
|
349
|
+
* @returns Promise resolving to the object or null if not in warm tier
|
|
350
|
+
*
|
|
351
|
+
* @example
|
|
352
|
+
* ```typescript
|
|
353
|
+
* const warm = await reader.readFromWarm(sha)
|
|
354
|
+
* if (warm) {
|
|
355
|
+
* // Manually promote if desired
|
|
356
|
+
* await reader.promoteToHot(sha, warm)
|
|
357
|
+
* }
|
|
358
|
+
* ```
|
|
133
359
|
*/
|
|
134
360
|
async readFromWarm(sha) {
|
|
135
361
|
try {
|
|
@@ -140,7 +366,23 @@ export class TieredReader {
|
|
|
140
366
|
}
|
|
141
367
|
}
|
|
142
368
|
/**
|
|
143
|
-
*
|
|
369
|
+
* Reads an object directly from the cold tier only.
|
|
370
|
+
*
|
|
371
|
+
* @description
|
|
372
|
+
* Bypasses the tier fallback logic to read directly from the cold tier.
|
|
373
|
+
* Does not trigger automatic promotion to hotter tiers.
|
|
374
|
+
* Errors are caught and null is returned.
|
|
375
|
+
*
|
|
376
|
+
* @param sha - The 40-character SHA-1 hash of the object
|
|
377
|
+
* @returns Promise resolving to the object or null if not in cold tier
|
|
378
|
+
*
|
|
379
|
+
* @example
|
|
380
|
+
* ```typescript
|
|
381
|
+
* const cold = await reader.readFromCold(sha)
|
|
382
|
+
* if (cold) {
|
|
383
|
+
* console.log(`Found in cold storage, created at: ${cold.createdAt}`)
|
|
384
|
+
* }
|
|
385
|
+
* ```
|
|
144
386
|
*/
|
|
145
387
|
async readFromCold(sha) {
|
|
146
388
|
try {
|
|
@@ -151,24 +393,65 @@ export class TieredReader {
|
|
|
151
393
|
}
|
|
152
394
|
}
|
|
153
395
|
/**
|
|
154
|
-
* Manually
|
|
396
|
+
* Manually promotes an object to the hot tier.
|
|
397
|
+
*
|
|
398
|
+
* @description
|
|
399
|
+
* Copies the provided object to the hot tier storage. This is useful for
|
|
400
|
+
* pre-warming the cache or manually controlling tier placement. No size
|
|
401
|
+
* or policy checks are performed - the object is always written.
|
|
402
|
+
*
|
|
403
|
+
* @param sha - The 40-character SHA-1 hash of the object
|
|
404
|
+
* @param object - The complete stored object to promote
|
|
405
|
+
* @returns Promise that resolves when promotion is complete
|
|
406
|
+
* @throws Error if the hot tier write fails
|
|
407
|
+
*
|
|
408
|
+
* @example
|
|
409
|
+
* ```typescript
|
|
410
|
+
* // Pre-warm the hot cache
|
|
411
|
+
* const objects = await reader.query({ type: 'commit' })
|
|
412
|
+
* for (const obj of objects) {
|
|
413
|
+
* await reader.promoteToHot(obj.sha, obj)
|
|
414
|
+
* }
|
|
415
|
+
* ```
|
|
155
416
|
*/
|
|
156
417
|
async promoteToHot(sha, object) {
|
|
157
418
|
await this.hotBackend.put(sha, object);
|
|
158
419
|
}
|
|
159
420
|
/**
|
|
160
|
-
*
|
|
421
|
+
* Returns the current storage configuration.
|
|
422
|
+
*
|
|
423
|
+
* @description
|
|
424
|
+
* Returns the configuration object passed to the constructor.
|
|
425
|
+
* Useful for inspecting current settings or debugging.
|
|
426
|
+
*
|
|
427
|
+
* @returns The tiered storage configuration
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```typescript
|
|
431
|
+
* const config = reader.getConfig()
|
|
432
|
+
* console.log(`Promotion policy: ${config.promotionPolicy}`)
|
|
433
|
+
* console.log(`Hot tier enabled: ${config.hot.enabled}`)
|
|
434
|
+
* ```
|
|
161
435
|
*/
|
|
162
436
|
getConfig() {
|
|
163
437
|
return this.config;
|
|
164
438
|
}
|
|
165
439
|
/**
|
|
166
|
-
*
|
|
440
|
+
* Attempts to promote an object to the hot tier based on policy.
|
|
441
|
+
*
|
|
442
|
+
* @description
|
|
443
|
+
* Called internally when an object is found in warm or cold tier.
|
|
444
|
+
* Decides whether to promote based on:
|
|
445
|
+
* 1. Hot tier being enabled
|
|
446
|
+
* 2. Promotion policy (aggressive promotes, conservative/none don't)
|
|
447
|
+
* 3. Object size being within hot tier's maxSize limit
|
|
448
|
+
*
|
|
449
|
+
* @param sha - The object's SHA-1 hash
|
|
450
|
+
* @param object - The object to potentially promote
|
|
451
|
+
* @param _sourceTier - The tier the object was read from (for future use)
|
|
452
|
+
* @returns true if promotion was successful, false otherwise
|
|
167
453
|
*
|
|
168
|
-
* @
|
|
169
|
-
* @param object - The object to promote
|
|
170
|
-
* @param sourceTier - The tier the object was read from
|
|
171
|
-
* @returns true if promotion was successful
|
|
454
|
+
* @private
|
|
172
455
|
*/
|
|
173
456
|
async tryPromote(sha, object, _sourceTier) {
|
|
174
457
|
// Check if hot tier is enabled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-path.js","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"read-path.js","sourceRoot":"","sources":["../../src/tiered/read-path.ts"],"names":[],"mappings":"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"}
|