mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-05 08:10:50 +00:00
* Remove MDS and replace it with Controller This commit removes the MDS layer (and package) and shifts Controller package into its place. * add pprof/fgprof to serverless http router --------- Co-authored-by: Matthew Jaffee <jaffee@pilosa.com>
117 lines
3.5 KiB
Go
117 lines
3.5 KiB
Go
package serverless
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
featurebase "github.com/featurebasedb/featurebase/v3"
|
|
featurebase_client "github.com/featurebasedb/featurebase/v3/client"
|
|
"github.com/featurebasedb/featurebase/v3/dax"
|
|
controllerclient "github.com/featurebasedb/featurebase/v3/dax/controller/client"
|
|
"github.com/featurebasedb/featurebase/v3/errors"
|
|
"github.com/featurebasedb/featurebase/v3/logger"
|
|
)
|
|
|
|
// Ensure type implements interface.
|
|
// var _ idk.SchemaManager = &schemaManager{}
|
|
|
|
// schemaManager
|
|
type schemaManager struct {
|
|
client *controllerclient.Client
|
|
qdbid dax.QualifiedDatabaseID
|
|
logger logger.Logger
|
|
}
|
|
|
|
func NewSchemaManager(controllerAddress dax.Address, qdbid dax.QualifiedDatabaseID, logger logger.Logger) *schemaManager {
|
|
return &schemaManager{
|
|
client: controllerclient.New(controllerAddress, logger),
|
|
qdbid: qdbid,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (s *schemaManager) StartTransaction(id string, timeout time.Duration, exclusive bool, requestTimeout time.Duration) (*featurebase.Transaction, error) {
|
|
return nil, nil
|
|
}
|
|
func (s *schemaManager) FinishTransaction(id string) (*featurebase.Transaction, error) {
|
|
return nil, nil
|
|
}
|
|
func (s *schemaManager) Schema() (*featurebase_client.Schema, error) {
|
|
// Create a temp schema object to mimic what the FeatureBase client Schema()
|
|
// method returns.
|
|
schema := featurebase_client.NewSchema()
|
|
|
|
tables, err := s.client.Tables(context.Background(), s.qdbid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, qtbl := range tables {
|
|
idx := schema.Index(string(qtbl.Key()), featurebase_client.OptIndexKeys(qtbl.StringKeys()))
|
|
for _, fld := range qtbl.Fields {
|
|
opts := make([]featurebase_client.FieldOption, 0)
|
|
|
|
switch fld.Type {
|
|
case dax.BaseTypeBool:
|
|
opts = append(opts, featurebase_client.OptFieldTypeBool())
|
|
case dax.BaseTypeDecimal:
|
|
opts = append(opts, featurebase_client.OptFieldTypeDecimal(
|
|
fld.Options.Scale,
|
|
))
|
|
case dax.BaseTypeID:
|
|
opts = append(opts, featurebase_client.OptFieldTypeMutex(
|
|
featurebase_client.CacheType(fld.Options.CacheType),
|
|
int(fld.Options.CacheSize),
|
|
))
|
|
case dax.BaseTypeIDSet:
|
|
opts = append(opts, featurebase_client.OptFieldTypeSet(
|
|
featurebase_client.CacheType(fld.Options.CacheType),
|
|
int(fld.Options.CacheSize),
|
|
))
|
|
case dax.BaseTypeInt:
|
|
opts = append(opts, featurebase_client.OptFieldTypeInt(
|
|
fld.Options.Min.ToInt64(0),
|
|
fld.Options.Max.ToInt64(0),
|
|
))
|
|
case dax.BaseTypeString:
|
|
opts = append(opts,
|
|
featurebase_client.OptFieldTypeMutex(
|
|
featurebase_client.CacheType(fld.Options.CacheType),
|
|
int(fld.Options.CacheSize),
|
|
),
|
|
featurebase_client.OptFieldKeys(true),
|
|
)
|
|
case dax.BaseTypeStringSet:
|
|
opts = append(opts,
|
|
featurebase_client.OptFieldTypeSet(
|
|
featurebase_client.CacheType(fld.Options.CacheType),
|
|
int(fld.Options.CacheSize),
|
|
),
|
|
featurebase_client.OptFieldKeys(true),
|
|
)
|
|
case dax.BaseTypeTimestamp:
|
|
opts = append(opts, featurebase_client.OptFieldTypeTimestamp(
|
|
featurebase_client.DefaultEpoch,
|
|
fld.Options.TimeUnit,
|
|
))
|
|
|
|
default:
|
|
return nil, errors.Errorf("unsupported field type: %s (%s)", fld.Name, fld.Type)
|
|
}
|
|
|
|
_ = idx.Field(string(fld.Name), opts...)
|
|
}
|
|
}
|
|
|
|
return schema, nil
|
|
}
|
|
func (s *schemaManager) SyncIndex(index *featurebase_client.Index) error {
|
|
return nil
|
|
}
|
|
func (s *schemaManager) DeleteIndex(index *featurebase_client.Index) error {
|
|
return nil
|
|
}
|
|
func (s *schemaManager) Status() (featurebase_client.Status, error) {
|
|
return featurebase_client.Status{}, nil
|
|
}
|
|
func (s *schemaManager) SetAuthToken(token string) {}
|