blob: ea4b6161fccc5d100ab72e840cbce9cd08fceae0 [file] [log] [blame]
// 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 cache
import (
"context"
"time"
"github.com/google/uuid"
pb "beam.apache.org/playground/backend/internal/api/v1"
"beam.apache.org/playground/backend/internal/db/entity"
)
// SubKey is used to keep value with Cache using nested structure like pipelineId:subKey:value
type SubKey string
// All possible subKeys and string keys to process with Cache
const (
// Status is used to keep playground.Status value
Status SubKey = "STATUS"
// RunOutput is used to keep run code output value
RunOutput SubKey = "RUN_OUTPUT"
// RunError is used to keep run code error value
RunError SubKey = "RUN_ERROR"
// ValidationOutput is used to keep validation output value
ValidationOutput SubKey = "VALIDATION_OUTPUT"
// PreparationOutput is used to keep prepare step output value
PreparationOutput SubKey = "PREPARATION_OUTPUT"
// CompileOutput is used to keep compilation output value
CompileOutput SubKey = "COMPILE_OUTPUT"
// Canceled is used to keep the canceled status
Canceled SubKey = "CANCELED"
// RunOutputIndex is the index of the start of the run step's output
RunOutputIndex SubKey = "RUN_OUTPUT_INDEX"
// Logs is used to keep logs value
Logs SubKey = "LOGS"
// LogsIndex is the index of the start of the log
LogsIndex SubKey = "LOGS_INDEX"
// Graph is used to keep graph of the execution
Graph SubKey = "GRAPH"
// ExamplesCatalog is catalog of examples available in Playground
ExamplesCatalog string = "EXAMPLES_CATALOG"
// SdksCatalog is the catalog of SDKs in Playground
SdksCatalog string = "SDKS_CATALOG"
// DefaultPrecompiledExamples is used to keep default examples
DefaultPrecompiledExamples string = "DEFAULT_PRECOMPILED_OBJECTS"
)
// Cache is used to store states and outputs for Apache Beam pipelines that running in Playground
// Cache allows keep and read any value by pipelineId and subKey:
// pipelineId_1:
// subKey_1: value_1
// subKey_2: value_2
// pipelineId_2:
// subKey_1: value_3
// subKey_3: value_4
// pipelineId is uuid that calculates in the controller when the server takes new request to run code
type Cache interface {
// GetValue returns value from cache by pipelineId and subKey.
GetValue(ctx context.Context, pipelineId uuid.UUID, subKey SubKey) (interface{}, error)
// SetValue adds value to cache by pipelineId and subKey.
SetValue(ctx context.Context, pipelineId uuid.UUID, subKey SubKey, value interface{}) error
// SetExpTime adds expiration time of the pipeline to cache by pipelineId.
SetExpTime(ctx context.Context, pipelineId uuid.UUID, expTime time.Duration) error
// SetCatalog adds the given catalog to cache by ExamplesCatalog key.
SetCatalog(ctx context.Context, catalog []*pb.Categories) error
// GetCatalog returns catalog from cache by ExamplesCatalog key.
GetCatalog(ctx context.Context) ([]*pb.Categories, error)
// SetDefaultPrecompiledObject adds default precompiled object for SDK into cache.
SetDefaultPrecompiledObject(ctx context.Context, sdk pb.Sdk, precompiledObject *pb.PrecompiledObject) error
// GetDefaultPrecompiledObject returns default precompiled object for SDK from cache.
GetDefaultPrecompiledObject(ctx context.Context, sdk pb.Sdk) (*pb.PrecompiledObject, error)
// SetSdkCatalog adds the given sdk catalog to the cache.
SetSdkCatalog(ctx context.Context, sdks []*entity.SDKEntity) error
// GetSdkCatalog returns sdk catalog from the cache.
GetSdkCatalog(ctx context.Context) ([]*entity.SDKEntity, error)
}