Skip to content

Commit 8c1b797

Browse files
committed
Probe rewrite rule persistence
1 parent 09a9bff commit 8c1b797

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

packages/runtime-cloudflare/src/worker.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ async function runBootProbe(phase: string, bucket: R2Bucket): Promise<Response>
566566
}
567567
}
568568

569-
if (phase === "cwr" || phase === "cwc" || phase === "cwp" || phase === "cwcron" || canonicalLifecyclePhaseAliases[phase] || ["canonical-current-user", "canonical-init", "canonical-site-status", "canonical-wp-loaded", "canonical-wp-loaded-callbacks", "canonical-wp-loaded-exclude-rewrite-flush", "canonical-wp-loaded-exclude-core-template-header", "canonical-wp-loaded-exclude-playground", "canonical-wp-loaded-exclude-wp-cron", "canonical-wp-loaded-exclude-all"].includes(phase)) {
569+
if (phase === "cwr" || phase === "cwc" || phase === "cwp" || phase === "cwcron" || phase === "cwu" || canonicalLifecyclePhaseAliases[phase] || ["canonical-current-user", "canonical-init", "canonical-site-status", "canonical-wp-loaded", "canonical-wp-loaded-callbacks", "canonical-wp-loaded-exclude-rewrite-flush", "canonical-wp-loaded-exclude-core-template-header", "canonical-wp-loaded-exclude-playground", "canonical-wp-loaded-exclude-wp-cron", "canonical-wp-loaded-exclude-all", "canonical-wp-loaded-suppress-rewrite-persist"].includes(phase)) {
570570
const runtime = await bootWordPressRuntime("do-not-attempt-installing", true, true, undefined, await packagedCanonicalMarkdownSeed(), new Uint8Array(markdownPrimaryBootstrapIndex), "https://canonical-probe.invalid", {}, bucket, true)
571571
try {
572572
const evidence = (await runtime.php.run({ code: canonicalLifecycleProbeCode(phase) })).text.trim()
@@ -1008,6 +1008,7 @@ const canonicalLifecyclePhaseAliases: Record<string, string> = {
10081008
cwc: "canonical-wp-loaded-exclude-core-template-header",
10091009
cwp: "canonical-wp-loaded-exclude-playground",
10101010
cwcron: "canonical-wp-loaded-exclude-wp-cron",
1011+
cwu: "canonical-wp-loaded-suppress-rewrite-persist",
10111012
"canon-wpl-no-rewrite": "canonical-wp-loaded-exclude-rewrite-flush",
10121013
"canon-wpl-no-core": "canonical-wp-loaded-exclude-core-template-header",
10131014
"canon-wpl-no-playground": "canonical-wp-loaded-exclude-playground",
@@ -1022,6 +1023,7 @@ function canonicalLifecycleProbeCode(phase: string): string {
10221023
"canonical-wp-loaded-exclude-playground": { identifiers: ["playground_maybe_flush_rewrite_rules", "playground_save_wp_env_info"], retain: false },
10231024
"canonical-wp-loaded-exclude-wp-cron": { identifiers: ["_wp_cron"], retain: false },
10241025
"canonical-wp-loaded-exclude-all": { identifiers: [], retain: true },
1026+
"canonical-wp-loaded-suppress-rewrite-persist": { identifiers: [], retain: false },
10251027
}
10261028
const wpLoadedNeedle = "do_action( 'wp_loaded' );"
10271029
const stops: Record<string, { needle: string; after?: boolean }> = {
@@ -1087,6 +1089,7 @@ function wp_codebox_canonical_wp_loaded_remove_snapshot($identifiers, $retain) {
10871089
$inventory = wp_codebox_canonical_wp_loaded_inventory();
10881090
${canonicalPhase === "canonical-wp-loaded-callbacks" ? `echo json_encode(array('wordpressVersion' => $wp_version, 'bootstrapPhase' => '${phase}', 'callbacks' => $inventory, 'memoryBytes' => memory_get_usage(true), 'peakMemoryBytes' => memory_get_peak_usage(true)));
10891091
return;` : `$removed = wp_codebox_canonical_wp_loaded_remove_snapshot(${JSON.stringify(exclusion?.identifiers ?? [])}, ${exclusion?.retain ? "true" : "false"});
1092+
${canonicalPhase === "canonical-wp-loaded-suppress-rewrite-persist" ? "add_filter('pre_update_option_rewrite_rules', static function($value, $old_value) { return $old_value; }, PHP_INT_MAX, 2);" : ""}
10901093
$memory_before = memory_get_usage(true);
10911094
do_action('wp_loaded');
10921095
echo json_encode(array('wordpressVersion' => $wp_version, 'bootstrapPhase' => '${phase}', 'completed' => true, 'callbacks' => $inventory, 'removedCallbacks' => $removed, 'memoryBeforeBytes' => $memory_before, 'memoryBytes' => memory_get_usage(true), 'peakMemoryBytes' => memory_get_peak_usage(true)));

tests/cloudflare-runtime.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,17 +322,19 @@ test("Cloudflare canonical lifecycle diagnostics compose the disabled-cron patch
322322
cwc: "canonical-wp-loaded-exclude-core-template-header",
323323
cwp: "canonical-wp-loaded-exclude-playground",
324324
cwcron: "canonical-wp-loaded-exclude-wp-cron",
325+
cwu: "canonical-wp-loaded-suppress-rewrite-persist",
325326
"canon-wpl-no-rewrite": "canonical-wp-loaded-exclude-rewrite-flush",
326327
"canon-wpl-no-core": "canonical-wp-loaded-exclude-core-template-header",
327328
"canon-wpl-no-playground": "canonical-wp-loaded-exclude-playground",
328329
"canon-wpl-no-cron": "canonical-wp-loaded-exclude-wp-cron",
329330
}
330331

331-
for (const phase of ["canonical-current-user", "canonical-init", "canonical-site-status", "canonical-wp-loaded", "canonical-wp-loaded-callbacks", "canonical-wp-loaded-exclude-rewrite-flush", "canonical-wp-loaded-exclude-core-template-header", "canonical-wp-loaded-exclude-playground", "canonical-wp-loaded-exclude-wp-cron", "canonical-wp-loaded-exclude-all"]) {
332+
for (const phase of ["canonical-current-user", "canonical-init", "canonical-site-status", "canonical-wp-loaded", "canonical-wp-loaded-callbacks", "canonical-wp-loaded-exclude-rewrite-flush", "canonical-wp-loaded-exclude-core-template-header", "canonical-wp-loaded-exclude-playground", "canonical-wp-loaded-exclude-wp-cron", "canonical-wp-loaded-exclude-all", "canonical-wp-loaded-suppress-rewrite-persist"]) {
332333
assert.match(probes, new RegExp(`"${phase}"`))
333334
assert.match(lifecycle, new RegExp(`"${phase}"`))
334335
assert.deepEqual(routeWorkerRequest(new Request(`https://worker.example/?phase=${phase}`)), { kind: "probe", phase })
335336
}
337+
assert.match(lifecycle, /pre_update_option_rewrite_rules/)
336338
for (const [alias, phase] of Object.entries(aliases)) {
337339
assert.ok(alias.length <= 24)
338340
assert.match(worker, new RegExp(`"${alias}"`))

0 commit comments

Comments
 (0)