Selected changesmerged Sep 22, 2026
sqlite: add virtual table support via createModule()C++ · 826 + / 0 −
Introduces 7 new declarations in src/node_sqlite.cc.
Adds new runtime rather than adjusting what was there. Tests changed with it, with code of their own.
src/node_sqlite.cc ↗ · 5 files
@@ -1012,6 +1015,483 @@ BaseObjectPtr<DatabaseSyncLimits> DatabaseSyncLimits::Create( return MakeBaseObject<DatabaseSyncLimits>(env, obj, std::move(database)); } +// ---------------------------------------------------------------------------+// VirtualTableModule+// ---------------------------------------------------------------------------++VirtualTableModule::VirtualTableModule(Environment* env,+ BaseObjectWeakPtr<DatabaseSync> db,+ Local<Function> rows_fn,+ std::string&& schema_sql,+ int num_columns,+ std::vector<int>&& hidden_col_indices,+ bool use_bigint_args,+ bool direct_only)+ : env_(env),+ db_(std::move(db)),+ rows_fn_(env->isolate(), rows_fn),+ schema_sql_(std::move(schema_sql)),+ num_columns_(num_columns),+ hidden_col_indices_(std::move(hidden_col_indices)),+ use_bigint_args_(use_bigint_args),+ direct_only_(direct_only),+ module_def_({}) {+ // Initialize the sqlite3_module definition. Each VirtualTableModule instance+ // gets its own copy to avoid thread-safety issues with worker threads.+ module_def_.iVersion = 1;+ module_def_.xCreate = VirtualTableModule::xCreate;+ module_def_.xConnect = VirtualTableModule::xCreate;+ module_def_.xBestIndex = VirtualTableModule::xBestIndex;+ module_def_.xDisconnect = VirtualTableModule::xDisconnect;+ module_def_.xDestroy = VirtualTableModule::xDestroy;+ module_def_.xOpen = VirtualTableModule::xOpen;
Fix startTime and shutdown delivery of forwarded Turbopack trace spansRust · 154 + / 33 −
Introduces 5 new declarations in turbopack/crates/turbo-tasks/src/message_queue.rs.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
turbopack/crates/turbo-tasks/src/message_queue.rs ↗ · 5 files
@@ -59,58 +88,93 @@ impl CompilationEventQueue { history.pop_front(); } history.push_back(message_clone.clone());+ drop(history);++ if deliver {+ // Send to all active receivers of the same message type+ if let Some(mut type_subscribers) = subscribers.get_mut(&EventChannelType::Type(+ message_clone.type_name().to_owned(),+ )) {+ let mut removal_indices = Vec::new();+ for (ix, sender) in type_subscribers.iter().enumerate() {+ if sender.send(message_clone.clone()).await.is_err() {+ removal_indices.push(ix);+ }+ } - // Send to all active receivers of the same message type- if let Some(mut type_subscribers) = subscribers.get_mut(&EventChannelType::Type(- message_clone.type_name().to_owned(),- )) {- let mut removal_indices = Vec::new();- for (ix, sender) in type_subscribers.iter().enumerate() {- if sender.send(message_clone.clone()).await.is_err() {- removal_indices.push(ix);+ for ix in removal_indices.iter().rev() {+ type_subscribers.remove(*ix); } } - for ix in removal_indices.iter().rev() {- type_subscribers.remove(*ix);- }
scheduler: refine SchedulingAlgorithm surface and decouple cache vs snapshot placementGo · 338 + / 192 −
Introduces 16 new declarations in pkg/scheduler/algorithm.go.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
pkg/scheduler/algorithm.go ↗ · 9 files
@@ -447,126 +557,148 @@ func (a *SchedulingAlgorithm) assume(logger klog.Logger, schedFramework framewor // Any potential NodeAllocatableResourceClaimStatuses from a previously failed scheduling attempt is overwritten. // This field is not explicitly cleared as the Pod object is reconstructed in handleSchedulingFailure() // before re-queueing.- assumedPodInfo.Pod.Status.NodeAllocatableResourceClaimStatuses = dynamicresources.ExtractPodNodeAllocatableResourceClaimStatus(logger, state, host)+ assumedPodInfo.Pod.Status.NodeAllocatableResourceClaimStatuses =+ dynamicresources.ExtractPodNodeAllocatableResourceClaimStatus(logger, state, host) }+ return assumedPodInfo+} - if state.IsPodGroupSchedulingCycle() {- err := a.nodeInfoSnapshot.AssumePod(assumedPodInfo.PodInfo)- if err != nil {- logger.Error(err, "Scheduler snapshot AssumePod failed")- return err+// reserve runs Reserve plugins for the assumed pod and converts plugin rejections+// into a single-node FitError.+func (a *SchedulingAlgorithm) reserve(ctx context.Context, state fwk.CycleState,+ schedFramework framework.Framework, assumedPodInfo *framework.QueuedPodInfo,+ origPod *v1.Pod, host string) *fwk.Status {+ if status := schedFramework.RunReservePluginsReserve(ctx, state, assumedPodInfo.Pod, host); !status.IsSuccess() {+ if status.IsRejected() {+ fitErr := &framework.FitError{+ NumAllNodes: 1,+ Pod: origPod,+ Diagnosis: framework.Diagnosis{+ NodeToStatus: framework.NewDefaultNodeToStatus(),+ },+ }+ fitErr.Diagnosis.NodeToStatus.Set(host, status)+ fitErr.Diagnosis.AddPluginStatus(status)+ return fwk.NewStatus(status.Code()).WithError(fitErr) }
Update tokenizer gguf support Python · 291 + / 559 −
Introduces 11 new declarations in src/transformers/integrations/ggml.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/integrations/ggml.py ↗ · 8 files
@@ -401,449 +370,3 @@ def _gguf_parse_value(_value, data_type): elif data_type == 9: _value = _gguf_parse_value(_value, array_data_type) return _value---class GGUFTokenizerSkeleton:- def __init__(self, dict_):- for k, v in dict_.items():- setattr(self, k, v)-- if not hasattr(self, "merges"):- if not hasattr(self, "tokens") or not hasattr(self, "scores"):- raise ValueError(- "tokens and scores need to be passed for a LLaMa tokenizer without merges to be instantiated."- )- tokens = self.tokens- scores = self.scores- vocab = {t: scores[i] for i, t in enumerate(tokens)}-- logger.warning("Merges were not in checkpoint, building merges on the fly.")- merges = []- for merge, piece_score in tqdm(vocab.items()):- local = []- for index in range(1, len(merge)):- piece_l, piece_r = merge[:index], merge[index:]- if piece_l in tokens and piece_r in tokens:- local.append((piece_l, piece_r, piece_score))- local = sorted(local, key=lambda x: (vocab[x[0]], vocab[x[1]]), reverse=True)- merges.extend(local)- merges = sorted(merges, key=lambda val: val[2], reverse=True)- merges = [(val[0], val[1]) for val in merges]- self.merges = merges- else:
[compiler] Allow setState after await in effect functionsRust · 151 + / 0 −
Introduces 3 new declarations in compiler/crates/react_compiler_validation/src/validate_no_set_state_in_effects.rs.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
compiler/crates/react_compiler_validation/src/validate_no_set_state_in_effects.rs ↗ · 8 files
@@ -577,3 +594,62 @@ fn get_set_state_call( } Ok(None) }++/// Computes the set of blocks which begin after an `await` has executed on+/// *every* control flow path from the function entry. Instructions in such+/// blocks (and instructions following an Await within any block) are+/// guaranteed to run asynchronously, in a microtask after the synchronous+/// portion of the function has returned.+///+/// This is a forward must-dataflow: a block starts after an await iff all of+/// its predecessors end after an await. Suppression based on this analysis is+/// sound in the presence of try/catch because HirBuilder::push terminates the+/// current block after every instruction within a try region: a MaybeThrow+/// block can therefore only throw from its single instruction, and when that+/// instruction is an Await the rejection also resumes in a microtask.+///+/// Port of computeBlocksStartingAfterAwait in ValidateNoSetStateInEffects.ts.+fn compute_blocks_starting_after_await(func: &HirFunction) -> FxHashSet<BlockId> {+ let mut blocks_with_await: FxHashSet<BlockId> = FxHashSet::default();+ for (block_id, block) in &func.body.blocks {+ let has_await = block.instructions.iter().any(|&instr_id| {+ matches!(+ func.instructions[instr_id.0 as usize].value,+ InstructionValue::Await { .. }+ )+ });+ if has_await {+ blocks_with_await.insert(*block_id);+ }+ }+ // Initialize non-entry blocks optimistically so that loop back-edges do+ // not pessimize the meet; the fixpoint then lowers any block reachable