Skip to content

Commit

Permalink
Address feedbacks and fix test cases
Browse files Browse the repository at this point in the history
Signed-off-by: Vu Dinh <vdinh@redhat.com>
  • Loading branch information
dinhxuanvu committed Apr 14, 2020
1 parent 418108d commit 140e881
Show file tree
Hide file tree
Showing 12 changed files with 1,480 additions and 318 deletions.
5 changes: 5 additions & 0 deletions bundles/etcd.0.9.2/metadata/dependencies.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
dependencies:
- type: olm.gvk
group: testapi.coreos.com
kind: testapi
version: v1
4 changes: 4 additions & 0 deletions bundles/prometheus.0.22.2/metadata/dependencies.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
dependencies:
- type: olm.package
packgeName: test-operator
version: >0.2.0
55 changes: 53 additions & 2 deletions pkg/registry/populator_test.go

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions pkg/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,20 @@ func (s *RegistryServer) ListPackages(req *api.ListPackageRequest, stream api.Re
return nil
}

func (s *RegistryServer) ListBundles(req *api.ListBundlesRequest, stream api.Registry_ListBundlesServer) error {
bundles, err := s.store.ListBundles(stream.Context())
if err != nil {
return err
}
for _, b := range bundles {
if err := stream.Send(b); err != nil {
return err
}
}

return nil
}

func (s *RegistryServer) GetPackage(ctx context.Context, req *api.GetPackageRequest) (*api.Package, error) {
packageManifest, err := s.store.GetPackage(ctx, req.GetName())
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions pkg/sqlite/configmap_test.go

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion pkg/sqlite/directory_test.go

Large diffs are not rendered by default.

259 changes: 0 additions & 259 deletions pkg/sqlite/image.go

This file was deleted.

8 changes: 0 additions & 8 deletions pkg/sqlite/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -755,14 +755,6 @@ func (s *SQLLoader) AddBundlePackageChannels(manifest registry.PackageManifest,
}

func (s *SQLLoader) addDependencies(tx *sql.Tx, bundle *registry.Bundle) error {
tx, err := s.db.Begin()
if err != nil {
return err
}
defer func() {
tx.Rollback()
}()

addDep, err := tx.Prepare("insert into dependencies(type, package_name, group_name, version, kind, operatorbundle_name, operatorbundle_version, operatorbundle_path) values(?, ?, ?, ?, ?, ?, ?, ?)")
if err != nil {
return err
Expand Down
68 changes: 66 additions & 2 deletions pkg/sqlite/migrations/008_dependencies.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package migrations
import (
"context"
"database/sql"

"github.com/operator-framework/operator-registry/pkg/registry"
)

const DependenciesMigrationKey = 8
Expand All @@ -25,15 +27,29 @@ var dependenciesMigration = &Migration{
operatorbundle_name TEXT,
operatorbundle_version TEXT,
operatorbundle_path TEXT,
FOREIGN KEY(operatorbundle_name, operatorbundle_version, operatorbundle_path) REFERENCES operatorbundle(name, version, bundlepath) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY(type, package_name, group_name, version, kind) REFERENCES dependencies(type, package_name, group_name, version, kind) ON DELETE CASCADE
FOREIGN KEY(operatorbundle_name, operatorbundle_version, operatorbundle_path) REFERENCES operatorbundle(name, version, bundlepath) ON DELETE CASCADE
);
`
_, err := tx.ExecContext(ctx, sql)
if err != nil {
return err
}

insertRequired := `INSERT INTO dependencies(type, package_name, group_name, version, kind, operatorbundle_name, operatorbundle_version, operatorbundle_path) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`

bundleApis, err := getRequiredAPIs(ctx, tx)
if err != nil {
return err
}
for bundle, apis := range bundleApis {
for required := range apis.required {
_, err := tx.ExecContext(ctx, insertRequired, "olm.gvk", nil, required.Group, required.Version, required.Kind, bundle.CsvName, bundle.Version, bundle.BundlePath)
if err != nil {
return err
}
}
}

return nil
},
Down: func(ctx context.Context, tx *sql.Tx) error {
Expand All @@ -45,3 +61,51 @@ var dependenciesMigration = &Migration{
return err
},
}

func getRequiredAPIs(ctx context.Context, tx *sql.Tx) (map[bundleKey]apis, error) {
bundles := map[bundleKey]apis{}

requiredQuery := `SELECT api_requirer.group_name, api_requirer.version, api_requirer.kind, api_requirer.operatorbundle_name, api_requirer.operatorbundle_version, api_requirer.operatorbundle_path
FROM api_requirer`

requiredRows, err := tx.QueryContext(ctx, requiredQuery)
if err != nil {
return nil, err
}
for requiredRows.Next() {
var group sql.NullString
var apiVersion sql.NullString
var kind sql.NullString
var name sql.NullString
var bundleVersion sql.NullString
var path sql.NullString
if err = requiredRows.Scan(&group, &apiVersion, &kind, &name, &bundleVersion, &path); err != nil {
return nil, err
}
if !group.Valid || !apiVersion.Valid || !kind.Valid || !name.Valid {
continue
}
key := bundleKey{
BundlePath: path,
Version: bundleVersion,
CsvName: name,
}
bundleApis, ok := bundles[key]
if !ok {
bundleApis = apis{
provided: map[registry.APIKey]struct{}{},
required: map[registry.APIKey]struct{}{},
}
}

bundleApis.required[registry.APIKey{
Group: group.String,
Version: apiVersion.String,
Kind: kind.String,
}] = struct{}{}

bundles[key] = bundleApis
}

return bundles, nil
}

0 comments on commit 140e881

Please sign in to comment.