[ https://issues.apache.org/jira/browse/BEAM-13632?focusedWorklogId=708399&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-708399 ]
ASF GitHub Bot logged work on BEAM-13632: ----------------------------------------- Author: ASF GitHub Bot Created on: 13/Jan/22 15:13 Start Date: 13/Jan/22 15:13 Worklog Time Spent: 10m Work Description: KhaninArtur commented on a change in pull request #16493: URL: https://github.com/apache/beam/pull/16493#discussion_r784052287 ########## File path: playground/backend/cmd/server/controller.go ########## @@ -241,20 +241,34 @@ func (controller *playgroundController) Cancel(ctx context.Context, info *pb.Can } // GetPrecompiledObjects returns the list of examples +// - If SDK and category are unspecified in the request, gets the whole catalog from the cache +// - If there is no catalog in the cache, gets the catalog from the Storage and saves it to the cache +// - If SDK or category is specified in the request, gets the specific catalog from the Storage func (controller *playgroundController) GetPrecompiledObjects(ctx context.Context, info *pb.GetPrecompiledObjectsRequest) (*pb.GetPrecompiledObjectsResponse, error) { - bucket := cloud_bucket.New() - sdkToCategories, err := bucket.GetPrecompiledObjects(ctx, info.Sdk, info.Category) - if err != nil { - logger.Errorf("GetPrecompiledObjects(): cloud storage error: %s", err.Error()) - return nil, errors.InternalError("Error during getting Precompiled Objects", "Error with cloud connection") - } - response := pb.GetPrecompiledObjectsResponse{SdkCategories: make([]*pb.Categories, 0)} - for sdkName, categories := range *sdkToCategories { - sdkCategory := pb.Categories{Sdk: pb.Sdk(pb.Sdk_value[sdkName]), Categories: make([]*pb.Categories_Category, 0)} - for categoryName, precompiledObjects := range categories { - utils.PutPrecompiledObjectsToCategory(categoryName, &precompiledObjects, &sdkCategory) + var response pb.GetPrecompiledObjectsResponse + if info.Sdk != pb.Sdk_SDK_UNSPECIFIED || info.Category != "" { + sdkCategories, err := utils.GetPrecompiledObjectsCatalogFromStorage(ctx, info.Sdk, info.Category) + if err != nil { + logger.Errorf("GetPrecompiledObjects(): cloud storage error: %s", err.Error()) + return nil, errors.InternalError("Error during getting Precompiled Objects", "Error with cloud connection") + } + response = pb.GetPrecompiledObjectsResponse{SdkCategories: sdkCategories} Review comment: Good idea, done. ########## File path: playground/backend/internal/utils/precompiled_objects_utils.go ########## @@ -37,3 +46,37 @@ func PutPrecompiledObjectsToCategory(categoryName string, precompiledObjects *cl } sdkCategory.Categories = append(sdkCategory.Categories, &category) } + +// GetPrecompiledObjectsCatalogFromCache returns the precompiled objects catalog from the cache +func GetPrecompiledObjectsCatalogFromCache(ctx context.Context, cacheService cache.Cache) ([]*pb.Categories, error) { + value, err := cacheService.GetValue(ctx, ExamplesDataPipelineId, cache.ExamplesCatalog) + if err != nil { + logger.Errorf("%s: cache.GetValue: %s\n", ExamplesDataPipelineId, err.Error()) + return nil, err + } + catalog, converted := value.([]*pb.Categories) + if !converted { + logger.Errorf("%s: couldn't convert value to catalog: %s", cache.ExamplesCatalog, value) + return nil, errors.InternalError("Error during getting the catalog from cache", "Error during getting status") Review comment: Done ########## File path: playground/backend/internal/utils/precompiled_objects_utils_test.go ########## @@ -73,3 +77,82 @@ func TestPutPrecompiledObjectsToCategory(t *testing.T) { }) } } + +func TestGetPrecompiledObjectsCatalogFromCache(t *testing.T) { + ctx := context.Background() + sdkCategories := []*pb.Categories{ + { + Sdk: pb.Sdk_SDK_JAVA, + Categories: []*pb.Categories_Category{ + { + CategoryName: "TestCategory", PrecompiledObjects: []*pb.PrecompiledObject{ + { + CloudPath: "SDK_JAVA/TestCategory/TestName.java", + Name: "TestName", + Description: "TestDescription", + Type: pb.PrecompiledObjectType_PRECOMPILED_OBJECT_TYPE_EXAMPLE, + }, + }, + }, + }, + }} + type args struct { + ctx context.Context + cacheService cache.Cache + } + tests := []struct { + name string + args args + prepFunc func(cacheService cache.Cache) error + want []*pb.Categories + wantErr bool + }{ + { + // Test case with getting Precompiled Objects Catalog from cache when it exists. + // As a result, want to receive an expected catalog from cache. + name: "get existing catalog", + args: args{ + ctx: ctx, + cacheService: local.New(ctx), + }, + prepFunc: func(cacheService cache.Cache) error { + err := cacheService.SetValue(ctx, uuid.Nil, cache.ExamplesCatalog, sdkCategories) + if err != nil { + return err + } + return nil + }, + want: sdkCategories, + wantErr: false, + }, + // Test case with getting Precompiled Objects Catalog from cache when it doesn't exist. + // As a result, want to receive an error. + { + name: "get missing catalog", Review comment: Done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@beam.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 708399) Time Spent: 50m (was: 40m) > Save catalog data to the cache > ------------------------------ > > Key: BEAM-13632 > URL: https://issues.apache.org/jira/browse/BEAM-13632 > Project: Beam > Issue Type: Sub-task > Components: beam-playground > Reporter: Artur Khanin > Assignee: Artur Khanin > Priority: P2 > Labels: beam-playground-backend > Time Spent: 50m > Remaining Estimate: 0h > -- This message was sent by Atlassian Jira (v8.20.1#820001)