|
6 | 6 | import json |
7 | 7 | import pandas as pd |
8 | 8 | import argparse |
| 9 | +import os |
| 10 | +import sys |
| 11 | +from pathlib import Path |
| 12 | + |
| 13 | +# TITANS environment setup (Test) - set before imports |
| 14 | +os.environ.setdefault("TITANS_ENV", "test") |
| 15 | + |
| 16 | +# Add titans_common path (merge -> batch-test -> aws -> spot-dataset -> collector) |
| 17 | +COLLECTOR_ROOT = Path(__file__).resolve().parents[4] |
| 18 | +sys.path.insert(0, str(COLLECTOR_ROOT)) |
| 19 | + |
| 20 | +from titans_common.upload_titans import upload_hot_tier |
| 21 | +from titans_common.warm_compactor import run_compaction, ConcurrencyConflictError |
| 22 | +from titans_common.utils import prepare_for_upload |
| 23 | + |
| 24 | +PROVIDER = "aws" # Provider constant |
9 | 25 |
|
10 | 26 | # ------ import user module ------ |
11 | 27 | from utility.slack_msg_sender import send_slack_message |
@@ -235,6 +251,29 @@ def main(): |
235 | 251 | end_time = datetime.now(timezone.utc) |
236 | 252 | print(f"Uploading time to TSDB is {(end_time - start_time).total_seconds() * 1000 / 60000:.2f} min") |
237 | 253 |
|
| 254 | + # ------ TITANS Hot tier upload + Warm compaction (Test environment) ------ |
| 255 | + try: |
| 256 | + # Merge changed_df + removed_df (with Ceased column alignment) |
| 257 | + # Note: -1 sentinel values are NOT filtered — same behavior as Timestream's |
| 258 | + # upload_timestream(data.dropna()). The fillna(-1) values pass through to |
| 259 | + # TITANS, matching Timestream TSDB semantics. |
| 260 | + combined_df = prepare_for_upload(changed_df, removed_df, pk_columns=workload_cols) |
| 261 | + |
| 262 | + # Ensure timezone-aware (TIMESTAMP must be timezone-aware) |
| 263 | + ts_utc = TIMESTAMP if TIMESTAMP.tzinfo else TIMESTAMP.replace(tzinfo=timezone.utc) |
| 264 | + |
| 265 | + if not combined_df.empty: |
| 266 | + titans_s3 = boto3.client("s3") |
| 267 | + hot_key = upload_hot_tier(combined_df, ts_utc, provider=PROVIDER, s3_client=titans_s3) |
| 268 | + if hot_key: |
| 269 | + run_compaction(hot_key, ts_utc, provider=PROVIDER, timeout_seconds=30.0, s3_client=titans_s3) |
| 270 | + print(f"[TITANS/{PROVIDER}/TEST] Successfully uploaded to test environment") |
| 271 | + |
| 272 | + except ConcurrencyConflictError as e: |
| 273 | + print(f"[TITANS/{PROVIDER}/TEST] Concurrency conflict, will retry next cycle: {e}") |
| 274 | + except Exception as e: |
| 275 | + print(f"[TITANS/{PROVIDER}/TEST] Failed (non-fatal): {e}") |
| 276 | + |
238 | 277 | # ------ Upload Spotlake Query Selector to S3 ------ |
239 | 278 | start_time = datetime.now(timezone.utc) |
240 | 279 | update_query_selector(changed_df) |
|
0 commit comments