Skip to content

Commit 9aff889

Browse files
Merge branch 'master' into podfv2
2 parents bf31d59 + 9646f03 commit 9aff889

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+99
-59
lines changed

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
needs: [get-version, publish-python-sdk]
5050
strategy:
5151
matrix:
52-
component: [feature-server, feature-server-java, feature-transformation-server, feast-operator]
52+
component: [feature-server, feature-server-java, feature-transformation-server, feast-helm-operator]
5353
env:
5454
MAVEN_CACHE: gs://feast-templocation-kf-feast/.m2.2020-08-19.tar
5555
REGISTRY: feastdev

.releaserc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ module.exports = {
6666
"CHANGELOG.md",
6767
"java/pom.xml",
6868
"infra/charts/**/*.*",
69-
"infra/feast-operator/**/*",
69+
"infra/feast-helm-operator/**/*",
7070
"ui/package.json",
7171
"sdk/python/feast/ui/package.json",
7272
"sdk/python/feast/ui/yarn.lock"

Makefile

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -430,15 +430,15 @@ build-feature-server-java-docker:
430430
-t $(REGISTRY)/feature-server-java:$(VERSION) \
431431
-f java/infra/docker/feature-server/Dockerfile --load .
432432

433-
push-feast-operator-docker:
434-
cd infra/feast-operator && \
435-
IMAGE_TAG_BASE=$(REGISTRY)/feast-operator \
433+
push-feast-helm-operator-docker:
434+
cd infra/feast-helm-operator && \
435+
IMAGE_TAG_BASE=$(REGISTRY)/feast-helm-operator \
436436
VERSION=$(VERSION) \
437437
$(MAKE) docker-push
438438

439-
build-feast-operator-docker:
440-
cd infra/feast-operator && \
441-
IMAGE_TAG_BASE=$(REGISTRY)/feast-operator \
439+
build-feast-helm-operator-docker:
440+
cd infra/feast-helm-operator && \
441+
IMAGE_TAG_BASE=$(REGISTRY)/feast-helm-operator \
442442
VERSION=$(VERSION) \
443443
$(MAKE) docker-build
444444

docs/getting-started/quickstart.md

Lines changed: 6 additions & 1 deletion

docs/how-to-guides/running-feast-in-production.md

Lines changed: 1 addition & 1 deletion

infra/feast-operator/Makefile renamed to infra/feast-helm-operator/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)
2828
# This variable is used to construct full image tags for bundle and catalog images.
2929
#
3030
# For example, running 'make bundle-build bundle-push catalog-build catalog-push' will build and push both
31-
# feastdev/feast-operator-bundle:$VERSION and feastdev/feast-operator-catalog:$VERSION.
32-
IMAGE_TAG_BASE ?= feastdev/feast-operator
31+
# feastdev/feast-helm-operator-bundle:$VERSION and feastdev/feast-helm-operator-catalog:$VERSION.
32+
IMAGE_TAG_BASE ?= feastdev/feast-helm-operator
3333

3434
# BUNDLE_IMG defines the image:tag used for the bundle.
3535
# You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=<some-registry>/<project-name-bundle>:<tag>)

infra/feast-operator/PROJECT renamed to infra/feast-helm-operator/PROJECT

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ layout:
88
plugins:
99
manifests.sdk.operatorframework.io/v2: {}
1010
scorecard.sdk.operatorframework.io/v2: {}
11-
projectName: feast-operator
11+
projectName: feast-helm-operator
1212
resources:
1313
- api:
1414
crdVersion: v1

infra/feast-operator/config/default/kustomization.yaml renamed to infra/feast-helm-operator/config/default/kustomization.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Adds namespace to all resources.
2-
namespace: feast-operator-system
2+
namespace: feast-helm-operator-system
33

44
# Value of this field is prepended to the
55
# names of all resources, e.g. a deployment named
66
# "wordpress" becomes "alices-wordpress".
77
# Note that it should also match with the prefix (text before '-') of the namespace
88
# field above.
9-
namePrefix: feast-operator-
9+
namePrefix: feast-helm-operator-
1010

1111
# Labels to add to all resources and selectors.
1212
#labels:

infra/feast-operator/config/manager/kustomization.yaml renamed to infra/feast-helm-operator/config/manager/kustomization.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1
44
kind: Kustomization
55
images:
66
- name: controller
7-
newName: feastdev/feast-operator
7+
newName: feastdev/feast-helm-operator
88
newTag: 0.40.0

infra/feast-operator/config/manager/manager.yaml renamed to infra/feast-helm-operator/config/manager/manager.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ metadata:
66
app.kubernetes.io/name: namespace
77
app.kubernetes.io/instance: system
88
app.kubernetes.io/component: manager
9-
app.kubernetes.io/created-by: feast-operator
10-
app.kubernetes.io/part-of: feast-operator
9+
app.kubernetes.io/created-by: feast-helm-operator
10+
app.kubernetes.io/part-of: feast-helm-operator
1111
app.kubernetes.io/managed-by: kustomize
1212
name: system
1313
---
@@ -21,8 +21,8 @@ metadata:
2121
app.kubernetes.io/name: deployment
2222
app.kubernetes.io/instance: controller-manager
2323
app.kubernetes.io/component: manager
24-
app.kubernetes.io/created-by: feast-operator
25-
app.kubernetes.io/part-of: feast-operator
24+
app.kubernetes.io/created-by: feast-helm-operator
25+
app.kubernetes.io/part-of: feast-helm-operator
2626
app.kubernetes.io/managed-by: kustomize
2727
spec:
2828
selector:
@@ -68,7 +68,7 @@ spec:
6868
containers:
6969
- args:
7070
- --leader-elect
71-
- --leader-election-id=feast-operator
71+
- --leader-election-id=feast-helm-operator
7272
image: controller:latest
7373
name: manager
7474
securityContext:
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# These resources constitute the fully configured set of manifests
22
# used to generate the 'manifests/' directory in a bundle.
33
resources:
4-
- bases/feast-operator.clusterserviceversion.yaml
4+
- bases/feast-helm-operator.clusterserviceversion.yaml
55
- ../default
66
- ../samples
77
- ../scorecard

infra/feast-operator/config/rbac/feastfeatureserver_editor_role.yaml renamed to infra/feast-helm-operator/config/rbac/feastfeatureserver_editor_role.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ metadata:
66
app.kubernetes.io/name: clusterrole
77
app.kubernetes.io/instance: feastfeatureserver-editor-role
88
app.kubernetes.io/component: rbac
9-
app.kubernetes.io/created-by: feast-operator
10-
app.kubernetes.io/part-of: feast-operator
9+
app.kubernetes.io/created-by: feast-helm-operator
10+
app.kubernetes.io/part-of: feast-helm-operator
1111
app.kubernetes.io/managed-by: kustomize
1212
name: feastfeatureserver-editor-role
1313
rules:

infra/feast-operator/config/rbac/feastfeatureserver_editor_rolebinding.yaml renamed to infra/feast-helm-operator/config/rbac/feastfeatureserver_editor_rolebinding.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ metadata:
55
app.kubernetes.io/name: clusterrole
66
app.kubernetes.io/instance: feastfeatureserver-editor-role
77
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: feast-operator
9-
app.kubernetes.io/part-of: feast-operator
8+
app.kubernetes.io/created-by: feast-helm-operator
9+
app.kubernetes.io/part-of: feast-helm-operator
1010
app.kubernetes.io/managed-by: kustomize
1111
name: feastfeatureserver-editor-rolebinding
1212
roleRef:

infra/feast-operator/config/rbac/leader_election_role.yaml renamed to infra/feast-helm-operator/config/rbac/leader_election_role.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ metadata:
66
app.kubernetes.io/name: role
77
app.kubernetes.io/instance: leader-election-role
88
app.kubernetes.io/component: rbac
9-
app.kubernetes.io/created-by: feast-operator
10-
app.kubernetes.io/part-of: feast-operator
9+
app.kubernetes.io/created-by: feast-helm-operator
10+
app.kubernetes.io/part-of: feast-helm-operator
1111
app.kubernetes.io/managed-by: kustomize
1212
name: leader-election-role
1313
rules:

infra/feast-operator/config/rbac/leader_election_role_binding.yaml renamed to infra/feast-helm-operator/config/rbac/leader_election_role_binding.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ metadata:
55
app.kubernetes.io/name: rolebinding
66
app.kubernetes.io/instance: leader-election-rolebinding
77
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: feast-operator
9-
app.kubernetes.io/part-of: feast-operator
8+
app.kubernetes.io/created-by: feast-helm-operator
9+
app.kubernetes.io/part-of: feast-helm-operator
1010
app.kubernetes.io/managed-by: kustomize
1111
name: leader-election-rolebinding
1212
roleRef:

infra/feast-operator/config/rbac/role.yaml renamed to infra/feast-helm-operator/config/rbac/role.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ metadata:
55
app.kubernetes.io/name: clusterrole
66
app.kubernetes.io/instance: manager-role
77
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: feast-operator
9-
app.kubernetes.io/part-of: feast-operator
8+
app.kubernetes.io/created-by: feast-helm-operator
9+
app.kubernetes.io/part-of: feast-helm-operator
1010
app.kubernetes.io/managed-by: kustomize
1111
name: manager-role
1212
rules:

infra/feast-operator/config/rbac/role_binding.yaml renamed to infra/feast-helm-operator/config/rbac/role_binding.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ metadata:
55
app.kubernetes.io/name: clusterrolebinding
66
app.kubernetes.io/instance: manager-rolebinding
77
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: feast-operator
9-
app.kubernetes.io/part-of: feast-operator
8+
app.kubernetes.io/created-by: feast-helm-operator
9+
app.kubernetes.io/part-of: feast-helm-operator
1010
app.kubernetes.io/managed-by: kustomize
1111
name: manager-rolebinding
1212
roleRef:

infra/feast-operator/config/rbac/service_account.yaml renamed to infra/feast-helm-operator/config/rbac/service_account.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ metadata:
55
app.kubernetes.io/name: serviceaccount
66
app.kubernetes.io/instance: controller-manager-sa
77
app.kubernetes.io/component: rbac
8-
app.kubernetes.io/created-by: feast-operator
9-
app.kubernetes.io/part-of: feast-operator
8+
app.kubernetes.io/created-by: feast-helm-operator
9+
app.kubernetes.io/part-of: feast-helm-operator
1010
app.kubernetes.io/managed-by: kustomize
1111
name: controller-manager
1212
namespace: system

infra/scripts/release/files_to_bump.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ infra/charts/feast/README.md 11 68 69
1010
infra/charts/feast-feature-server/Chart.yaml 5
1111
infra/charts/feast-feature-server/README.md 3
1212
infra/charts/feast-feature-server/values.yaml 12
13-
infra/feast-operator/Makefile 6
14-
infra/feast-operator/config/manager/kustomization.yaml 8
13+
infra/feast-helm-operator/Makefile 6
14+
infra/feast-helm-operator/config/manager/kustomization.yaml 8
1515
java/pom.xml 38
1616
ui/package.json 3

sdk/python/feast/feature_view.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
name=DUMMY_ENTITY_NAME,
5050
join_keys=[DUMMY_ENTITY_ID],
5151
)
52+
DUMMY_ENTITY_FIELD = Field(
53+
name=DUMMY_ENTITY_ID,
54+
dtype=from_value_type(ValueType.STRING),
55+
)
5256

5357

5458
@typechecked

sdk/python/feast/infra/materialization/kubernetes/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
FROM python:3.11-slim-bullseye AS build
1+
FROM debian:11-slim AS build
22

33
RUN apt-get update && \
4-
apt-get install --no-install-suggests --no-install-recommends --yes git
4+
apt-get install --no-install-suggests --no-install-recommends --yes git python3 python3-pip
55

66
WORKDIR /app
77

sdk/python/feast/infra/materialization/snowflake_engine.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ class SnowflakeMaterializationEngineConfig(FeastConfigBaseModel):
4747
""" Type selector"""
4848

4949
config_path: Optional[str] = os.path.expanduser("~/.snowsql/config")
50-
""" Snowflake config path -- absolute path required (Cant use ~)"""
50+
""" Snowflake snowsql config path -- absolute path required (Cant use ~)"""
51+
52+
connection_name: Optional[str] = None
53+
""" Snowflake connector connection name -- typically defined in ~/.snowflake/connections.toml """
5154

5255
account: Optional[str] = None
5356
""" Snowflake deployment identifier -- drop .snowflakecomputing.com"""

sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
RetrievalMetadata,
3131
)
3232
from feast.infra.registry.base_registry import BaseRegistry
33-
from feast.infra.utils import aws_utils
3433
from feast.repo_config import FeastConfigBaseModel, RepoConfig
3534
from feast.saved_dataset import SavedDatasetStorage
3635
from feast.type_map import spark_schema_to_np_dtypes
@@ -399,6 +398,8 @@ def to_remote_storage(self) -> List[str]:
399398

400399
return _list_files_in_folder(output_uri)
401400
elif self._config.offline_store.staging_location.startswith("s3://"):
401+
from feast.infra.utils import aws_utils
402+
402403
spark_compatible_s3_staging_location = (
403404
self._config.offline_store.staging_location.replace(
404405
"s3://", "s3a://"

sdk/python/feast/infra/offline_stores/snowflake.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ class SnowflakeOfflineStoreConfig(FeastConfigBaseModel):
8383
""" Offline store type selector """
8484

8585
config_path: Optional[str] = os.path.expanduser("~/.snowsql/config")
86-
""" Snowflake config path -- absolute path required (Cant use ~)"""
86+
""" Snowflake snowsql config path -- absolute path required (Cant use ~)"""
87+
88+
connection_name: Optional[str] = None
89+
""" Snowflake connector connection name -- typically defined in ~/.snowflake/connections.toml """
8790

8891
account: Optional[str] = None
8992
""" Snowflake deployment identifier -- drop .snowflakecomputing.com """

sdk/python/feast/infra/online_stores/snowflake.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ class SnowflakeOnlineStoreConfig(FeastConfigBaseModel):
3030
""" Online store type selector """
3131

3232
config_path: Optional[str] = os.path.expanduser("~/.snowsql/config")
33-
""" Snowflake config path -- absolute path required (Can't use ~)"""
33+
""" Snowflake snowsql config path -- absolute path required (Cant use ~)"""
34+
35+
connection_name: Optional[str] = None
36+
""" Snowflake connector connection name -- typically defined in ~/.snowflake/connections.toml """
3437

3538
account: Optional[str] = None
3639
""" Snowflake deployment identifier -- drop .snowflakecomputing.com """

sdk/python/feast/infra/registry/snowflake.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ class SnowflakeRegistryConfig(RegistryConfig):
8080
""" Registry type selector """
8181

8282
config_path: Optional[str] = os.path.expanduser("~/.snowsql/config")
83-
""" Snowflake config path -- absolute path required (Cant use ~) """
83+
""" Snowflake snowsql config path -- absolute path required (Cant use ~)"""
84+
85+
connection_name: Optional[str] = None
86+
""" Snowflake connector connection name -- typically defined in ~/.snowflake/connections.toml """
8487

8588
account: Optional[str] = None
8689
""" Snowflake deployment identifier -- drop .snowflakecomputing.com """

sdk/python/tests/unit/test_on_demand_python_transformation.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
RequestSource,
1818
)
1919
from feast.driver_test_data import create_driver_hourly_stats_df
20+
from feast.feature_view import DUMMY_ENTITY_FIELD
2021
from feast.field import Field
2122
from feast.infra.online_stores.sqlite import SqliteOnlineStoreConfig
2223
from feast.on_demand_feature_view import on_demand_feature_view
@@ -29,6 +30,8 @@
2930
String,
3031
UnixTimestamp,
3132
_utc_now,
33+
ValueType,
34+
from_value_type,
3235
)
3336

3437

@@ -60,7 +63,9 @@ def setUp(self):
6063
path=driver_stats_path, allow_truncated_timestamps=True
6164
)
6265

63-
driver = Entity(name="driver", join_keys=["driver_id"])
66+
driver = Entity(
67+
name="driver", join_keys=["driver_id"], value_type=ValueType.INT64
68+
)
6469

6570
driver_stats_source = FileSource(
6671
name="driver_hourly_stats_source",
@@ -82,6 +87,19 @@ def setUp(self):
8287
source=driver_stats_source,
8388
)
8489

90+
driver_stats_entity_less_fv = FeatureView(
91+
name="driver_hourly_stats_no_entity",
92+
entities=[],
93+
ttl=timedelta(days=0),
94+
schema=[
95+
Field(name="conv_rate", dtype=Float32),
96+
Field(name="acc_rate", dtype=Float32),
97+
Field(name="avg_daily_trips", dtype=Int64),
98+
],
99+
online=True,
100+
source=driver_stats_source,
101+
)
102+
85103
@on_demand_feature_view(
86104
sources=[driver_stats_fv],
87105
schema=[Field(name="conv_rate_plus_acc_pandas", dtype=Float64)],
@@ -160,6 +178,7 @@ def python_singleton_view(inputs: dict[str, Any]) -> dict[str, Any]:
160178
pandas_view,
161179
python_view,
162180
python_singleton_view,
181+
driver_stats_entity_less_fv,
163182
]
164183
)
165184

@@ -171,13 +190,19 @@ def python_singleton_view(inputs: dict[str, Any]) -> dict[str, Any]:
171190
pandas_view,
172191
python_view,
173192
python_demo_view,
193+
driver_stats_entity_less_fv,
174194
]
175195
)
176196
self.store.write_to_online_store(
177197
feature_view_name="driver_hourly_stats", df=driver_df
178198
)
179-
assert len(self.store.list_all_feature_views()) == 4
180-
assert len(self.store.list_feature_views()) == 1
199+
assert driver_stats_fv.entity_columns == [
200+
Field(name=driver.join_key, dtype=from_value_type(driver.value_type))
201+
]
202+
assert driver_stats_entity_less_fv.entity_columns == [DUMMY_ENTITY_FIELD]
203+
204+
assert len(self.store.list_all_feature_views()) == 5
205+
assert len(self.store.list_feature_views()) == 2
181206
assert len(self.store.list_on_demand_feature_views()) == 3
182207
assert len(self.store.list_stream_feature_views()) == 0
183208

0 commit comments

Comments
 (0)