Skip to content

Commit 22bddef

Browse files
committed
instrument de/compression
1 parent 8e6eec2 commit 22bddef

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/local-storage-engine.ts

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,18 @@ export class LocalStorageEngine implements IStringStorageEngine {
4444
if (!stored) return null;
4545

4646
try {
47-
return LZString.decompressFromBase64(stored) || null;
47+
const decompressed = LZString.decompressFromBase64(stored);
48+
if (decompressed) {
49+
console.log(
50+
`[Eppo LocalStorage] Successfully decompressed configuration: ${stored.length}${decompressed.length} bytes`,
51+
);
52+
}
53+
return decompressed || null;
4854
} catch (e) {
55+
console.warn(
56+
'[Eppo LocalStorage] Failed to decompress configuration, removing corrupted data:',
57+
e,
58+
);
4959
// Failed to decompress configuration, removing corrupted data
5060
this.localStorage.removeItem(this.contentsKey);
5161
return null;
@@ -61,7 +71,15 @@ export class LocalStorageEngine implements IStringStorageEngine {
6171
* @throws LocalStorageUnknownFailure
6272
*/
6373
public setContentsJsonString = async (configurationJsonString: string): Promise<void> => {
74+
const originalSize = configurationJsonString.length;
6475
const compressed = LZString.compressToBase64(configurationJsonString);
76+
const compressedSize = compressed.length;
77+
const compressionRatio = (((originalSize - compressedSize) / originalSize) * 100).toFixed(1);
78+
79+
console.log(
80+
`[Eppo LocalStorage] Compressing configuration data: ${originalSize}${compressedSize} bytes (${compressionRatio}% reduction)`,
81+
);
82+
6583
this.safeWrite(this.contentsKey, compressed);
6684
};
6785

@@ -84,18 +102,27 @@ export class LocalStorageEngine implements IStringStorageEngine {
84102
if (error instanceof DOMException) {
85103
// Check for quota exceeded error
86104
if (error.code === DOMException.QUOTA_EXCEEDED_ERR || error.name === 'QuotaExceededError') {
105+
console.log('[Eppo LocalStorage] Quota exceeded, clearing old data and retrying...');
87106
try {
88107
this.clear();
108+
console.log(
109+
'[Eppo LocalStorage] Successfully cleared old data, retrying write operation',
110+
);
89111
// Retry setting the item after clearing
90112
this.localStorage.setItem(key, value);
113+
console.log('[Eppo LocalStorage] Write operation succeeded after clearing old data');
91114
return;
92115
} catch {
116+
console.error(
117+
'[Eppo LocalStorage] Write operation failed even after clearing old data',
118+
);
93119
throw new StorageFullUnableToWrite();
94120
}
95121
}
96122
}
97123
// For any other error, wrap it in our custom exception
98124
const errorMessage = error instanceof Error ? error.message : String(error);
125+
console.error('[Eppo LocalStorage] Non-quota error during write operation:', errorMessage);
99126
throw new LocalStorageUnknownFailure(
100127
`Failed to write to localStorage: ${errorMessage}`,
101128
error instanceof Error ? error : (error as Error),
@@ -107,17 +134,32 @@ export class LocalStorageEngine implements IStringStorageEngine {
107134
const globalMeta = this.getGlobalMeta();
108135

109136
if (globalMeta.version >= LocalStorageEngine.MIGRATION_VERSION) {
137+
console.log(
138+
'[Eppo LocalStorage] Compression migration already completed (version:',
139+
globalMeta.version,
140+
')',
141+
);
110142
return; // Already migrated
111143
}
112144

145+
console.log(
146+
'[Eppo LocalStorage] Starting compression migration from version',
147+
globalMeta.version,
148+
'to',
149+
LocalStorageEngine.MIGRATION_VERSION,
150+
);
151+
113152
try {
114153
this.clear();
154+
console.log('[Eppo LocalStorage] Cleared old uncompressed data for migration');
115155

116156
this.setGlobalMeta({
117157
migratedAt: Date.now(),
118158
version: LocalStorageEngine.MIGRATION_VERSION,
119159
});
160+
console.log('[Eppo LocalStorage] Compression migration completed successfully');
120161
} catch (e) {
162+
console.warn('[Eppo LocalStorage] Compression migration failed, continuing silently:', e);
121163
// Migration failed, continue silently
122164
}
123165
}
@@ -150,6 +192,13 @@ export class LocalStorageEngine implements IStringStorageEngine {
150192
}
151193
}
152194

195+
if (keysToDelete.length > 0) {
196+
console.log(
197+
`[Eppo LocalStorage] Clearing ${keysToDelete.length} old configuration keys:`,
198+
keysToDelete,
199+
);
200+
}
201+
153202
// Delete collected keys
154203
keysToDelete.forEach((key) => {
155204
this.localStorage.removeItem(key);

0 commit comments

Comments
 (0)