Skip to content

Commit

Permalink
Revert "feat(turbopack): Add an env var to debug-print the fast refre…
Browse files Browse the repository at this point in the history
…sh invalidation reason (#72296)" (#72421)

Not sure why this is happening, but @kdy1 bisected this commit to a null pointer assertion error in napi: https://vercel.slack.com/archives/C03EWR7LGEN/p1730901839682439?thread_ts=1730899709.760659&cid=C03EWR7LGEN

Reverting until I can repro and root cause.

Closes PACK-3402
  • Loading branch information
bgw authored Nov 6, 2024
1 parent edb19db commit 80384ac
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 63 deletions.
45 changes: 11 additions & 34 deletions crates/napi/src/next_api/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -893,10 +893,6 @@ pub fn project_hmr_identifiers_subscribe(
)
}

struct NapiUpdateInfoOpts {
include_reasons: bool,
}

enum UpdateMessage {
Start,
End(UpdateInfo),
Expand All @@ -908,16 +904,16 @@ struct NapiUpdateMessage {
pub value: Option<NapiUpdateInfo>,
}

impl NapiUpdateMessage {
fn from_update_message(update_message: UpdateMessage, opts: NapiUpdateInfoOpts) -> Self {
impl From<UpdateMessage> for NapiUpdateMessage {
fn from(update_message: UpdateMessage) -> Self {
match update_message {
UpdateMessage::Start => NapiUpdateMessage {
update_type: "start".to_string(),
value: None,
},
UpdateMessage::End(info) => NapiUpdateMessage {
update_type: "end".to_string(),
value: Some(NapiUpdateInfo::from_update_info(info, opts)),
value: Some(info.into()),
},
}
}
Expand All @@ -927,27 +923,13 @@ impl NapiUpdateMessage {
struct NapiUpdateInfo {
pub duration: u32,
pub tasks: u32,
/// A human-readable list of invalidation reasons (typically changed file paths) if known. Will
/// be `None` if [`NapiUpdateInfoOpts::include_reasons`] is `false` or if no reason was
/// specified (not every invalidation includes a reason).
pub reasons: Option<String>,
}

impl NapiUpdateInfo {
fn from_update_info(update_info: UpdateInfo, opts: NapiUpdateInfoOpts) -> Self {
impl From<UpdateInfo> for NapiUpdateInfo {
fn from(update_info: UpdateInfo) -> Self {
Self {
// u32::MAX in milliseconds is 49.71 days
duration: update_info
.duration
.as_millis()
.try_into()
.expect("update duration in milliseconds should not exceed u32::MAX"),
tasks: update_info
.tasks
.try_into()
.expect("number of tasks should not exceed u32::MAX"),
reasons: (opts.include_reasons && !update_info.reasons.is_empty())
.then(|| update_info.reasons.to_string()),
duration: update_info.duration.as_millis() as u32,
tasks: update_info.tasks as u32,
}
}
}
Expand All @@ -967,17 +949,12 @@ impl NapiUpdateInfo {
pub fn project_update_info_subscribe(
#[napi(ts_arg_type = "{ __napiType: \"Project\" }")] project: External<ProjectInstance>,
aggregation_ms: u32,
include_reasons: bool,
func: JsFunction,
) -> napi::Result<()> {
let func: ThreadsafeFunction<UpdateMessage> =
func.create_threadsafe_function(0, move |ctx| {
let message = ctx.value;
Ok(vec![NapiUpdateMessage::from_update_message(
message,
NapiUpdateInfoOpts { include_reasons },
)])
})?;
let func: ThreadsafeFunction<UpdateMessage> = func.create_threadsafe_function(0, |ctx| {
let message = ctx.value;
Ok(vec![NapiUpdateMessage::from(message)])
})?;
let turbo_tasks = project.turbo_tasks.clone();
tokio::spawn(async move {
loop {
Expand Down
7 changes: 0 additions & 7 deletions packages/next/src/build/swc/generated-native.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,12 +246,6 @@ export interface NapiUpdateMessage {
export interface NapiUpdateInfo {
duration: number
tasks: number
/**
* A human-readable list of invalidation reasons (typically changed file paths) if known. Will
* be `None` if [`NapiUpdateInfoOpts::include_reasons`] is `false` or if no reason was
* specified (not every invalidation includes a reason).
*/
reasons?: string
}
/**
* Subscribes to lifecycle events of the compilation.
Expand All @@ -269,7 +263,6 @@ export interface NapiUpdateInfo {
export function projectUpdateInfoSubscribe(
project: { __napiType: 'Project' },
aggregationMs: number,
includeReasons: boolean,
func: (...args: any[]) => any
): void
export interface StackFrame {
Expand Down
6 changes: 2 additions & 4 deletions packages/next/src/build/swc/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import type {
TurbopackResult,
TurbopackStackFrame,
Update,
UpdateInfoOpts,
UpdateMessage,
WrittenEndpoint,
} from './types'
Expand Down Expand Up @@ -762,12 +761,11 @@ function bindingToApi(
return binding.projectGetSourceMap(this._nativeProject, filePath)
}

updateInfoSubscribe(opts: UpdateInfoOpts) {
updateInfoSubscribe(aggregationMs: number) {
return subscribe<TurbopackResult<UpdateMessage>>(true, async (callback) =>
binding.projectUpdateInfoSubscribe(
this._nativeProject,
opts.aggregationMs,
opts.includeReasons ?? false,
aggregationMs,
callback
)
)
Expand Down
11 changes: 4 additions & 7 deletions packages/next/src/build/swc/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ import type {
ExternalObject,
NextTurboTasks,
RefCell,
NapiUpdateInfo as UpdateInfo,
} from './generated-native'

export type { NapiUpdateInfo as UpdateInfo } from './generated-native'

export interface Binding {
isWasm: boolean
turbo: {
Expand Down Expand Up @@ -198,9 +195,9 @@ export type UpdateMessage =
value: UpdateInfo
}

export interface UpdateInfoOpts {
aggregationMs: number
includeReasons?: boolean
export interface UpdateInfo {
duration: number
tasks: number
}

export interface Project {
Expand All @@ -223,7 +220,7 @@ export interface Project {
): Promise<TurbopackStackFrame | null>

updateInfoSubscribe(
opts?: UpdateInfoOpts
aggregationMs: number
): AsyncIterableIterator<TurbopackResult<UpdateMessage>>

shutdown(): Promise<void>
Expand Down
11 changes: 1 addition & 10 deletions packages/next/src/server/dev/hot-reloader-turbopack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ const isTestMode = !!(
process.env.__NEXT_TEST_MODE ||
process.env.DEBUG
)
const includeUpdateReasons = !!process.env.NEXT_TURBOPACK_INCLUDE_UPDATE_REASONS

const sessionId = Math.floor(Number.MAX_SAFE_INTEGER * Math.random())

Expand Down Expand Up @@ -1019,21 +1018,13 @@ export async function createHotReloaderTurbopack(
})

async function handleProjectUpdates() {
for await (const updateMessage of project.updateInfoSubscribe({
aggregationMs: 30,
includeReasons: includeUpdateReasons,
})) {
for await (const updateMessage of project.updateInfoSubscribe(30)) {
switch (updateMessage.updateType) {
case 'start': {
hotReloader.send({ action: HMR_ACTIONS_SENT_TO_BROWSER.BUILDING })
break
}
case 'end': {
if (updateMessage.value.reasons) {
// debug: only populated when `process.env.NEXT_TURBOPACK_INCLUDE_UPDATE_REASONS` is set
// and a reason was supplied when the invalidation happened (not always true)
console.log('[Update Reasons]', updateMessage.value.reasons)
}
sendEnqueuedMessages()

function addErrors(
Expand Down
2 changes: 1 addition & 1 deletion test/development/basic/next-rs-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ describe('next.rs api', () => {
browserslistQuery: 'last 2 versions',
})
projectUpdateSubscription = filterMapAsyncIterator(
project.updateInfoSubscribe({ aggregationMs: 1000 }),
project.updateInfoSubscribe(1000),
(update) => (update.updateType === 'end' ? update.value : undefined)
)
})
Expand Down

0 comments on commit 80384ac

Please sign in to comment.