You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by pa...@apache.org on 2022/09/29 20:08:06 UTC

[beam] branch master updated: [Playground] [Backend] Removing the code related to the Cloud Storage (#22872)

This is an automated email from the ASF dual-hosted git repository.

pabloem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 5669ef43822 [Playground] [Backend] Removing the code related to the Cloud Storage (#22872)
5669ef43822 is described below

commit 5669ef43822ea4008c93d93c6714354dfb415c01
Author: Vladislav Chunikhin <10...@users.noreply.github.com>
AuthorDate: Fri Sep 30 00:07:56 2022 +0400

    [Playground] [Backend] Removing the code related to the Cloud Storage (#22872)
    
    * [Playground] [Backend] added the datastore query to get an example catalog
    
    * [Playground] [Backend] added datastore queries to get precompiled objects
    
    * [Playground] [Backend] added cache component for examples
    
    * [Playground] [Backend] updated example endpoints
    
    * [Playground] [Backend] added sdk as a part of example response
    
    * [Playground] [Backend] removed the storage client from playground backend
    
    * [Playground] [Backend] refactoring for unit tests
    
    * [Playground] [Backend] refactoring for unit tests
    
    * [Playground] [Backend] refactoring for unit tests
    
    * [Playground] [Backend] refactoring for db utils
    
    * [Playground] [Backend] updated CONTRIBUTE.md file
    
    * [Playground] [Backend] refactoring for datastore db
    
    * [Playground] [Backend] refactoring for datastore db
    
    * [Playground] [Backend] refactoring for datastore db
    
    * [Playground] [Backend] refactoring for datastore db
    
    * [Playground] [Backend] minor refactoring after review
    
    * [Playground] [Backend] minor refactoring after review
    
    * [Playground] [Backend] minor refactoring after review
    
    * [Playground] [Backend] minor refactoring after review
    
    * [Playground] [Backend] updated complexity field
    
    * [Playground] [Backend] updated complexity field
    
    * [Playground] [Backend] updated complexity field
    
    * squash! [Playground] [Backend] updated complexity field
    
    * [Playground] [Backend] updated complexity field
    
    * updated complexity field
    
    * [Playground] [Backend] updated complexity field
    
    * updated complexity field
    
    * [Playground] [Backend] updated complexity field
    
    * updated complexity field
    
    * [Playground] [Backend] fixed integration tests for datastore
    
    * [Playground] [Backend] fixed integration tests for datastore
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] refactoring for integration tests
    
    * [Playground] [Backend] fixed integration tests for datastore
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] refactoring for integration tests
    
    * [Playground] [Backend] added one more gradle task to run tests without cache
    
    * fixed integration tests
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] refactoring for integration tests
    
    * [Playground] [Backend] added one more gradle task to run tests without cache
    
    * [Playground] [Backend] edited test execution
    
    * fixed integration tests
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] refactoring for integration tests
    
    * [Playground] [Backend] added one more gradle task to run tests without cache
    
    * [Playground] [Backend] edited test execution
    
    * fixed integration tests
    
    * [Playground] [Backend] added testing data cleaner
    
    * [Playground] [Backend] refactoring for integration tests
    
    * [Playground] [Backend] added one more gradle task to run tests without cache
    
    * [Playground] [Backend] edited test execution
    
    * [Playground] [Backend] updated playground README
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] updated unit tests for diferent namespaces
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] updated unit tests for diferent namespaces
    
    * [Playground] [Backend] edited cache component tests
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] updated unit tests for diferent namespaces
    
    * [Playground] [Backend] edited cache component tests
    
    * [Playground] [Backend] updated integration tests
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] updated unit tests for diferent namespaces
    
    * [Playground] [Backend] edited cache component tests
    
    * [Playground] [Backend] updated integration tests
    
    * [Playground] [Backend] edited getting datastore key
    
    * [Playground] [Backend] updated unit tests for diferent namespaces
    
    * [Playground] [Backend] edited cache component tests
    
    * [Playground] [Backend] updated integration tests
    
    * [Playground] [Infrastructure] added the datastore client
    
    * [Playground] [Infrastructure] added the type property to an example entity
    
    * [Playground] [Infrastructure] removed the cloud storage client
    
    * [Playground] [Infrastructure] changed validation examples for duplicates by name
    
    * [Playground] [Infrastructure] fixed duplicated example names
    
    * [Playground] [Infrastructure] added the google cloud project id as an env variable
    
    * [Playground] [Backend] updated docker files for runners
    
    * [Playground] [Backend] added SDK validation to save a code snippet
    
    * [Playground] [Backend] removed comments
    
    * [Playground] [Backend] resolved comments after review
    
    * [Playground] [Infrastructure] updated dependency versions
    
    * [Playground] [Backend] fixed the java runner for examples with graphs
    
    * [Playground] [Infrastructure] added loading catalogs to the cloud datastore
    
    * [Playground] [Backend] remove extra imports after merging
    
    * [Playground] [Backend] fixes after merging with other branches
    
    * [Playground] [Backend] added genreics for one method
    
    * [Playground] [Backend] fixes after merging
    
    * [Playground] [Backend] fixes after merging
    
    * fixing dependencies after merge
    
    fixing dependencies after merge with failed tests
    
    Co-authored-by: oborysevych <ol...@akvelon.com>
---
 playground/README.md                               |   7 +
 playground/api/v1/api.proto                        |   4 +-
 playground/backend/CONTRIBUTE.md                   |  12 +-
 playground/backend/build.gradle.kts                |   1 -
 playground/backend/containers/go/Dockerfile        |   1 -
 playground/backend/containers/java/Dockerfile      |   1 -
 playground/backend/containers/python/Dockerfile    |   1 -
 playground/backend/containers/router/Dockerfile    |   1 -
 playground/backend/containers/scio/Dockerfile      |   1 -
 playground/backend/go.mod                          |   5 +-
 playground/backend/go.sum                          |   9 +-
 playground/backend/internal/api/v1/api_grpc.pb.go  |   8 +-
 .../internal/cloud_bucket/precompiled_objects.go   | 433 ---------------------
 .../cloud_bucket/precompiled_objects_test.go       | 264 -------------
 playground/backend/internal/db/entity/snippet.go   |  24 +-
 .../internal/db/mapper/datastore_mapper_test.go    |   2 +-
 .../db/schema/migration/migration_v001_test.go     |   2 +-
 .../backend/internal/environment/application.go    |  11 +-
 .../internal/environment/environment_service.go    |  10 +-
 .../environment/environment_service_test.go        |  17 +-
 .../backend/internal/utils/datastore_utils.go      |  21 -
 .../backend/internal/utils/datastore_utils_test.go |  36 --
 .../internal/utils/precompiled_objects_utils.go    |  87 -----
 .../utils/precompiled_objects_utils_test.go        | 125 +-----
 playground/infrastructure/proxy/allow_list.py      |   1 -
 25 files changed, 56 insertions(+), 1028 deletions(-)

diff --git a/playground/README.md b/playground/README.md
index 11e17ff0322..61099924829 100644
--- a/playground/README.md
+++ b/playground/README.md
@@ -81,6 +81,13 @@ cd beam
 ./gradlew playground:backend:removeUnusedSnippet -DdayDiff={int} -DprojectId={string}
 ```
 
+## Run playground tests without cache
+
+```
+cd beam
+ ./gradlew playground:backend:testWithoutCache
+```
+
 # Deployment
 
 See [terraform](./terraform/README.md) for details on how to build and deploy
diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto
index 68d2c9e7651..4a458d3750c 100644
--- a/playground/api/v1/api.proto
+++ b/playground/api/v1/api.proto
@@ -315,10 +315,10 @@ service PlaygroundService {
   // Cancel code processing
   rpc Cancel(CancelRequest) returns (CancelResponse);
 
-  // Get all precompiled objects from the cloud storage.
+  // Get all precompiled objects from the cloud datastore.
   rpc GetPrecompiledObjects(GetPrecompiledObjectsRequest) returns (GetPrecompiledObjectsResponse);
 
-  // Get precompiled object from the cloud storage.
+  // Get precompiled object from the cloud datastore.
   rpc GetPrecompiledObject(GetPrecompiledObjectRequest) returns (GetPrecompiledObjectResponse);
 
   // Get the code of an PrecompiledObject.
diff --git a/playground/backend/CONTRIBUTE.md b/playground/backend/CONTRIBUTE.md
index 32ba1c57673..ee26798ede6 100644
--- a/playground/backend/CONTRIBUTE.md
+++ b/playground/backend/CONTRIBUTE.md
@@ -36,8 +36,10 @@ backend/
 ├── internal              # backend business logic
 │   ├── api                   # generated grpc API files
 │   ├── cache                 # logic of work with cache
-│   ├── cloud_bucket          # logic of work with cloud buckets and precompiled objects
 │   ├── code_processing       # logic of processing the received code
+│   ├── components            # logic of work for more difficult processes using several packages
+│   ├── constants             # application constants to use them anywhere in the application
+│   ├── db                    # logic of work with database, e.g. the Cloud Datastore
 │   ├── environment           # backend environments e.g. SDK of the instance
 │   ├── errors                # custom errors to send them to the client
 │   ├── executors             # logic of work with code executors
@@ -46,10 +48,14 @@ backend/
 │   ├── preparers             # logic of preparing code before execution
 │   ├── setup_tools           # logic of set up of executors and file systems by SDK requirements
 │   ├── streaming             # logic of saving execution output as a stream
+│   ├── tests                 # logic of work with unit/integration tests in the application, e.g. testing scripts to download mock data to database
 │   ├── utils                 # different useful tools
 │   └── validators            # logic of validation code before execution
-├── go.mod                # define backend go module and contain all project's dependencies
-├── logging.properties    # config file to set up log for Java code
+├── go.mod                        # define backend go module and contain all project's dependencies
+├── logging.properties            # config file to set up log for Java code
+├── properties.yaml               # property file consists of application properties required for the operation logic
+├── start_datastore_emulator.sh   # shell script to run the datastore emulator for local deployment or testing
+├── stop_datastore_emulator.sh    # shell script to stop the datastore emulator
 ...
 ```
 
diff --git a/playground/backend/build.gradle.kts b/playground/backend/build.gradle.kts
index 8a66cad854e..124622b3a9e 100644
--- a/playground/backend/build.gradle.kts
+++ b/playground/backend/build.gradle.kts
@@ -131,7 +131,6 @@ task("benchmarkCodeProcessing") {
 }
 
 task("benchmark") {
-  dependsOn(":playground:backend:benchmarkPrecompiledObjects")
   dependsOn(":playground:backend:benchmarkCodeProcessing")
 }
 
diff --git a/playground/backend/containers/go/Dockerfile b/playground/backend/containers/go/Dockerfile
index db162e9bfe8..857d9157044 100644
--- a/playground/backend/containers/go/Dockerfile
+++ b/playground/backend/containers/go/Dockerfile
@@ -55,7 +55,6 @@ ENV SERVER_IP=0.0.0.0
 ENV SERVER_PORT=8080
 ENV APP_WORK_DIR=/opt/playground/backend/
 ENV BEAM_SDK="SDK_GO"
-ENV BUCKET_NAME="playground-precompiled-objects"
 ENV PROPERTY_PATH=/opt/playground/backend/properties.yaml
 ## Copy build result
 COPY src/configs /opt/playground/backend/configs/
diff --git a/playground/backend/containers/java/Dockerfile b/playground/backend/containers/java/Dockerfile
index ccc6f096920..6f2e564ff06 100644
--- a/playground/backend/containers/java/Dockerfile
+++ b/playground/backend/containers/java/Dockerfile
@@ -46,7 +46,6 @@ ENV SERVER_IP=0.0.0.0
 ENV SERVER_PORT=8080
 ENV APP_WORK_DIR=/opt/playground/backend/
 ENV BEAM_SDK="SDK_JAVA"
-ENV BUCKET_NAME="playground-precompiled-objects"
 ENV PROPERTY_PATH=/opt/playground/backend/properties.yaml
 
 # Copy build result
diff --git a/playground/backend/containers/python/Dockerfile b/playground/backend/containers/python/Dockerfile
index ca7669f96b6..2a9182a129a 100644
--- a/playground/backend/containers/python/Dockerfile
+++ b/playground/backend/containers/python/Dockerfile
@@ -42,7 +42,6 @@ ENV SERVER_IP=0.0.0.0
 ENV SERVER_PORT=8080
 ENV APP_WORK_DIR=/opt/playground/backend/
 ENV BEAM_SDK="SDK_PYTHON"
-ENV BUCKET_NAME="playground-precompiled-objects"
 ENV PROPERTY_PATH=/opt/playground/backend/properties.yaml
 
 # Copy build result
diff --git a/playground/backend/containers/router/Dockerfile b/playground/backend/containers/router/Dockerfile
index a15edd56d25..e56443412b5 100644
--- a/playground/backend/containers/router/Dockerfile
+++ b/playground/backend/containers/router/Dockerfile
@@ -68,7 +68,6 @@ ENV SERVER_IP=0.0.0.0
 ENV SERVER_PORT=8080
 ENV APP_WORK_DIR=/opt/playground/backend/
 ENV BEAM_SDK="SDK_UNSPECIFIED"
-ENV BUCKET_NAME="playground-precompiled-objects"
 ENV SDK_CONFIG=/opt/playground/backend/sdks.yaml
 ENV PROPERTY_PATH=/opt/playground/backend/
 
diff --git a/playground/backend/containers/scio/Dockerfile b/playground/backend/containers/scio/Dockerfile
index e84f152e2a3..6df3c0ad4b8 100644
--- a/playground/backend/containers/scio/Dockerfile
+++ b/playground/backend/containers/scio/Dockerfile
@@ -40,7 +40,6 @@ ENV SERVER_IP=0.0.0.0
 ENV SERVER_PORT=8080
 ENV APP_WORK_DIR=/opt/playground/backend/
 ENV BEAM_SDK="SDK_SCIO"
-ENV BUCKET_NAME="playground-precompiled-objects"
 ENV PROPERTY_PATH=/opt/playground/backend/properties.yaml
 
 # Copy build result
diff --git a/playground/backend/go.mod b/playground/backend/go.mod
index aa22bf22f5c..87da2468e62 100644
--- a/playground/backend/go.mod
+++ b/playground/backend/go.mod
@@ -20,7 +20,6 @@ go 1.18
 require (
 	cloud.google.com/go/datastore v1.6.0
 	cloud.google.com/go/logging v1.4.2
-	cloud.google.com/go/storage v1.23.0
 	github.com/go-redis/redis/v8 v8.11.4
 	github.com/go-redis/redismock/v8 v8.0.6
 	github.com/google/uuid v1.3.0
@@ -29,7 +28,6 @@ require (
 	github.com/rs/cors v1.8.0
 	github.com/spf13/viper v1.12.0
 	go.uber.org/goleak v1.1.12
-	google.golang.org/api v0.85.0
 	google.golang.org/grpc v1.47.0
 	google.golang.org/protobuf v1.28.0
 	gopkg.in/yaml.v3 v3.0.1
@@ -38,7 +36,6 @@ require (
 require (
 	cloud.google.com/go v0.102.1 // indirect
 	cloud.google.com/go/compute v1.7.0 // indirect
-	cloud.google.com/go/iam v0.3.0 // indirect
 	github.com/cespare/xxhash/v2 v2.1.2 // indirect
 	github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
@@ -48,7 +45,6 @@ require (
 	github.com/google/go-cmp v0.5.8 // indirect
 	github.com/googleapis/enterprise-certificate-proxy v0.1.0 // indirect
 	github.com/googleapis/gax-go/v2 v2.4.0 // indirect
-	github.com/googleapis/go-type-adapters v1.0.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/klauspost/compress v1.13.1 // indirect
 	github.com/magiconair/properties v1.8.6 // indirect
@@ -67,6 +63,7 @@ require (
 	golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect
 	golang.org/x/text v0.3.7 // indirect
 	golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
+	google.golang.org/api v0.84.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad // indirect
 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
diff --git a/playground/backend/go.sum b/playground/backend/go.sum
index 9daeae75b17..523fbdd940d 100644
--- a/playground/backend/go.sum
+++ b/playground/backend/go.sum
@@ -49,7 +49,6 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7
 cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
 cloud.google.com/go/datastore v1.6.0 h1:wZaHIqu1tebvGRYhVgcfNX6jN2q638OGO23JyJckxuI=
 cloud.google.com/go/datastore v1.6.0/go.mod h1:q3ZJj1GMQRdU0OCv5XXpCqfLqHHZnI5zcumkvuYDmHI=
-cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
 cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
 cloud.google.com/go/logging v1.4.2 h1:Mu2Q75VBDQlW1HlBMjTX4X84UFR73G1TiLlRYc/b7tA=
 cloud.google.com/go/logging v1.4.2/go.mod h1:jco9QZSx8HiVVqLJReq7z7bVdj0P1Jb9PDFs63T+axo=
@@ -64,8 +63,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
-cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY=
-cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -250,11 +247,9 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8
 github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ=
 github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -287,7 +282,6 @@ github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/Oth
 github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=
 github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk=
 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
-github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA=
 github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
 github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -910,9 +904,8 @@ google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRR
 google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
 google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=
 google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
+google.golang.org/api v0.84.0 h1:NMB9J4cCxs9xEm+1Z9QiO3eFvn7EnQj3Eo3hN6ugVlg=
 google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o=
-google.golang.org/api v0.85.0 h1:8rJoHuRxx+vCmZtAO/3k1dRLvYNVyTJtZ5oaFZvhgvc=
-google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
diff --git a/playground/backend/internal/api/v1/api_grpc.pb.go b/playground/backend/internal/api/v1/api_grpc.pb.go
index 16c990d37fb..aa5bac81531 100644
--- a/playground/backend/internal/api/v1/api_grpc.pb.go
+++ b/playground/backend/internal/api/v1/api_grpc.pb.go
@@ -55,9 +55,9 @@ type PlaygroundServiceClient interface {
 	GetCompileOutput(ctx context.Context, in *GetCompileOutputRequest, opts ...grpc.CallOption) (*GetCompileOutputResponse, error)
 	// Cancel code processing
 	Cancel(ctx context.Context, in *CancelRequest, opts ...grpc.CallOption) (*CancelResponse, error)
-	// Get all precompiled objects from the cloud storage.
+	// Get all precompiled objects from the cloud datastore.
 	GetPrecompiledObjects(ctx context.Context, in *GetPrecompiledObjectsRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectsResponse, error)
-	// Get precompiled object from the cloud storage.
+	// Get precompiled object from the cloud datastore.
 	GetPrecompiledObject(ctx context.Context, in *GetPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectResponse, error)
 	// Get the code of an PrecompiledObject.
 	GetPrecompiledObjectCode(ctx context.Context, in *GetPrecompiledObjectCodeRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectCodeResponse, error)
@@ -278,9 +278,9 @@ type PlaygroundServiceServer interface {
 	GetCompileOutput(context.Context, *GetCompileOutputRequest) (*GetCompileOutputResponse, error)
 	// Cancel code processing
 	Cancel(context.Context, *CancelRequest) (*CancelResponse, error)
-	// Get all precompiled objects from the cloud storage.
+	// Get all precompiled objects from the cloud datastore.
 	GetPrecompiledObjects(context.Context, *GetPrecompiledObjectsRequest) (*GetPrecompiledObjectsResponse, error)
-	// Get precompiled object from the cloud storage.
+	// Get precompiled object from the cloud datastore.
 	GetPrecompiledObject(context.Context, *GetPrecompiledObjectRequest) (*GetPrecompiledObjectResponse, error)
 	// Get the code of an PrecompiledObject.
 	GetPrecompiledObjectCode(context.Context, *GetPrecompiledObjectCodeRequest) (*GetPrecompiledObjectCodeResponse, error)
diff --git a/playground/backend/internal/cloud_bucket/precompiled_objects.go b/playground/backend/internal/cloud_bucket/precompiled_objects.go
deleted file mode 100644
index 76eb6a71985..00000000000
--- a/playground/backend/internal/cloud_bucket/precompiled_objects.go
+++ /dev/null
@@ -1,433 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package cloud_bucket
-
-import (
-	pb "beam.apache.org/playground/backend/internal/api/v1"
-	"beam.apache.org/playground/backend/internal/logger"
-	"cloud.google.com/go/storage"
-	"context"
-	"encoding/json"
-	"fmt"
-	"google.golang.org/api/iterator"
-	"google.golang.org/api/option"
-	"io"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"strings"
-	"time"
-)
-
-const (
-	OutputExtension              = "output"
-	LogsExtension                = "log"
-	GraphExtension               = "graph"
-	defaultPrecompiledObjectInfo = "defaultPrecompiledObject.info"
-	MetaInfoName                 = "meta.info"
-	Timeout                      = time.Minute
-	javaExtension                = "java"
-	goExtension                  = "go"
-	pyExtension                  = "py"
-	scioExtension                = "scala"
-	separatorsNumber             = 3
-)
-
-type ObjectInfo struct {
-	Name            string
-	CloudPath       string
-	Description     string                   `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
-	Type            pb.PrecompiledObjectType `protobuf:"varint,4,opt,name=type,proto3,enum=api.v1.PrecompiledObjectType" json:"type,omitempty"`
-	Categories      []string                 `json:"categories,omitempty"`
-	PipelineOptions string                   `protobuf:"bytes,3,opt,name=pipeline_options,proto3" json:"pipeline_options,omitempty"`
-	Link            string                   `protobuf:"bytes,3,opt,name=link,proto3" json:"link,omitempty"`
-	Multifile       bool                     `protobuf:"varint,7,opt,name=multifile,proto3" json:"multifile,omitempty"`
-	ContextLine     int32                    `protobuf:"varint,7,opt,name=context_line,proto3" json:"context_line,omitempty"`
-	DefaultExample  bool                     `protobuf:"varint,7,opt,name=default_example,json=defaultExample,proto3" json:"default_example,omitempty"`
-}
-
-type PrecompiledObjects []ObjectInfo
-type CategoryToPrecompiledObjects map[string]PrecompiledObjects
-type SdkToCategories map[string]CategoryToPrecompiledObjects
-
-// CloudStorage represents working tools for getting compiled and
-// run beam examples from Google Cloud Storage. It is required that
-// the bucket where examples are stored would be public,
-// and it has a specific structure of files, namely:
-// SDK_JAVA/
-// ----defaultPrecompiledObject.info
-// ----PRECOMPILED_OBJECT_TYPE_EXAMPLE/
-// --------MinimalWordCount/
-// ----------- MinimalWordCount.java
-// ----------- MinimalWordCount.output
-// ----------- MinimalWordCount.log
-// ----------- MinimalWordCount.graph
-// ----------- meta.info
-// --------JoinExamples/
-// ----------- JoinExamples.java
-// ----------- JoinExamples.output
-// ----------- JoinExamples.log
-// ----------- JoinExamples.graph
-// ----------- meta.info
-// ----PRECOMPILED_OBJECT_TYPE_KATA/
-// --------...
-// ----...
-// SDK_GO/
-// ----defaultPrecompiledObject.info
-// ----PRECOMPILED_OBJECT_TYPE_EXAMPLE/
-// --------MinimalWordCount/
-// ----------- MinimalWordCount.go
-// ----------- MinimalWordCount.output
-// ----------- MinimalWordCount.log
-// ----------- MinimalWordCount.graph
-// ----------- meta.info
-// --------PingPong/
-// ----PRECOMPILED_OBJECT_TYPE_KATA/
-// --------...
-// ----...
-//
-// defaultPrecompiledObject.info is a file that contains path to the default example:
-// {
-//   "SDK_JAVA": "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_EXAMPLE/MinimalWordCount"
-// }
-//
-// meta.info is a json file that has the following fields:
-// {
-//  "name": "name of the example",
-//	"description": "Description of an example",
-//  "multifile": false
-//	"categories": ["Common", "IO"]
-//  "pipeline_options": "--key1 value1",
-//  "default_example": false,
-//  "context_line": 1,
-//  "link": "https://github.com/apache/beam/blob/master/path/to/example"
-// }
-//
-type CloudStorage struct {
-}
-
-func New() *CloudStorage {
-	return &CloudStorage{}
-}
-
-// GetPrecompiledObject returns the precompiled example
-func (cd *CloudStorage) GetPrecompiledObject(ctx context.Context, precompiledObjectPath, bucketName string) (*pb.PrecompiledObject, error) {
-	cloudPath := filepath.Join(precompiledObjectPath, MetaInfoName)
-	data, err := cd.getFileFromBucket(ctx, cloudPath, "", bucketName)
-	if err != nil {
-		return nil, err
-	}
-	precompiledObject := &pb.PrecompiledObject{}
-	err = json.Unmarshal(data, precompiledObject)
-	if err != nil {
-		logger.Errorf("json.Unmarshal: %v", err.Error())
-		return nil, err
-	}
-	precompiledObject.CloudPath = precompiledObjectPath
-	return precompiledObject, nil
-}
-
-// GetPrecompiledObjectCode returns the source code of the example
-func (cd *CloudStorage) GetPrecompiledObjectCode(ctx context.Context, precompiledObjectPath, bucketName string) (string, error) {
-	extension, err := getFileExtensionBySdk(precompiledObjectPath)
-	if err != nil {
-		return "", err
-	}
-	data, err := cd.getFileFromBucket(ctx, precompiledObjectPath, extension, bucketName)
-	if err != nil {
-		return "", err
-	}
-	result := string(data)
-	return result, nil
-}
-
-// GetPrecompiledObjectOutput returns the run output of the example
-func (cd *CloudStorage) GetPrecompiledObjectOutput(ctx context.Context, precompiledObjectPath, bucketName string) (string, error) {
-	data, err := cd.getFileFromBucket(ctx, precompiledObjectPath, OutputExtension, bucketName)
-	if err != nil {
-		return "", err
-	}
-	result := string(data)
-	return result, nil
-}
-
-// GetPrecompiledObjectLogs returns the logs of the example
-func (cd *CloudStorage) GetPrecompiledObjectLogs(ctx context.Context, precompiledObjectPath, bucketName string) (string, error) {
-	data, err := cd.getFileFromBucket(ctx, precompiledObjectPath, LogsExtension, bucketName)
-	if err != nil {
-		return "", err
-	}
-	result := string(data)
-	return result, nil
-}
-
-// GetPrecompiledObjectGraph returns the graph of the example
-func (cd *CloudStorage) GetPrecompiledObjectGraph(ctx context.Context, precompiledObjectPath, bucketName string) (string, error) {
-	data, err := cd.getFileFromBucket(ctx, precompiledObjectPath, GraphExtension, bucketName)
-	if err != nil {
-		return "", err
-	}
-	return string(data), nil
-}
-
-// GetPrecompiledObjects returns stored at the cloud storage bucket precompiled objects for the target category
-func (cd *CloudStorage) GetPrecompiledObjects(ctx context.Context, targetSdk pb.Sdk, targetCategory, bucketName string) (*SdkToCategories, error) {
-	client, err := storage.NewClient(ctx, option.WithoutAuthentication())
-	if err != nil {
-		return nil, fmt.Errorf("storage.NewClient: %v", err)
-	}
-	defer client.Close()
-
-	ctx, cancel := context.WithTimeout(ctx, Timeout)
-	defer cancel()
-
-	precompiledObjects := make(SdkToCategories, 0)
-	bucket := client.Bucket(bucketName)
-
-	dirs, err := cd.getPrecompiledObjectsDirs(ctx, targetSdk, bucket)
-	if err != nil {
-		return nil, err
-	}
-	metaFiles := make(map[string][]byte, 0)
-	for objectDir := range dirs {
-		infoPath := filepath.Join(objectDir, MetaInfoName) // helping file with information about this object
-		rc, err := bucket.Object(infoPath).NewReader(ctx)
-		if err != nil {
-			logger.Errorf("Object(%q).NewReader: %v", infoPath, err.Error())
-			continue
-		}
-		metaFile, err := ioutil.ReadAll(rc)
-		if err != nil {
-			logger.Errorf("ioutil.ReadAll: %v", err.Error())
-			continue
-		}
-		metaFiles[objectDir] = metaFile
-		rc.Close()
-	}
-
-	for objectDir, metaFile := range metaFiles {
-		precompiledObject := ObjectInfo{}
-		err = json.Unmarshal(metaFile, &precompiledObject)
-		if err != nil {
-			logger.Errorf("json.Unmarshal: %v", err.Error())
-			continue
-		}
-
-		folderName := strings.Split(objectDir, string(os.PathSeparator))[1]
-		precompiledObject.Type = pb.PrecompiledObjectType(pb.PrecompiledObjectType_value[folderName])
-
-		for _, objectCategory := range precompiledObject.Categories {
-			if targetCategory == "" || targetCategory == objectCategory { //take only requested categories
-				appendPrecompiledObject(precompiledObject, &precompiledObjects, objectDir, objectCategory)
-			}
-		}
-	}
-	return &precompiledObjects, nil
-}
-
-// GetDefaultPrecompiledObjects returns the default precompiled objects
-func (cd *CloudStorage) GetDefaultPrecompiledObjects(ctx context.Context, bucketName string) (map[pb.Sdk]*pb.PrecompiledObject, error) {
-	client, err := storage.NewClient(ctx, option.WithoutAuthentication())
-	if err != nil {
-		return nil, fmt.Errorf("storage.NewClient: %v", err)
-	}
-	defer client.Close()
-	bucket := client.Bucket(bucketName)
-
-	paths := make(map[pb.Sdk]string, 0)
-	for _, sdkName := range pb.Sdk_name {
-		sdk := pb.Sdk(pb.Sdk_value[sdkName])
-		if sdk == pb.Sdk_SDK_UNSPECIFIED {
-			continue
-		}
-		path, err := cd.getDefaultPrecompiledObjectsPath(ctx, bucket, sdk)
-		if err != nil {
-			return nil, err
-		}
-		paths[sdk] = path
-	}
-
-	defaultPrecompiledObjects := make(map[pb.Sdk]*pb.PrecompiledObject, 0)
-	for sdk, path := range paths {
-		infoPath := filepath.Join(path, MetaInfoName)
-		rc, err := bucket.Object(infoPath).NewReader(ctx)
-		if err != nil {
-			logger.Errorf("Object(%q).NewReader: %v", infoPath, err.Error())
-			continue
-		}
-		metaFile, err := ioutil.ReadAll(rc)
-		if err != nil {
-			logger.Errorf("ioutil.ReadAll: %v", err.Error())
-			continue
-		}
-		rc.Close()
-
-		precompiledObject := &pb.PrecompiledObject{}
-		err = json.Unmarshal(metaFile, &precompiledObject)
-		if err != nil {
-			logger.Errorf("json.Unmarshal: %v", err.Error())
-			return nil, err
-		}
-		precompiledObject.CloudPath = path
-		defaultPrecompiledObjects[sdk] = precompiledObject
-	}
-	return defaultPrecompiledObjects, nil
-}
-
-// getDefaultPrecompiledObjectsPath returns path for SDK to the default precompiled object
-func (cd *CloudStorage) getDefaultPrecompiledObjectsPath(ctx context.Context, bucket *storage.BucketHandle, sdk pb.Sdk) (string, error) {
-	pathToFile := fmt.Sprintf("%s/%s", sdk.String(), defaultPrecompiledObjectInfo)
-	rc, err := bucket.Object(pathToFile).NewReader(ctx)
-	if err != nil {
-		logger.Errorf("Object(%q).NewReader: %v", pathToFile, err.Error())
-		return "", err
-	}
-
-	data, err := io.ReadAll(rc)
-	if err != nil {
-		logger.Errorf("ioutil.ReadAll: %v", err.Error())
-		return "", err
-	}
-
-	path := make(map[string]string, 0)
-	if err := json.Unmarshal(data, &path); err != nil {
-		return "", err
-	}
-	return path[sdk.String()], nil
-}
-
-// getPrecompiledObjectsDirs finds directories with precompiled objects
-// Since there is no notion of directory at cloud storage, then
-// to avoid duplicates of a base path (directory) need to store it in a set/map.
-func (cd *CloudStorage) getPrecompiledObjectsDirs(ctx context.Context, targetSdk pb.Sdk, bucket *storage.BucketHandle) (map[string]bool, error) {
-	prefix := targetSdk.String()
-	if targetSdk == pb.Sdk_SDK_UNSPECIFIED {
-		prefix = ""
-	}
-	it := bucket.Objects(ctx, &storage.Query{
-		Prefix: prefix,
-	})
-	objectDirs := make(map[string]bool, 0)
-	for {
-		attrs, err := it.Next()
-		if err == iterator.Done {
-			break
-		}
-		if err != nil {
-			bucketAttrs, errWithAttrs := bucket.Attrs(ctx)
-			if errWithAttrs != nil {
-				return nil, fmt.Errorf("error during receiving bucket's attributes: %s", err)
-			}
-			return nil, fmt.Errorf("Bucket(%q).Objects: %v", bucketAttrs.Name, err)
-		}
-		path := attrs.Name
-		if isPathToPrecompiledObjectFile(path) {
-			objectDirs[filepath.Dir(path)] = true //save base path (directory) of a file
-		}
-	}
-	return objectDirs, nil
-}
-
-// appendPrecompiledObject add precompiled object to the common structure of precompiled objects
-func appendPrecompiledObject(objectInfo ObjectInfo, sdkToCategories *SdkToCategories, pathToObject string, categoryName string) {
-	sdkName := getSdkName(pathToObject)
-	categoryToPrecompiledObjects, ok := (*sdkToCategories)[sdkName]
-	if !ok {
-		(*sdkToCategories)[sdkName] = make(CategoryToPrecompiledObjects, 0)
-		categoryToPrecompiledObjects = (*sdkToCategories)[sdkName]
-	}
-	objects, ok := categoryToPrecompiledObjects[categoryName]
-	if !ok {
-		categoryToPrecompiledObjects[categoryName] = make(PrecompiledObjects, 0)
-		objects = categoryToPrecompiledObjects[categoryName]
-	}
-	objectInfo.CloudPath = pathToObject
-	objectInfo.Name = filepath.Base(pathToObject)
-	categoryToPrecompiledObjects[categoryName] = append(objects, objectInfo)
-}
-
-// getFileFromBucket receives the file from the bucket by its name
-func (cd *CloudStorage) getFileFromBucket(ctx context.Context, pathToObject string, extension, bucketName string) ([]byte, error) {
-	client, err := storage.NewClient(ctx, option.WithoutAuthentication())
-	if err != nil {
-		return nil, fmt.Errorf("storage.NewClient: %v", err)
-	}
-	defer client.Close()
-
-	ctx, cancel := context.WithTimeout(ctx, Timeout)
-	defer cancel()
-
-	bucket := client.Bucket(bucketName)
-
-	filePath := pathToObject
-	if extension != "" {
-		filePath = getFullFilePath(pathToObject, extension)
-	}
-	rc, err := bucket.Object(filePath).NewReader(ctx)
-	if err != nil {
-		return nil, fmt.Errorf("Object(%q).NewReader: %v", filePath, err)
-	}
-	defer rc.Close()
-
-	data, err := ioutil.ReadAll(rc)
-	if err != nil {
-		return nil, fmt.Errorf("ioutil.ReadAll: %v", err)
-	}
-	return data, nil
-}
-
-// getFileExtensionBySdk get extension of the file with code by the sdk name
-func getFileExtensionBySdk(precompiledObjectPath string) (string, error) {
-	sdk := strings.Split(precompiledObjectPath, string(os.PathSeparator))[0]
-	var extension string
-	switch sdk {
-	case pb.Sdk_SDK_JAVA.String():
-		extension = javaExtension
-	case pb.Sdk_SDK_PYTHON.String():
-		extension = pyExtension
-	case pb.Sdk_SDK_GO.String():
-		extension = goExtension
-	case pb.Sdk_SDK_SCIO.String():
-		extension = scioExtension
-	default:
-		return "", fmt.Errorf("")
-	}
-	return extension, nil
-}
-
-// getFullFilePath get full path to the precompiled object file
-func getFullFilePath(objectDir string, extension string) string {
-	precompiledObjectName := filepath.Base(objectDir) //the base of the object's directory matches the name of the file
-	fileName := strings.Join([]string{precompiledObjectName, extension}, ".")
-	filePath := filepath.Join(objectDir, fileName)
-	return filePath
-}
-
-// isPathToPrecompiledObjectFile is it a path where precompiled object is stored (i.e. SDK/ObjectType/ObjectName/ObjectCode.sdkExtension)
-func isPathToPrecompiledObjectFile(path string) bool {
-	return strings.Count(path, string(os.PathSeparator)) == separatorsNumber && !isDir(path)
-}
-
-// isDir checks whether the path imitates directory
-func isDir(path string) bool {
-	return path[len(path)-1] == os.PathSeparator
-}
-
-// getSdkName gets category and sdk from the filepath
-func getSdkName(path string) string {
-	sdkName := strings.Split(path, string(os.PathSeparator))[0] // the path of the form "sdkName/example/", where the first part is sdkName
-	return sdkName
-}
diff --git a/playground/backend/internal/cloud_bucket/precompiled_objects_test.go b/playground/backend/internal/cloud_bucket/precompiled_objects_test.go
deleted file mode 100644
index ece483443b6..00000000000
--- a/playground/backend/internal/cloud_bucket/precompiled_objects_test.go
+++ /dev/null
@@ -1,264 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package cloud_bucket
-
-import (
-	pb "beam.apache.org/playground/backend/internal/api/v1"
-	"context"
-	"reflect"
-	"testing"
-)
-
-const (
-	precompiledObjectPath = "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_EXAMPLE/MinimalWordCount"
-	targetSdk             = pb.Sdk_SDK_UNSPECIFIED
-	defaultBucketName     = "playground-precompiled-objects"
-)
-
-var bucket *CloudStorage
-var ctx context.Context
-
-func init() {
-	bucket = New()
-	ctx = context.Background()
-}
-
-func Test_getFullFilePath(t *testing.T) {
-	type args struct {
-		examplePath string
-		extension   string
-	}
-	tests := []struct {
-		name string
-		args args
-		want string
-	}{
-		{
-			// Try to get the full path to the code of the precompiled example
-			// by the path to its directory on Cloud Storage:
-			// (SDK_JAVA/HelloWorld, java) -> SDK_JAVA/HelloWorld/HelloWorld.java
-			name: "Test getFullFilePath()",
-			args: args{
-				examplePath: "SDK_JAVA/HelloWorld",
-				extension:   "java",
-			},
-			want: "SDK_JAVA/HelloWorld/HelloWorld.java",
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			if got := getFullFilePath(tt.args.examplePath, tt.args.extension); got != tt.want {
-				t.Errorf("getFullFilePath() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Test_getSdkName(t *testing.T) {
-	type args struct {
-		path string
-	}
-	tests := []struct {
-		name string
-		args args
-		want string
-	}{
-		{
-			// Try to get the name of the SDK from the path
-			name: "Test getSdkName",
-			args: args{path: "SDK_JAVA/HelloWorld"},
-			want: "SDK_JAVA",
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			if got := getSdkName(tt.args.path); got != tt.want {
-				t.Errorf("getSdkName() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Test_isDir(t *testing.T) {
-	type args struct {
-		path string
-	}
-	tests := []struct {
-		name string
-		args args
-		want bool
-	}{
-		{
-			name: "Test isDir if it is a directory",
-			args: args{path: "SDK_JAVA/HelloWorld/"},
-			want: true,
-		},
-		{
-			name: "Test isDir if it is a file",
-			args: args{path: "SDK_JAVA/HelloWorld/HelloWorld.java"},
-			want: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			if got := isDir(tt.args.path); got != tt.want {
-				t.Errorf("isDir() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Test_isPathToPrecompiledObjectFile(t *testing.T) {
-	type args struct {
-		path string
-	}
-	tests := []struct {
-		name string
-		args args
-		want bool
-	}{
-		{
-			name: "Test if path is valid",
-			args: args{path: "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_EXAMPLE/HelloWorld/HelloWorld.java"},
-			want: true,
-		},
-		{
-			name: "Test if path is not valid",
-			args: args{path: "SDK_JAVA/PRECOMPILED_OBJECT_TYPE_EXAMPLE/HelloWorld/"},
-			want: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			if got := isPathToPrecompiledObjectFile(tt.args.path); got != tt.want {
-				t.Errorf("isPathToPrecompiledObjectFile() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Test_appendPrecompiledObject(t *testing.T) {
-	type args struct {
-		objectInfo      ObjectInfo
-		sdkToCategories *SdkToCategories
-		pathToObject    string
-		categoryName    string
-	}
-	tests := []struct {
-		name string
-		args args
-		want *SdkToCategories
-	}{
-		{
-			name: "Test append new objects",
-			args: args{
-				objectInfo: ObjectInfo{
-					Name:            "",
-					CloudPath:       "",
-					Description:     "",
-					Type:            0,
-					Categories:      []string{"Common"},
-					PipelineOptions: "",
-				},
-				sdkToCategories: &SdkToCategories{},
-				pathToObject:    "SDK_JAVA/HelloWorld",
-				categoryName:    "Common",
-			},
-			want: &SdkToCategories{"SDK_JAVA": CategoryToPrecompiledObjects{"Common": PrecompiledObjects{ObjectInfo{
-				Name:            "HelloWorld",
-				CloudPath:       "SDK_JAVA/HelloWorld",
-				Description:     "",
-				Type:            0,
-				Categories:      []string{"Common"},
-				PipelineOptions: "",
-			}}}},
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			appendPrecompiledObject(tt.args.objectInfo, tt.args.sdkToCategories, tt.args.pathToObject, tt.args.categoryName)
-			got := tt.args.sdkToCategories
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("appendPrecompiledObject() got = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Test_getFileExtensionBySdk(t *testing.T) {
-	type args struct {
-		precompiledObjectPath string
-	}
-	tests := []struct {
-		name    string
-		args    args
-		want    string
-		wantErr bool
-	}{
-		{
-			// Try to get an extension of a file by the sdk at file path:
-			// SDK_JAVA/HelloWorld -> java
-			name:    "Test getFileExtensionBySdk() valid sdk",
-			args:    args{precompiledObjectPath: "SDK_JAVA/HelloWorld"},
-			want:    "java",
-			wantErr: false,
-		},
-		{
-			// Try to get an error if sdk is not a valid one:
-			// INVALID_SDK/HelloWorld -> ""
-			name:    "Test getFileExtensionBySdk() invalid sdk",
-			args:    args{precompiledObjectPath: "INVALID_SDK/HelloWorld"},
-			want:    "",
-			wantErr: true,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			got, err := getFileExtensionBySdk(tt.args.precompiledObjectPath)
-			if (err != nil) != tt.wantErr {
-				t.Errorf("getFileExtensionBySdk() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
-			if got != tt.want {
-				t.Errorf("getFileExtensionBySdk() got = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func Benchmark_GetPrecompiledObjects(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		_, _ = bucket.GetPrecompiledObjects(ctx, targetSdk, "", defaultBucketName)
-	}
-}
-
-func Benchmark_GetPrecompiledObjectOutput(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		_, _ = bucket.GetPrecompiledObjectOutput(ctx, precompiledObjectPath, defaultBucketName)
-	}
-}
-
-func Benchmark_GetPrecompiledObjectCode(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		_, _ = bucket.GetPrecompiledObjectCode(ctx, precompiledObjectPath, defaultBucketName)
-	}
-}
-
-func Benchmark_GetPrecompiledObject(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		_, _ = bucket.GetPrecompiledObject(ctx, precompiledObjectPath, defaultBucketName)
-	}
-}
diff --git a/playground/backend/internal/db/entity/snippet.go b/playground/backend/internal/db/entity/snippet.go
index f95eeb04b99..9ad85ac24f0 100644
--- a/playground/backend/internal/db/entity/snippet.go
+++ b/playground/backend/internal/db/entity/snippet.go
@@ -57,27 +57,31 @@ type Snippet struct {
 
 // ID generates id according to content of the entity
 func (s *Snippet) ID() (string, error) {
+	id, err := generateIDBasedOnContent(s.Salt, combineUniqueSnippetContent(s), s.IdLength)
+	if err != nil {
+		return "", err
+	}
+	return id, nil
+}
+
+func combineUniqueSnippetContent(snippet *Snippet) string {
 	var files []string
-	for _, v := range s.Files {
-		files = append(files, strings.TrimSpace(v.Content)+strings.TrimSpace(v.Name))
+	for _, file := range snippet.Files {
+		files = append(files, strings.TrimSpace(file.Content)+strings.TrimSpace(file.Name))
 	}
 	sort.Strings(files)
 	var contentBuilder strings.Builder
 	for i, file := range files {
 		contentBuilder.WriteString(file)
 		if i == len(files)-1 {
-			contentBuilder.WriteString(fmt.Sprintf("%v%s", s.Snippet.Sdk, strings.TrimSpace(s.Snippet.PipeOpts)))
+			contentBuilder.WriteString(fmt.Sprintf("%v%s", snippet.Snippet.Sdk, strings.TrimSpace(snippet.Snippet.PipeOpts)))
 		}
 	}
-	id, err := generateID(s.Salt, contentBuilder.String(), s.IdLength)
-	if err != nil {
-		return "", err
-	}
-	return id, nil
+
+	return contentBuilder.String()
 }
 
-//TODO after removing the cloud storage this method should be deleted. It's a duplicate code from utils package
-func generateID(salt, content string, length int8) (string, error) {
+func generateIDBasedOnContent(salt, content string, length int8) (string, error) {
 	hash := sha256.New()
 	if _, err := io.WriteString(hash, salt); err != nil {
 		logger.Errorf("ID(): error during hash generation: %s", err.Error())
diff --git a/playground/backend/internal/db/mapper/datastore_mapper_test.go b/playground/backend/internal/db/mapper/datastore_mapper_test.go
index d44a1586de4..11796de6ac6 100644
--- a/playground/backend/internal/db/mapper/datastore_mapper_test.go
+++ b/playground/backend/internal/db/mapper/datastore_mapper_test.go
@@ -31,7 +31,7 @@ var testable *DatastoreMapper
 var datastoreMapperCtx = context.Background()
 
 func TestMain(m *testing.M) {
-	appEnv := environment.NewApplicationEnvs("/app", "", "", "", "", "", "../../../.", nil, 0)
+	appEnv := environment.NewApplicationEnvs("/app", "", "", "", "", "../../../.", nil, 0)
 	appEnv.SetSchemaVersion("MOCK_SCHEMA")
 	props, _ := environment.NewProperties(appEnv.PropertyPath())
 	testable = NewDatastoreMapper(datastoreMapperCtx, appEnv, props)
diff --git a/playground/backend/internal/db/schema/migration/migration_v001_test.go b/playground/backend/internal/db/schema/migration/migration_v001_test.go
index 2fc1aa78d52..24b35403cf9 100644
--- a/playground/backend/internal/db/schema/migration/migration_v001_test.go
+++ b/playground/backend/internal/db/schema/migration/migration_v001_test.go
@@ -60,7 +60,7 @@ func teardown() {
 }
 
 func TestInitialStructure_InitiateData(t *testing.T) {
-	appEnvs := environment.NewApplicationEnvs("/app", "", "", "", "", "../../../../../sdks-emulator.yaml", "../../../../.", nil, 0)
+	appEnvs := environment.NewApplicationEnvs("/app", "", "", "", "../../../../../sdks-emulator.yaml", "../../../../.", nil, 0)
 	props, err := environment.NewProperties(appEnvs.PropertyPath())
 	if err != nil {
 		t.Errorf("InitiateData(): error during properties initialization, err: %s", err.Error())
diff --git a/playground/backend/internal/environment/application.go b/playground/backend/internal/environment/application.go
index 9cbb764cf13..b32a41a8e69 100644
--- a/playground/backend/internal/environment/application.go
+++ b/playground/backend/internal/environment/application.go
@@ -100,9 +100,6 @@ type ApplicationEnvs struct {
 	// pipelinesFolder is name of folder in which the pipelines resources are stored
 	pipelinesFolder string
 
-	// bucketName is a name of the GCS's bucket with examples
-	bucketName string
-
 	// schemaVersion is the database schema version
 	schemaVersion string
 
@@ -115,7 +112,7 @@ type ApplicationEnvs struct {
 
 // NewApplicationEnvs constructor for ApplicationEnvs
 func NewApplicationEnvs(
-	workingDir, launchSite, projectId, pipelinesFolder, bucketName, sdkConfigPath, propertyPath string,
+	workingDir, launchSite, projectId, pipelinesFolder, sdkConfigPath, propertyPath string,
 	cacheEnvs *CacheEnvs,
 	pipelineExecuteTimeout time.Duration,
 ) *ApplicationEnvs {
@@ -126,7 +123,6 @@ func NewApplicationEnvs(
 		launchSite:             launchSite,
 		projectId:              projectId,
 		pipelinesFolder:        pipelinesFolder,
-		bucketName:             bucketName,
 		sdkConfigPath:          sdkConfigPath,
 		propertyPath:           propertyPath,
 	}
@@ -162,11 +158,6 @@ func (ae *ApplicationEnvs) PipelinesFolder() string {
 	return ae.pipelinesFolder
 }
 
-// BucketName returns name of the GCS's bucket with examples
-func (ae *ApplicationEnvs) BucketName() string {
-	return ae.bucketName
-}
-
 // SchemaVersion returns the database schema version
 func (ae *ApplicationEnvs) SchemaVersion() string {
 	return ae.schemaVersion
diff --git a/playground/backend/internal/environment/environment_service.go b/playground/backend/internal/environment/environment_service.go
index 74b90d98ca9..0cbf8149d5e 100644
--- a/playground/backend/internal/environment/environment_service.go
+++ b/playground/backend/internal/environment/environment_service.go
@@ -16,8 +16,6 @@
 package environment
 
 import (
-	pb "beam.apache.org/playground/backend/internal/api/v1"
-	"beam.apache.org/playground/backend/internal/logger"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -28,6 +26,9 @@ import (
 	"strconv"
 	"strings"
 	"time"
+
+	pb "beam.apache.org/playground/backend/internal/api/v1"
+	"beam.apache.org/playground/backend/internal/logger"
 )
 
 const (
@@ -60,8 +61,6 @@ const (
 	jsonExt                       = ".json"
 	configFolderName              = "configs"
 	defaultNumOfParallelJobs      = 20
-	bucketNameKey                 = "BUCKET_NAME"
-	defaultBucketName             = "playground-precompiled-objects"
 	SDKConfigPathKey              = "SDK_CONFIG"
 	defaultSDKConfigPath          = "../sdks.yaml"
 	propertyPathKey               = "PROPERTY_PATH"
@@ -107,7 +106,6 @@ func GetApplicationEnvsFromOsEnvs() (*ApplicationEnvs, error) {
 	launchSite := getEnv(launchSiteKey, defaultLaunchSite)
 	projectId := os.Getenv(projectIdKey)
 	pipelinesFolder := getEnv(pipelinesFolderKey, defaultPipelinesFolder)
-	bucketName := getEnv(bucketNameKey, defaultBucketName)
 	sdkConfigPath := getEnv(SDKConfigPathKey, defaultSDKConfigPath)
 	propertyPath := getEnv(propertyPathKey, defaultPropertyPath)
 
@@ -127,7 +125,7 @@ func GetApplicationEnvsFromOsEnvs() (*ApplicationEnvs, error) {
 	}
 
 	if value, present := os.LookupEnv(workingDirKey); present {
-		return NewApplicationEnvs(value, launchSite, projectId, pipelinesFolder, bucketName, sdkConfigPath, propertyPath, NewCacheEnvs(cacheType, cacheAddress, cacheExpirationTime), pipelineExecuteTimeout), nil
+		return NewApplicationEnvs(value, launchSite, projectId, pipelinesFolder, sdkConfigPath, propertyPath, NewCacheEnvs(cacheType, cacheAddress, cacheExpirationTime), pipelineExecuteTimeout), nil
 	}
 	return nil, errors.New("APP_WORK_DIR env should be provided with os.env")
 }
diff --git a/playground/backend/internal/environment/environment_service_test.go b/playground/backend/internal/environment/environment_service_test.go
index f6c893f417c..04eb13d4b98 100644
--- a/playground/backend/internal/environment/environment_service_test.go
+++ b/playground/backend/internal/environment/environment_service_test.go
@@ -16,7 +16,6 @@
 package environment
 
 import (
-	pb "beam.apache.org/playground/backend/internal/api/v1"
 	"fmt"
 	"io/fs"
 	"os"
@@ -24,6 +23,8 @@ import (
 	"reflect"
 	"testing"
 	"time"
+
+	pb "beam.apache.org/playground/backend/internal/api/v1"
 )
 
 const (
@@ -104,7 +105,7 @@ func TestNewEnvironment(t *testing.T) {
 		{name: "Create env service with default envs", want: &Environment{
 			NetworkEnvs:     *NewNetworkEnvs(defaultIp, defaultPort, defaultProtocol),
 			BeamSdkEnvs:     *NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, 0),
-			ApplicationEnvs: *NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
+			ApplicationEnvs: *NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
 		}},
 	}
 	for _, tt := range tests {
@@ -112,7 +113,7 @@ func TestNewEnvironment(t *testing.T) {
 			if got := NewEnvironment(
 				*NewNetworkEnvs(defaultIp, defaultPort, defaultProtocol),
 				*NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, 0),
-				*NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout)); !reflect.DeepEqual(got, tt.want) {
+				*NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout)); !reflect.DeepEqual(got, tt.want) {
 				t.Errorf("NewEnvironment() = %v, want %v", got, tt.want)
 			}
 		})
@@ -223,7 +224,7 @@ func Test_getApplicationEnvsFromOsEnvs(t *testing.T) {
 	}{
 		{
 			name:      "Working dir is provided",
-			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
+			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
 			wantErr:   false,
 			envsToSet: map[string]string{workingDirKey: "/app", launchSiteKey: defaultLaunchSite, projectIdKey: defaultProjectId},
 		},
@@ -234,25 +235,25 @@ func Test_getApplicationEnvsFromOsEnvs(t *testing.T) {
 		},
 		{
 			name:      "CacheKeyExpirationTimeKey is set with the correct value",
-			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, convertedTime}, defaultPipelineExecuteTimeout),
+			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, convertedTime}, defaultPipelineExecuteTimeout),
 			wantErr:   false,
 			envsToSet: map[string]string{workingDirKey: "/app", cacheKeyExpirationTimeKey: hour},
 		},
 		{
 			name:      "CacheKeyExpirationTimeKey is set with the incorrect value",
-			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
+			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
 			wantErr:   false,
 			envsToSet: map[string]string{workingDirKey: "/app", cacheKeyExpirationTimeKey: "1"},
 		},
 		{
 			name:      "CacheKeyExpirationTimeKey is set with the correct value",
-			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, convertedTime),
+			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, convertedTime),
 			wantErr:   false,
 			envsToSet: map[string]string{workingDirKey: "/app", pipelineExecuteTimeoutKey: hour},
 		},
 		{
 			name:      "PipelineExecuteTimeoutKey is set with the incorrect value",
-			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultBucketName, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
+			want:      NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout),
 			wantErr:   false,
 			envsToSet: map[string]string{workingDirKey: "/app", pipelineExecuteTimeoutKey: "1"},
 		},
diff --git a/playground/backend/internal/utils/datastore_utils.go b/playground/backend/internal/utils/datastore_utils.go
index 89f980fc163..120b126d9c3 100644
--- a/playground/backend/internal/utils/datastore_utils.go
+++ b/playground/backend/internal/utils/datastore_utils.go
@@ -17,10 +17,7 @@ package utils
 
 import (
 	"context"
-	"crypto/sha256"
-	"encoding/base64"
 	"fmt"
-	"io"
 	"os"
 	"strconv"
 	"strings"
@@ -28,27 +25,9 @@ import (
 	"cloud.google.com/go/datastore"
 
 	"beam.apache.org/playground/backend/internal/constants"
-	"beam.apache.org/playground/backend/internal/errors"
 	"beam.apache.org/playground/backend/internal/logger"
 )
 
-func ID(salt, content string, length int8) (string, error) {
-	hash := sha256.New()
-	if _, err := io.WriteString(hash, salt); err != nil {
-		logger.Errorf("ID(): error during hash generation: %s", err.Error())
-		return "", errors.InternalError("Error during hash generation", "Error writing hash and salt")
-	}
-	hash.Write([]byte(content))
-	sum := hash.Sum(nil)
-	b := make([]byte, base64.URLEncoding.EncodedLen(len(sum)))
-	base64.URLEncoding.Encode(b, sum)
-	hashLen := int(length)
-	for hashLen <= len(b) && b[hashLen-1] == '_' {
-		hashLen++
-	}
-	return string(b)[:hashLen], nil
-}
-
 func GetExampleKey(ctx context.Context, values ...interface{}) *datastore.Key {
 	id := GetIDWithDelimiter(values...)
 	return getNameKey(ctx, constants.ExampleKind, id, nil)
diff --git a/playground/backend/internal/utils/datastore_utils_test.go b/playground/backend/internal/utils/datastore_utils_test.go
index 2f7bb444033..e6113d7b4b7 100644
--- a/playground/backend/internal/utils/datastore_utils_test.go
+++ b/playground/backend/internal/utils/datastore_utils_test.go
@@ -24,42 +24,6 @@ import (
 
 var ctx = context.Background()
 
-func TestID(t *testing.T) {
-	type args struct {
-		salt    string
-		content string
-		length  int8
-	}
-	tests := []struct {
-		name    string
-		args    args
-		want    string
-		wantErr bool
-	}{
-		{
-			name: "ID generation in the usual case",
-			args: args{
-				salt:    "MOCK_SALT",
-				content: "MOCK_CONTENT",
-				length:  11,
-			},
-			want:    "Zl_s-8seE6k",
-			wantErr: false,
-		},
-	}
-
-	for _, tt := range tests {
-		result, err := ID(tt.args.salt, tt.args.content, tt.args.length)
-		if (err != nil) != tt.wantErr {
-			t.Errorf("ID() error = %v, wantErr %v", err, tt.wantErr)
-			return
-		}
-		if result != tt.want {
-			t.Errorf("ID() result = %v, want %v", result, tt.want)
-		}
-	}
-}
-
 func TestGetExampleKey(t *testing.T) {
 	exampleKey := GetExampleKey(ctx, "MOCK_ID")
 	if exampleKey.Namespace != constants.Namespace ||
diff --git a/playground/backend/internal/utils/precompiled_objects_utils.go b/playground/backend/internal/utils/precompiled_objects_utils.go
index 2b779ab5878..3683a2ec44b 100644
--- a/playground/backend/internal/utils/precompiled_objects_utils.go
+++ b/playground/backend/internal/utils/precompiled_objects_utils.go
@@ -17,54 +17,8 @@ package utils
 
 import (
 	pb "beam.apache.org/playground/backend/internal/api/v1"
-	"beam.apache.org/playground/backend/internal/cache"
-	"beam.apache.org/playground/backend/internal/cloud_bucket"
-	"beam.apache.org/playground/backend/internal/logger"
-	"context"
-	"fmt"
 )
 
-// PutPrecompiledObjectsToCategory adds categories with precompiled objects to protobuf object
-func PutPrecompiledObjectsToCategory(categoryName string, precompiledObjects *cloud_bucket.PrecompiledObjects, sdkCategory *pb.Categories) {
-	category := pb.Categories_Category{
-		CategoryName:       categoryName,
-		PrecompiledObjects: make([]*pb.PrecompiledObject, 0),
-	}
-	for _, object := range *precompiledObjects {
-		category.PrecompiledObjects = append(category.PrecompiledObjects, &pb.PrecompiledObject{
-			CloudPath:       object.CloudPath,
-			Name:            object.Name,
-			Description:     object.Description,
-			Type:            object.Type,
-			PipelineOptions: object.PipelineOptions,
-			Link:            object.Link,
-			Multifile:       object.Multifile,
-			ContextLine:     object.ContextLine,
-			DefaultExample:  object.DefaultExample,
-		})
-	}
-	sdkCategory.Categories = append(sdkCategory.Categories, &category)
-}
-
-// GetCatalogFromStorage returns the precompiled objects catalog from the cloud storage
-func GetCatalogFromStorage(ctx context.Context, bucketName string) ([]*pb.Categories, error) {
-	bucket := cloud_bucket.New()
-	sdkToCategories, err := bucket.GetPrecompiledObjects(ctx, pb.Sdk_SDK_UNSPECIFIED, "", bucketName)
-	if err != nil {
-		logger.Errorf("GetPrecompiledObjects(): cloud storage error: %s", err.Error())
-		return nil, err
-	}
-	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 {
-			PutPrecompiledObjectsToCategory(categoryName, &precompiledObjects, &sdkCategory)
-		}
-		sdkCategories = append(sdkCategories, &sdkCategory)
-	}
-	return sdkCategories, nil
-}
-
 // FilterCatalog returns the catalog filtered by sdk and categoryName
 func FilterCatalog(catalog []*pb.Categories, sdk pb.Sdk, categoryName string) []*pb.Categories {
 	var result []*pb.Categories
@@ -96,44 +50,3 @@ func FilterCatalog(catalog []*pb.Categories, sdk pb.Sdk, categoryName string) []
 	}
 	return result
 }
-
-// GetDefaultPrecompiledObject returns the default precompiled objects from cache for sdk
-func GetDefaultPrecompiledObject(ctx context.Context, sdk pb.Sdk, cacheService cache.Cache, bucketName string) (*pb.PrecompiledObject, error) {
-	precompiledObject, err := cacheService.GetDefaultPrecompiledObject(ctx, sdk)
-	if err != nil {
-		logger.Errorf("GetDefaultPrecompiledObject(): error during getting default precompiled object %s", err.Error())
-		bucket := cloud_bucket.New()
-		defaultPrecompiledObjects, err := bucket.GetDefaultPrecompiledObjects(ctx, bucketName)
-		if err != nil {
-			return nil, err
-		}
-		for sdk, precompiledObject := range defaultPrecompiledObjects {
-			if err := cacheService.SetDefaultPrecompiledObject(ctx, sdk, precompiledObject); err != nil {
-				logger.Errorf("GetPrecompiledObjects(): cache error: %s", err.Error())
-			}
-		}
-		precompiledObject, ok := defaultPrecompiledObjects[sdk]
-		if !ok {
-			return nil, fmt.Errorf("no default precompiled object found for this sdk: %s", sdk)
-		}
-		return precompiledObject, nil
-	}
-	return precompiledObject, nil
-}
-
-// GetCatalogFromCacheOrStorage returns the precompiled objects catalog from cache
-// - If there is no catalog in the cache, gets the catalog from the Storage and saves it to the cache
-func GetCatalogFromCacheOrStorage(ctx context.Context, cacheService cache.Cache, bucketName string) ([]*pb.Categories, error) {
-	catalog, err := cacheService.GetCatalog(ctx)
-	if err != nil {
-		logger.Errorf("GetCatalog(): cache error: %s", err.Error())
-		catalog, err = GetCatalogFromStorage(ctx, bucketName)
-		if err != nil {
-			return nil, err
-		}
-		if err = cacheService.SetCatalog(ctx, catalog); err != nil {
-			logger.Errorf("SetCatalog(): cache error: %s", err.Error())
-		}
-	}
-	return catalog, nil
-}
diff --git a/playground/backend/internal/utils/precompiled_objects_utils_test.go b/playground/backend/internal/utils/precompiled_objects_utils_test.go
index f8cbe93e2af..4f1e2ee30c1 100644
--- a/playground/backend/internal/utils/precompiled_objects_utils_test.go
+++ b/playground/backend/internal/utils/precompiled_objects_utils_test.go
@@ -16,68 +16,11 @@
 package utils
 
 import (
-	pb "beam.apache.org/playground/backend/internal/api/v1"
-	"beam.apache.org/playground/backend/internal/cache"
-	"beam.apache.org/playground/backend/internal/cache/local"
-	"beam.apache.org/playground/backend/internal/cloud_bucket"
-	"beam.apache.org/playground/backend/internal/logger"
-	"context"
 	"reflect"
 	"testing"
-)
 
-func TestPutPrecompiledObjectsToCategory(t *testing.T) {
-	precompiledObjectToAdd := &cloud_bucket.PrecompiledObjects{
-		{"TestName", "SDK_JAVA/TestCategory/TestName.java", "TestDescription", pb.PrecompiledObjectType_PRECOMPILED_OBJECT_TYPE_EXAMPLE, []string{""}, "", "", false, 1, false},
-	}
-	type args struct {
-		categoryName       string
-		precompiledObjects *cloud_bucket.PrecompiledObjects
-		sdkCategory        *pb.Categories
-	}
-	tests := []struct {
-		name string
-		args args
-		want *pb.Categories
-	}{
-		{
-			name: "Test PutPrecompiledObjectsToCategory",
-			args: args{
-				categoryName:       "TestCategory",
-				precompiledObjects: precompiledObjectToAdd,
-				sdkCategory: &pb.Categories{
-					Sdk:        pb.Sdk_SDK_JAVA,
-					Categories: []*pb.Categories_Category{},
-				},
-			},
-			want: &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,
-								ContextLine: 1,
-							},
-						},
-					},
-				},
-			},
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			PutPrecompiledObjectsToCategory(tt.args.categoryName, tt.args.precompiledObjects, tt.args.sdkCategory)
-			got := tt.args.sdkCategory
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("PutPrecompiledObjectsToCategory() got = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
+	pb "beam.apache.org/playground/backend/internal/api/v1"
+)
 
 func TestFilterPrecompiledObjects(t *testing.T) {
 	catalog := []*pb.Categories{
@@ -218,67 +161,3 @@ func TestFilterPrecompiledObjects(t *testing.T) {
 		})
 	}
 }
-
-func TestGetDefaultPrecompiledObject(t *testing.T) {
-	ctx := context.Background()
-	cacheService := local.New(ctx)
-	defaultPrecompiledObject := &pb.PrecompiledObject{
-		CloudPath:       "cloudPath",
-		Name:            "Name",
-		Description:     "Description",
-		Type:            pb.PrecompiledObjectType_PRECOMPILED_OBJECT_TYPE_EXAMPLE,
-		PipelineOptions: "--key value",
-		Link:            "Link",
-		ContextLine:     1,
-		DefaultExample:  true,
-	}
-	err := cacheService.SetDefaultPrecompiledObject(ctx, pb.Sdk_SDK_JAVA, defaultPrecompiledObject)
-	if err != nil {
-		logger.Errorf("Error during set up test")
-	}
-
-	type args struct {
-		ctx          context.Context
-		sdk          pb.Sdk
-		cacheService cache.Cache
-	}
-	tests := []struct {
-		name    string
-		args    args
-		want    *pb.PrecompiledObject
-		wantErr bool
-	}{
-		{
-			name: "there is default precompiled object",
-			args: args{
-				ctx:          ctx,
-				sdk:          pb.Sdk_SDK_JAVA,
-				cacheService: cacheService,
-			},
-			want:    defaultPrecompiledObject,
-			wantErr: false,
-		},
-		{
-			name: "there is no default precompiled object",
-			args: args{
-				ctx:          ctx,
-				sdk:          pb.Sdk_SDK_UNSPECIFIED,
-				cacheService: cacheService,
-			},
-			want:    nil,
-			wantErr: true,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			got, err := GetDefaultPrecompiledObject(tt.args.ctx, tt.args.sdk, tt.args.cacheService, "")
-			if (err != nil) != tt.wantErr {
-				t.Errorf("GetDefaultPrecompiledObject() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("GetDefaultPrecompiledObject() got = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
diff --git a/playground/infrastructure/proxy/allow_list.py b/playground/infrastructure/proxy/allow_list.py
index f0f3d0471dd..1ef52f73b2a 100644
--- a/playground/infrastructure/proxy/allow_list.py
+++ b/playground/infrastructure/proxy/allow_list.py
@@ -29,5 +29,4 @@ ALLOWED_BUCKET_LIST = [
     "dataflow-samples",
     "beam-samples",
     "apache-beam-samples",
-    "playground-precompiled-objects",
 ]