def test_from_feature_set(self): feature_set = FeatureSet("test", "test") feature_set.version = 2 ref = FeatureSetRef.from_feature_set(feature_set) assert ref.name == "test" assert ref.project == "test" assert ref.version == 2
def test_list_ingest_jobs(self, mocked_client, mocker): mocker.patch.object( mocked_client, "_core_service_stub", return_value=Core.CoreServiceStub(grpc.insecure_channel("")), ) feature_set_proto = FeatureSetProto( spec=FeatureSetSpecProto( project="test", name="driver", max_age=Duration(seconds=3600), ) ) mocker.patch.object( mocked_client._core_service_stub, "ListIngestionJobs", return_value=ListIngestionJobsResponse( jobs=[ IngestJobProto( id="kafka-to-redis", external_id="job-2222", status=IngestionJobStatus.RUNNING, feature_sets=[feature_set_proto], source=Source( type=SourceType.KAFKA, kafka_source_config=KafkaSourceConfig( bootstrap_servers="localhost:9092", topic="topic" ), ), store=Store(name="redis"), ) ] ), ) # list ingestion jobs by target feature set reference ingest_jobs = mocked_client.list_ingest_jobs( feature_set_ref=FeatureSetRef.from_feature_set( FeatureSet.from_proto(feature_set_proto) ) ) assert len(ingest_jobs) >= 1 ingest_job = ingest_jobs[0] assert ( ingest_job.status == IngestionJobStatus.RUNNING and ingest_job.id == "kafka-to-redis" and ingest_job.external_id == "job-2222" and ingest_job.feature_sets[0].name == "driver" and ingest_job.source.source_type == "Kafka" )
def test_all_types_ingest_jobs(client, all_types_dataframe): # list ingestion jobs given featureset all_types_fs = client.get_feature_set(name="all_types") ingest_jobs = client.list_ingest_jobs( feature_set_ref=FeatureSetRef.from_feature_set(all_types_fs)) # filter ingestion jobs to only those that are running ingest_jobs = [job for job in ingest_jobs if job.status == IngestionJobStatus.RUNNING] assert len(ingest_jobs) >= 1 for ingest_job in ingest_jobs: # restart ingestion ingest_job client.restart_ingest_job(ingest_job) ingest_job.wait(IngestionJobStatus.RUNNING) assert ingest_job.status == IngestionJobStatus.RUNNING # stop ingestion ingest_job client.stop_ingest_job(ingest_job) ingest_job.wait(IngestionJobStatus.ABORTED) assert ingest_job.status == IngestionJobStatus.ABORTED
def test_basic_ingest_jobs(client): # list ingestion jobs given featureset cust_trans_fs = client.get_feature_set(name="customer_transactions") ingest_jobs = client.list_ingest_jobs( feature_set_ref=FeatureSetRef.from_feature_set(cust_trans_fs)) # filter ingestion jobs to only those that are running ingest_jobs = [job for job in ingest_jobs if job.status == IngestionJobStatus.RUNNING] assert len(ingest_jobs) >= 1 for ingest_job in ingest_jobs: # restart ingestion ingest_job client.restart_ingest_job(ingest_job) ingest_job.wait(IngestionJobStatus.RUNNING) assert ingest_job.status == IngestionJobStatus.RUNNING # stop ingestion ingest_job client.stop_ingest_job(ingest_job) ingest_job.wait(IngestionJobStatus.ABORTED) assert ingest_job.status == IngestionJobStatus.ABORTED
def test_all_types_ingest_jobs(client, all_types_dataframe): # list ingestion jobs given featureset all_types_fs = client.get_feature_set(name="all_types") ingest_jobs = client.list_ingest_jobs( feature_set_ref=FeatureSetRef.from_feature_set(all_types_fs)) # filter ingestion jobs to only those that are running ingest_jobs = [ job for job in ingest_jobs if job.status == IngestionJobStatus.RUNNING ] assert len(ingest_jobs) >= 1 ingest_job = ingest_jobs[0] # restart ingestion ingest_job # restart means stop current job # (replacement will be automatically spawned) client.restart_ingest_job(ingest_job) # wait for replacement to be created time.sleep(15) # should be more than polling_interval # id without timestamp part # that remains the same between jobs shared_id = "-".join(ingest_job.id.split("-")[:-1]) replacement_jobs = [ job for job in ingest_jobs if job.status == IngestionJobStatus.RUNNING and job.id.startswith(shared_id) ] assert len(replacement_jobs) >= 1 replacement_job = replacement_jobs[0] replacement_job.wait(IngestionJobStatus.RUNNING) assert replacement_job.status == IngestionJobStatus.RUNNING # stop ingestion ingest_job client.stop_ingest_job(replacement_job) replacement_job.wait(IngestionJobStatus.ABORTED) assert replacement_job.status == IngestionJobStatus.ABORTED