Skip to content

Commit 85b92bc

Browse files
nipunn1313Convex, Inc.
authored andcommitted
Add index_diff to start push response (#40159)
Add index_diff to start push response Allows us to print progress + understand the staged state whether new vs preexisting. At finish_push time, we don't have enough information to know if a staged index is new vs preexisting. At start_push time we do. Add to CLI too GitOrigin-RevId: 7efaaedb40ebbf9cd99a44683ac4e157d8b0d97e
1 parent 94b4aa4 commit 85b92bc

File tree

4 files changed

+38
-22
lines changed

4 files changed

+38
-22
lines changed

crates/model/src/components/config.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ impl<'a, RT: Runtime> ComponentConfigModel<'a, RT> {
272272

273273
let mut allocated_component_ids = BTreeMap::new();
274274
let mut schema_ids = BTreeMap::new();
275+
let mut index_diffs = BTreeMap::new();
275276

276277
let existing_root = existing_components_by_parent.get(&None);
277278
let mut stack = vec![(ComponentPath::root(), existing_root, Some(app))];
@@ -304,7 +305,7 @@ impl<'a, RT: Runtime> ComponentConfigModel<'a, RT> {
304305
.get(&new_node.definition_path)
305306
.context("Missing definition for component")?;
306307
let schema_id = if let Some(ref schema) = definition.schema {
307-
IndexModel::new(self.tx)
308+
let index_diff = IndexModel::new(self.tx)
308309
.prepare_new_and_mutated_indexes(namespace, schema)
309310
.await?;
310311

@@ -319,6 +320,7 @@ impl<'a, RT: Runtime> ComponentConfigModel<'a, RT> {
319320
);
320321
},
321322
};
323+
index_diffs.insert(path.clone(), index_diff.into());
322324
Some(schema_id.into())
323325
} else {
324326
None
@@ -338,6 +340,7 @@ impl<'a, RT: Runtime> ComponentConfigModel<'a, RT> {
338340
Ok(SchemaChange {
339341
allocated_component_ids,
340342
schema_ids,
343+
index_diffs,
341344
})
342345
}
343346

@@ -913,7 +916,7 @@ impl TryFrom<ComponentDiff> for SerializedComponentDiff {
913916
module_diff: value.module_diff,
914917
udf_config_diff: value.udf_config_diff,
915918
cron_diff: value.cron_diff,
916-
index_diff: Some(value.index_diff.try_into()?),
919+
index_diff: Some(value.index_diff.into()),
917920
schema_diff: value.schema_diff.map(|diff| diff.try_into()).transpose()?,
918921
})
919922
}
@@ -941,13 +944,16 @@ impl TryFrom<SerializedComponentDiff> for ComponentDiff {
941944
pub struct SchemaChange {
942945
pub allocated_component_ids: BTreeMap<ComponentPath, DeveloperDocumentId>,
943946
pub schema_ids: BTreeMap<ComponentPath, Option<InternalDocumentId>>,
947+
pub index_diffs: BTreeMap<ComponentPath, AuditLogIndexDiff>,
944948
}
945949

946950
#[derive(Serialize, Deserialize)]
947951
#[serde(rename_all = "camelCase")]
948952
pub struct SerializedSchemaChange {
949953
allocated_component_ids: BTreeMap<String, String>,
950954
schema_ids: BTreeMap<String, Option<String>>,
955+
#[serde(default)]
956+
index_diffs: BTreeMap<String, SerializedIndexDiff>,
951957
}
952958

953959
impl TryFrom<SchemaChange> for SerializedSchemaChange {
@@ -965,6 +971,11 @@ impl TryFrom<SchemaChange> for SerializedSchemaChange {
965971
.into_iter()
966972
.map(|(k, v)| (String::from(k), v.map(String::from)))
967973
.collect(),
974+
index_diffs: value
975+
.index_diffs
976+
.into_iter()
977+
.map(|(k, v)| (String::from(k), v.into()))
978+
.collect(),
968979
})
969980
}
970981
}
@@ -984,6 +995,11 @@ impl TryFrom<SerializedSchemaChange> for SchemaChange {
984995
.into_iter()
985996
.map(|(k, v)| Ok((k.parse()?, v.map(|v| v.parse()).transpose()?)))
986997
.collect::<anyhow::Result<_>>()?,
998+
index_diffs: value
999+
.index_diffs
1000+
.into_iter()
1001+
.map(|(k, v)| Ok((k.parse()?, v.try_into()?)))
1002+
.collect::<anyhow::Result<_>>()?,
9871003
})
9881004
}
9891005
}

crates/model/src/deployment_audit_log/types.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -527,27 +527,25 @@ pub struct SerializedIndexDiff {
527527
pub removed_indexes: Vec<SerializedNamedDeveloperIndexConfig>,
528528
}
529529

530-
impl TryFrom<AuditLogIndexDiff> for SerializedIndexDiff {
531-
type Error = anyhow::Error;
532-
533-
fn try_from(diff: AuditLogIndexDiff) -> anyhow::Result<Self> {
530+
impl From<AuditLogIndexDiff> for SerializedIndexDiff {
531+
fn from(diff: AuditLogIndexDiff) -> Self {
534532
let convert_to_serialized =
535533
|indexes: Vec<(GenericIndexName<TableName>, DeveloperIndexConfig)>| {
536534
indexes
537535
.into_iter()
538536
.map(|(name, config)| {
539537
let name = name.to_string();
540538
let index_config = SerializedDeveloperIndexConfig::from(config);
541-
anyhow::Ok(SerializedNamedDeveloperIndexConfig { name, index_config })
539+
SerializedNamedDeveloperIndexConfig { name, index_config }
542540
})
543-
.try_collect()
541+
.collect()
544542
};
545-
let added_indexes = convert_to_serialized(diff.added_indexes)?;
546-
let removed_indexes = convert_to_serialized(diff.removed_indexes)?;
547-
Ok(Self {
543+
let added_indexes = convert_to_serialized(diff.added_indexes);
544+
let removed_indexes = convert_to_serialized(diff.removed_indexes);
545+
Self {
548546
added_indexes,
549547
removed_indexes,
550-
})
548+
}
551549
}
552550
}
553551

npm-packages/convex/src/cli/lib/components.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ export async function runComponentsPush(
420420
const finishPushResponse = await pushSpan.enterAsync("finishPush", (span) =>
421421
finishPush(ctx, span, startPushResponse, options),
422422
);
423-
printDiff(finishPushResponse, options);
423+
printDiff(startPushResponse, finishPushResponse, options);
424424
pushSpan.end();
425425

426426
// Asynchronously report that the push completed.
@@ -430,6 +430,7 @@ export async function runComponentsPush(
430430
}
431431

432432
function printDiff(
433+
startPushResponse: StartPushResponse,
433434
finishPushResponse: FinishPushDiff,
434435
opts: { verbose: boolean; dryRun: boolean; deploymentName: string | null },
435436
) {
@@ -438,26 +439,25 @@ function printDiff(
438439
logMessage(diffString);
439440
return;
440441
}
442+
const indexDiffs = startPushResponse.schemaChange.indexDiffs;
441443
const { componentDiffs } = finishPushResponse;
442444

443445
// Print out index diffs for the root component.
444-
let rootDiff = componentDiffs[""];
445-
if (rootDiff && rootDiff.indexDiff) {
446-
if (rootDiff.indexDiff.removed_indexes.length > 0) {
446+
let rootDiff = indexDiffs[""] || componentDiffs[""]?.indexDiff;
447+
if (rootDiff) {
448+
if (rootDiff.removed_indexes.length > 0) {
447449
let msg = `${opts.dryRun ? "Would delete" : "Deleted"} table indexes:\n`;
448-
for (let i = 0; i < rootDiff.indexDiff.removed_indexes.length; i++) {
449-
const index = rootDiff.indexDiff.removed_indexes[i];
450+
for (let i = 0; i < rootDiff.removed_indexes.length; i++) {
451+
const index = rootDiff.removed_indexes[i];
450452
if (i > 0) {
451453
msg += "\n";
452454
}
453455
msg += ` [-] ${formatIndex(index)}`;
454456
}
455457
logFinishedStep(msg);
456458
}
457-
const addedStaged = rootDiff.indexDiff.added_indexes.filter(
458-
(index) => index.staged,
459-
);
460-
const addedEnabled = rootDiff.indexDiff.added_indexes.filter(
459+
const addedStaged = rootDiff.added_indexes.filter((index) => index.staged);
460+
const addedEnabled = rootDiff.added_indexes.filter(
461461
(index) => !index.staged,
462462
);
463463
if (addedEnabled.length > 0) {

npm-packages/convex/src/cli/lib/deployApi/startPush.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from "./definitionConfig.js";
1010
import { authInfo } from "./types.js";
1111
import { looseObject } from "./utils.js";
12+
import { indexDiff } from "./finishPush.js";
1213

1314
export const startPushRequest = looseObject({
1415
adminKey: z.string(),
@@ -26,6 +27,7 @@ export type StartPushRequest = z.infer<typeof startPushRequest>;
2627
export const schemaChange = looseObject({
2728
allocatedComponentIds: z.any(),
2829
schemaIds: z.any(),
30+
indexDiffs: z.record(componentDefinitionPath, indexDiff),
2931
});
3032
export type SchemaChange = z.infer<typeof schemaChange>;
3133

0 commit comments

Comments
 (0)