Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
60ba52f
Nearly compiling
Wirick Jun 1, 2020
d9228c4
Bigtable Logic Including the Protobuf objects
Wirick Jun 3, 2020
89f3718
Reset back to original dependencies
Wirick Jun 10, 2020
1ec9828
Now I have the both ingestion and serving up
Wirick Jun 30, 2020
3b7aa34
Resolve dependencies around spring upgrade
Wirick Jun 30, 2020
df39a2b
Change to consistent PCollectionView for feature set specs
Wirick Jul 1, 2020
36c0dd2
Turn all the pseudocode into real logic
Wirick Jul 2, 2020
46d3b71
Move the parsing logic to FeatureRowDecoder
Wirick Jul 2, 2020
8e804a3
Limit the decoder to the features being requested
Wirick Jul 3, 2020
9ecc683
Using a column based qualifier regex makes things slower
Wirick Jul 3, 2020
ee5eb5a
Upgrade to spring boot 2.3.1
Wirick Jul 3, 2020
c9aca31
Reformatting and adding debug info
Wirick Jul 22, 2020
ff322b1
Don't change where python resides in makefile
Wirick Jul 22, 2020
e6ce427
Revert to og makefile
Wirick Jul 22, 2020
82685a8
Clean up diff with master in makefile
Wirick Jul 22, 2020
f8850bb
Last bit from makefile
Wirick Jul 22, 2020
07b26cc
Remove diff in core/pom.xml
Wirick Jul 22, 2020
c0d8c4f
Last bit of core/pom.xml
Wirick Jul 22, 2020
364f1f6
Move back to h2 url
Wirick Jul 22, 2020
4e75364
Resolve diff with ingestion/pom.xml
Wirick Jul 22, 2020
9d84e27
Resolve diff with pom.xml
Wirick Jul 22, 2020
3bffcd4
Resolve pom.xml diff
Wirick Jul 22, 2020
bcab063
Update ingestion/pom.xml
Wirick Jul 22, 2020
d97e909
Clean up sdk debug changes
Wirick Jul 22, 2020
f5359e5
Fixing serving/pom.xml diff
Wirick Jul 22, 2020
85e2cc1
More truing up
Wirick Jul 22, 2020
9c97794
Reverting to previous
Wirick Jul 22, 2020
b9a95e9
Maaaking sure protos are up to date
Wirick Jul 22, 2020
803f12a
Merge branch 'master' into postmates/add_bigtable_store
Wirick Jul 28, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions core/src/main/java/feast/core/model/Store.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.protobuf.InvalidProtocolBufferException;
import feast.proto.core.StoreProto;
import feast.proto.core.StoreProto.Store.BigQueryConfig;
import feast.proto.core.StoreProto.Store.BigtableConfig;
import feast.proto.core.StoreProto.Store.Builder;
import feast.proto.core.StoreProto.Store.CassandraConfig;
import feast.proto.core.StoreProto.Store.RedisClusterConfig;
Expand Down Expand Up @@ -90,8 +91,12 @@ public static Store fromProto(StoreProto.Store storeProto) throws IllegalArgumen
case REDIS_CLUSTER:
config = storeProto.getRedisClusterConfig().toByteArray();
break;
case BIGTABLE:
config = storeProto.getBigtableConfig().toByteArray();
break;
default:
throw new IllegalArgumentException("Invalid store provided");
throw new IllegalArgumentException(
String.format("Invalid store provided: %s", storeProto.getType().toString()));
}
return new Store(
storeProto.getName(), storeProto.getType().toString(), config, String.join(",", subs));
Expand All @@ -117,8 +122,12 @@ public StoreProto.Store toProto() throws InvalidProtocolBufferException {
case REDIS_CLUSTER:
RedisClusterConfig redisClusterConfig = RedisClusterConfig.parseFrom(config);
return storeProtoBuilder.setRedisClusterConfig(redisClusterConfig).build();
case BIGTABLE:
BigtableConfig bigtableConfig = BigtableConfig.parseFrom(config);
return storeProtoBuilder.setBigtableConfig(bigtableConfig).build();
default:
throw new InvalidProtocolBufferException("Invalid store set");
throw new InvalidProtocolBufferException(
String.format("Invalid store set", StoreType.valueOf(type)));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ public JobCoordinatorService(
public void Poll() {
log.info("Polling for new jobs...");
Iterable<Pair<Source, Set<Store>>> sourceStoreMappings = getSourceToStoreMappings();
log.info("Found source to store mappings {}", sourceStoreMappings);
List<JobTask> jobUpdateTasks = makeJobUpdateTasks(sourceStoreMappings);
log.info("Found jobUpdateTasks {}", jobUpdateTasks);

if (jobUpdateTasks.isEmpty()) {
log.info("No jobs found.");
Expand Down
6 changes: 6 additions & 0 deletions docs/coverage/java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>dev.feast</groupId>
<artifactId>feast-storage-connector-bigtable</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>dev.feast</groupId>
<artifactId>feast-storage-connector-redis</artifactId>
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ require (
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/mock v1.2.0
github.com/golang/protobuf v1.4.2
github.com/google/go-cmp v0.4.0
github.com/google/go-cmp v0.5.0
github.com/huandu/xstrings v1.2.0 // indirect
github.com/lyft/protoc-gen-validate v0.1.0 // indirect
github.com/mitchellh/copystructure v1.0.0 // indirect
Expand All @@ -23,11 +23,11 @@ require (
github.com/woop/protoc-gen-doc v1.3.0 // indirect
go.opencensus.io v0.22.3 // indirect
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
golang.org/x/net v0.0.0-20200513185701-a91f0712d120
golang.org/x/net v0.0.0-20200625001655-4c5254603344
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 // indirect
golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa // indirect
golang.org/x/tools v0.0.0-20200722181740-bd1e9de8d890 // indirect
google.golang.org/grpc v1.29.1
google.golang.org/protobuf v1.24.0 // indirect
google.golang.org/protobuf v1.25.0 // indirect
gopkg.in/russross/blackfriday.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.2.4
istio.io/gogo-genproto v0.0.0-20191212213402-78a529a42cd8 // indirect
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
Expand Down Expand Up @@ -334,6 +335,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
Expand All @@ -356,6 +358,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand All @@ -370,6 +373,7 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d h1:g9qWBGx4puODJTMVyoPrpoxPFgVGd+z1DZwjfRu4d0I=
Expand All @@ -396,6 +400,7 @@ golang.org/x/net v0.0.0-20200320220750-118fecf932d8 h1:1+zQlQqEEhUeStBTi653GZAnA
golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120 h1:EZ3cVSzKOlJxAd8e8YAJ7no8nNypTxexh/YE/xW3ZEY=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -406,6 +411,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -474,6 +480,8 @@ golang.org/x/tools v0.0.0-20200604042327-9b20fe4cabe8 h1:8Xr1qwxn90MXYKftwNxIO2g
golang.org/x/tools v0.0.0-20200604042327-9b20fe4cabe8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa h1:mMXQKlWCw9mIWgVLLfiycDZjMHMMYqiuakI4E/l2xcA=
golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200722181740-bd1e9de8d890 h1:Fwx9UWtbBIMKQ+hdL1ltEyRaLkbpvN+ii5XUAz9o2n8=
golang.org/x/tools v0.0.0-20200722181740-bd1e9de8d890/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
Expand Down Expand Up @@ -530,6 +538,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
6 changes: 6 additions & 0 deletions ingestion/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>dev.feast</groupId>
<artifactId>feast-storage-connector-bigtable</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>dev.feast</groupId>
<artifactId>feast-common</artifactId>
Expand Down
3 changes: 3 additions & 0 deletions ingestion/src/main/java/feast/ingestion/utils/StoreUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import feast.proto.types.ValueProto.ValueType.Enum;
import feast.storage.api.writer.FeatureSink;
import feast.storage.connectors.bigquery.writer.BigQueryFeatureSink;
import feast.storage.connectors.bigtable.writer.BigtableFeatureSink;
import feast.storage.connectors.redis.writer.RedisFeatureSink;
import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -86,6 +87,8 @@ public static FeatureSink getFeatureSink(Store store) {
return RedisFeatureSink.fromConfig(store.getRedisConfig());
case BIGQUERY:
return BigQueryFeatureSink.fromConfig(store.getBigqueryConfig());
case BIGTABLE:
return BigtableFeatureSink.fromConfig(store.getBigtableConfig());
default:
throw new RuntimeException(String.format("Store type '%s' is unsupported", storeType));
}
Expand Down
11 changes: 11 additions & 0 deletions protos/feast/core/Store.proto
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ message Store {
CASSANDRA = 3;

REDIS_CLUSTER = 4;

BIGTABLE = 5;
}

message RedisConfig {
Expand Down Expand Up @@ -126,6 +128,14 @@ message Store {
int32 port = 2;
}

message BigtableConfig {
string project_id = 1;
string instance_id = 2;
string table_id = 3;
int32 initial_backoff_ms = 4;
int32 max_retries = 5;
}

message RedisClusterConfig {
// List of Redis Uri for all the nodes in Redis Cluster, comma separated. Eg. host1:6379, host2:6379
string connection_string = 1;
Expand Down Expand Up @@ -175,5 +185,6 @@ message Store {
BigQueryConfig bigquery_config = 12;
CassandraConfig cassandra_config = 13;
RedisClusterConfig redis_cluster_config = 14;
BigtableConfig bigtable_config = 15;
}
}
38 changes: 38 additions & 0 deletions protos/feast/storage/Bigtable.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2019 The Feast Authors
*
* Licensed 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
*
* https://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.
*/

syntax = "proto3";

import "feast/types/Field.proto";

package feast.storage;

option java_outer_classname = "BigtableProto";
option java_package = "feast.proto.storage";
option go_package = "github.com/feast-dev/feast/sdk/go/protos/feast/storage";

message BigtableKey {
// Field number 1 is reserved for a future distributing hash if needed
// (for when redis is clustered).

// FeatureSet this row belongs to, this is defined as featureSetName.
string feature_set = 2;

// List of fields containing entity names and their respective values
// contained within this feature row. The entities should be sorted
// by the entity name alphabetically in ascending order.
repeated feast.types.Field entities = 3;
}
4 changes: 2 additions & 2 deletions sdk/go/protos/feast/core/CoreService.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions sdk/go/protos/feast/core/FeatureSet.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions sdk/go/protos/feast/core/FeatureSetReference.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading