Skip to content

Commit dbd868f

Browse files
fix(cmd): harden integration startup migrations
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
1 parent de41e0e commit dbd868f

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

cmd/ccg/main.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ func migrateDatabaseDriver(db *gorm.DB, driver string) (migratedb.Driver, string
368368
}
369369
return d, "sqlite3", nil
370370
case "postgres":
371-
d, err := migratepostgres.WithInstance(sqlDB, &migratepostgres.Config{MultiStatementEnabled: true})
371+
d, err := migratepostgres.WithInstance(sqlDB, &migratepostgres.Config{})
372372
if err != nil {
373373
return nil, "", trace.Wrap(err, "create postgres migration driver")
374374
}
@@ -842,7 +842,7 @@ func runServe(deps *cli.Deps, cfg cli.ServeConfig) error {
842842

843843
switch cfg.Transport {
844844
case "streamable-http":
845-
return serveStreamableHTTP(deps, srv, cfg, postprocessSummary)
845+
return serveStreamableHTTP(deps, srv, cfg, cache, postprocessSummary)
846846
default:
847847
deps.Logger.Info("serving MCP over stdio")
848848
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
@@ -863,6 +863,12 @@ func runServe(deps *cli.Deps, cfg cli.ServeConfig) error {
863863
}
864864
}
865865

866+
func flushMCPQueryCache(cache *mcpserver.Cache) {
867+
if cache != nil {
868+
cache.Flush()
869+
}
870+
}
871+
866872
type mcpPostprocessPolicy struct {
867873
engine *postprocesspolicy.Engine
868874
store *postprocesspolicy.Store
@@ -897,7 +903,7 @@ func (p *mcpPostprocessPolicy) Reset(ctx context.Context, tool string) error {
897903
// serveStreamableHTTP serves the MCP server over streamable HTTP.
898904
// @intent 원격 MCP 클라이언트를 위한 HTTP 엔드포인트와 헬스체크를 노출한다.
899905
// @sideEffect HTTP 리스너를 열고 종료 시 graceful shutdown을 수행한다.
900-
func serveStreamableHTTP(deps *cli.Deps, srv *server.MCPServer, cfg cli.ServeConfig, postprocessSummary func(context.Context) (*postprocesspolicy.StatusSummary, error)) error {
906+
func serveStreamableHTTP(deps *cli.Deps, srv *server.MCPServer, cfg cli.ServeConfig, cache *mcpserver.Cache, postprocessSummary func(context.Context) (*postprocesspolicy.StatusSummary, error)) error {
901907
deps.Logger.Info("serving MCP over streamable-http", "addr", cfg.HTTPAddr, "stateless", cfg.Stateless)
902908

903909
if err := validateHTTPExposure(cfg); err != nil {
@@ -1003,6 +1009,7 @@ func serveStreamableHTTP(deps *cli.Deps, srv *server.MCPServer, cfg cli.ServeCon
10031009
deps.Logger.Error("webhook update failed", "repo", repoFullName, "error", err)
10041010
return err
10051011
}
1012+
flushMCPQueryCache(cache)
10061013
deps.Logger.Info("webhook sync completed", "repo", repoFullName, "namespace", ns,
10071014
"added", stats.Added, "modified", stats.Modified, "skipped", stats.Skipped, "deleted", stats.Deleted)
10081015
return nil

cmd/ccg/main_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,34 @@ import (
77
"path/filepath"
88
"strings"
99
"testing"
10+
"time"
1011

1112
"gorm.io/driver/sqlite"
1213
"gorm.io/gorm"
1314
gormlogger "gorm.io/gorm/logger"
1415

1516
"github.com/tae2089/code-context-graph/internal/ctxns"
17+
mcpserver "github.com/tae2089/code-context-graph/internal/mcp"
1618
"github.com/tae2089/code-context-graph/internal/model"
1719
"github.com/tae2089/code-context-graph/internal/store/gormstore"
1820
)
1921

22+
func TestFlushMCPQueryCache_RemovesCachedValues(t *testing.T) {
23+
cache := mcpserver.NewCache(5 * time.Minute)
24+
t.Cleanup(cache.Close)
25+
cache.Set(`list_graph_stats:{"namespace":"sample-go"}`, `{"total_nodes":0}`)
26+
27+
flushMCPQueryCache(cache)
28+
29+
if _, ok := cache.Get(`list_graph_stats:{"namespace":"sample-go"}`); ok {
30+
t.Fatal("expected cache entry to be flushed")
31+
}
32+
}
33+
34+
func TestFlushMCPQueryCache_NilIsNoop(t *testing.T) {
35+
flushMCPQueryCache(nil)
36+
}
37+
2038
func setupNamespaceMigrationDB(t *testing.T) *gorm.DB {
2139
t.Helper()
2240
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{Logger: gormlogger.Discard})

0 commit comments

Comments
 (0)