[ 
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)

Reply via email to