|
1 | 1 | import ast |
2 | 2 | import json |
3 | 3 | import logging |
| 4 | +import os |
| 5 | +import sys |
4 | 6 | import traceback |
5 | 7 | from datetime import datetime |
6 | 8 | from typing import Any, Dict, List, cast |
7 | 9 |
|
| 10 | +import click |
8 | 11 | import pyarrow as pa |
9 | 12 | import pyarrow.flight as fl |
10 | 13 | from google.protobuf.json_format import Parse |
@@ -503,6 +506,24 @@ def get_table_column_names_and_types_from_data_source(self, command: dict): |
503 | 506 | ) |
504 | 507 | return pa.table({"name": column_names, "type": types}) |
505 | 508 |
|
| 509 | + def serve(self): |
| 510 | + message = "offline server starting with pid: " |
| 511 | + logger.info( |
| 512 | + message + "[%d]", |
| 513 | + os.getpid(), |
| 514 | + extra={"color_message": message + "[" + click.style("%d", fg="cyan") + "]"}, |
| 515 | + ) |
| 516 | + super().serve() |
| 517 | + |
| 518 | + def shutdown(self): |
| 519 | + message = "Sending a shutdown signal to the offline server running with pid:: " |
| 520 | + logger.info( |
| 521 | + message + "[%d]", |
| 522 | + os.getpid(), |
| 523 | + extra={"color_message": message + "[" + click.style("%d", fg="cyan") + "]"}, |
| 524 | + ) |
| 525 | + super().shutdown() |
| 526 | + |
506 | 527 |
|
507 | 528 | def remove_dummies(fv: FeatureView) -> FeatureView: |
508 | 529 | """ |
@@ -533,5 +554,12 @@ def start_server( |
533 | 554 |
|
534 | 555 | location = "grpc+tcp://{}:{}".format(host, port) |
535 | 556 | server = OfflineServer(store, location) |
536 | | - logger.info(f"Offline store server serving on {location}") |
537 | | - server.serve() |
| 557 | + try: |
| 558 | + logger.info(f"Offline store server serving at: {location}") |
| 559 | + server.serve() |
| 560 | + except KeyboardInterrupt: |
| 561 | + logger.info("KeyboardInterrupt received, stopping the offline server.") |
| 562 | + finally: |
| 563 | + server.shutdown() |
| 564 | + logger.info("offline server stopped.") |
| 565 | + sys.exit(0) |
0 commit comments