perf: migrate legacy users to native-on rollout

This commit is contained in:
Youzini-afk
2026-04-22 20:49:04 +08:00
parent c0c04854cd
commit f86962891e
3 changed files with 54 additions and 1 deletions

View File

@@ -9,6 +9,8 @@ function clampIntValue(value, fallback = 0, min = 0, max = 9999) {
return Math.min(max, Math.max(min, Math.trunc(numeric)));
}
const NATIVE_ROLLOUT_VERSION = 1;
export const defaultSettings = {
enabled: true,
debugLoggingEnabled: false,
@@ -124,6 +126,7 @@ export const defaultSettings = {
persistNativeDeltaBridgeMode: "json",
loadUseNativeHydrate: true,
loadNativeHydrateThresholdRecords: 12000,
nativeRolloutVersion: NATIVE_ROLLOUT_VERSION,
nativeEngineFailOpen: true,
graphNativeForceDisable: false,
@@ -237,8 +240,31 @@ export function migrateLegacyAutoMaintenanceSettings(loaded = {}) {
return migrated;
}
export function migrateNativeRolloutSettings(loaded = {}) {
if (!loaded || typeof loaded !== "object" || Array.isArray(loaded)) {
return {};
}
const migrated = { ...loaded };
const rolloutVersion = clampIntValue(
migrated.nativeRolloutVersion,
0,
0,
NATIVE_ROLLOUT_VERSION,
);
if (rolloutVersion < NATIVE_ROLLOUT_VERSION) {
migrated.graphUseNativeLayout = defaultSettings.graphUseNativeLayout;
migrated.persistUseNativeDelta = defaultSettings.persistUseNativeDelta;
migrated.loadUseNativeHydrate = defaultSettings.loadUseNativeHydrate;
}
migrated.nativeRolloutVersion = NATIVE_ROLLOUT_VERSION;
return migrated;
}
export function mergePersistedSettings(loaded = {}) {
const compatibleLoaded = migrateLegacyAutoMaintenanceSettings(loaded);
const compatibleLoaded = migrateNativeRolloutSettings(
migrateLegacyAutoMaintenanceSettings(loaded),
);
const merged = { ...defaultSettings };
for (const key of DEFAULT_SETTING_KEYS) {
if (Object.prototype.hasOwnProperty.call(compatibleLoaded, key)) {

View File

@@ -78,6 +78,7 @@ assert.equal(defaultSettings.persistNativeDeltaThresholdSerializedChars, 4000000
assert.equal(defaultSettings.persistNativeDeltaBridgeMode, "json");
assert.equal(defaultSettings.loadUseNativeHydrate, true);
assert.equal(defaultSettings.loadNativeHydrateThresholdRecords, 12000);
assert.equal(defaultSettings.nativeRolloutVersion, 1);
assert.equal(defaultSettings.nativeEngineFailOpen, true);
assert.equal(defaultSettings.graphNativeForceDisable, false);
assert.equal(defaultSettings.taskProfilesVersion, 3);
@@ -116,4 +117,29 @@ assert.equal(
defaultSettings.compressionEveryN,
);
const migratedLegacyNativeDisabled = mergePersistedSettings({
graphUseNativeLayout: false,
persistUseNativeDelta: false,
loadUseNativeHydrate: false,
graphNativeForceDisable: true,
});
assert.equal(migratedLegacyNativeDisabled.graphUseNativeLayout, true);
assert.equal(migratedLegacyNativeDisabled.persistUseNativeDelta, true);
assert.equal(migratedLegacyNativeDisabled.loadUseNativeHydrate, true);
assert.equal(migratedLegacyNativeDisabled.graphNativeForceDisable, true);
assert.equal(migratedLegacyNativeDisabled.nativeRolloutVersion, 1);
const migratedVersionedManualNativeDisabled = mergePersistedSettings({
nativeRolloutVersion: 1,
graphUseNativeLayout: false,
persistUseNativeDelta: false,
loadUseNativeHydrate: false,
graphNativeForceDisable: true,
});
assert.equal(migratedVersionedManualNativeDisabled.graphUseNativeLayout, false);
assert.equal(migratedVersionedManualNativeDisabled.persistUseNativeDelta, false);
assert.equal(migratedVersionedManualNativeDisabled.loadUseNativeHydrate, false);
assert.equal(migratedVersionedManualNativeDisabled.graphNativeForceDisable, true);
assert.equal(migratedVersionedManualNativeDisabled.nativeRolloutVersion, 1);
console.log("default-settings tests passed");

View File

@@ -3157,6 +3157,7 @@ result = {
writesBlocked: false,
});
harness.runtimeContext.extension_settings[MODULE_NAME] = {
nativeRolloutVersion: 1,
persistUseNativeDelta: false,
};
harness.runtimeContext.__scheduleUploadShouldThrow = true;