Skip to content

Commit bdc9b3d

Browse files
committed
addressing review comments
1 parent db75e85 commit bdc9b3d

5 files changed

Lines changed: 122 additions & 295 deletions

File tree

server/internal/orchestrator/swarm/orchestrator.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,59 @@ func (o *Orchestrator) buildServiceInstanceResources(spec *database.ServiceInsta
583583
}, nil
584584
}
585585

586+
// generateRAGInstanceResources returns the resources needed for one RAG service
587+
// instance. RAG only requires read access, so a single ServiceUserRoleRO is
588+
// created per database node using the same canonical+per-node pattern as MCP.
589+
func (o *Orchestrator) generateRAGInstanceResources(spec *database.ServiceInstanceSpec) (*database.ServiceInstanceResources, error) {
590+
canonicalROID := ServiceUserRoleIdentifier(spec.ServiceSpec.ServiceID, ServiceUserRoleRO)
591+
592+
// Canonical read-only role — runs on the node co-located with this instance.
593+
canonicalRO := &ServiceUserRole{
594+
ServiceID: spec.ServiceSpec.ServiceID,
595+
DatabaseID: spec.DatabaseID,
596+
DatabaseName: spec.DatabaseName,
597+
NodeName: spec.NodeName,
598+
Mode: ServiceUserRoleRO,
599+
}
600+
601+
orchestratorResources := []resource.Resource{canonicalRO}
602+
603+
// Per-node RO role for each additional database node so that RAG instances
604+
// on other hosts can authenticate against their co-located Postgres.
605+
if len(spec.DatabaseNodes) > 1 {
606+
for _, nodeInst := range spec.DatabaseNodes[1:] {
607+
orchestratorResources = append(orchestratorResources, &ServiceUserRole{
608+
ServiceID: spec.ServiceSpec.ServiceID,
609+
DatabaseID: spec.DatabaseID,
610+
DatabaseName: spec.DatabaseName,
611+
NodeName: nodeInst.NodeName,
612+
Mode: ServiceUserRoleRO,
613+
CredentialSource: &canonicalROID,
614+
})
615+
}
616+
}
617+
618+
data := make([]*resource.ResourceData, len(orchestratorResources))
619+
for i, res := range orchestratorResources {
620+
d, err := resource.ToResourceData(res)
621+
if err != nil {
622+
return nil, fmt.Errorf("failed to convert resource to resource data: %w", err)
623+
}
624+
data[i] = d
625+
}
626+
627+
return &database.ServiceInstanceResources{
628+
ServiceInstance: &database.ServiceInstance{
629+
ServiceInstanceID: spec.ServiceInstanceID,
630+
ServiceID: spec.ServiceSpec.ServiceID,
631+
DatabaseID: spec.DatabaseID,
632+
HostID: spec.HostID,
633+
State: database.ServiceInstanceStateCreating,
634+
},
635+
Resources: data,
636+
}, nil
637+
}
638+
586639
func (o *Orchestrator) GetInstanceConnectionInfo(ctx context.Context, databaseID, instanceID string) (*database.ConnectionInfo, error) {
587640
container, err := GetPostgresContainer(ctx, o.docker, instanceID)
588641
if err != nil {

server/internal/orchestrator/swarm/rag_service_user_role.go

Lines changed: 0 additions & 199 deletions
This file was deleted.

0 commit comments

Comments
 (0)