Skip to content

Commit a6c3ece

Browse files
authored
fix(diff): migra js OOM error (#5045)
* fix(diff): migra js OOM error * chore: not use uneffective flags
1 parent c72dc2c commit a6c3ece

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

internal/db/diff/migra.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,20 @@ func DiffSchemaMigra(ctx context.Context, source, target pgconn.Config, schema [
143143
binds := []string{utils.EdgeRuntimeId + ":/root/.cache/deno:rw"}
144144
var stdout, stderr bytes.Buffer
145145
if err := utils.RunEdgeRuntimeScript(ctx, env, diffSchemaTypeScript, binds, "error diffing schema", &stdout, &stderr); err != nil {
146+
if shouldFallbackToLegacyMigra(err) {
147+
debugf("DiffSchemaMigra falling back to legacy migra after edge-runtime OOM")
148+
return DiffSchemaMigraBash(ctx, source, target, schema, options...)
149+
}
146150
return "", err
147151
}
148152
return stdout.String(), nil
149153
}
154+
155+
func shouldFallbackToLegacyMigra(err error) bool {
156+
if err == nil {
157+
return false
158+
}
159+
message := err.Error()
160+
return strings.Contains(message, "Fatal JavaScript out of memory") ||
161+
strings.Contains(message, "Ineffective mark-compacts near heap limit")
162+
}

internal/utils/edgeruntime.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ EOF
3838
"",
3939
stdout,
4040
stderr,
41-
); err != nil && !strings.HasPrefix(stderr.String(), "main worker has been destroyed") {
41+
); err != nil && !strings.Contains(stderr.String(), "main worker has been destroyed") {
4242
return errors.Errorf("%s: %w:\n%s", errPrefix, err, stderr.String())
4343
}
4444
return nil

0 commit comments

Comments
 (0)