Add knowledge graph models
On server side, Zoekt search models and services will be separate from graph models and services. But because we want to re-use Zoekt infrastructure, Zoekt Node model will be associated both with Zoekt models and also with knowledge graph models. It might look like this:
classDiagram
namespace ZoektModels {
class Node
class Index
class Repository
class Task
class EnabledNamespace
class Replica
}
namespace KnowledgeGraphModels {
class KnowledgeGraphEnabledRepository
class KnowledgeGraphReplica
}
Node "1" --> "*" Task : has_many tasks
Node "1" --> "*" Index : has_many indices
EnabledNamespace "1" --> "*" Replica : has_many replicas
Replica "1" --> "*" Index : has_many indices
Index "1" --> "*" Repository : has_many repositories
Repository "1" --> "*" Task : has_many tasks
KnowledgeGraphEnabledRepository "1" --> "*" KnowledgeGraphReplica : has_many replicas
KnowledgeGraphReplica "1" --> "*" Task : has_many tasks
Node "1" --> "*" KnowledgeGraphReplica : has_many graph replicas
Because for graph database, we don't need to keep repositories from same namespace on the same node, replication strategy will be simpler compared to Zoekt search. Models schema may change depending on needs, but the main point is to illustrate separation of Zoekt and konwledge graph models, while still re-using Zoekt Node model for both services.
TODO: clarify if we it's better to re-use existing Zoekt::Task model for both zoekt and graph tasks, or if it would be better to have separate task models. Related to gitlab-com/content-sites/handbook!13104 (comment 2481463254)
Versioning
Graph database schema will evolve during time. Ideally the repository parser (which will return graph nodes and edges) should be also versioned and this version should be part of the parser output. For each graph DB and each graph node will track in Rails database what schema version was used for parsing the repository.
Related POC !189941 (closed)