bat-6 commited on
Commit
b0ff04f
·
1 Parent(s): ed59ac9

feat: add sync worker to process database queue items and trigger automated FAISS index updates

Browse files
Files changed (1) hide show
  1. src/similarity_model/sync_worker.py +34 -5
src/similarity_model/sync_worker.py CHANGED
@@ -174,13 +174,42 @@ def process_single_item(engine, item) -> bool:
174
  def run_worker():
175
  logger.info("Initializing Sync Worker service...")
176
 
177
- # Verify DB connection
178
  try:
179
- with engine.connect() as conn:
180
- conn.execute(text("SELECT 1"))
181
- logger.info("Database connection verified successfully.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  except Exception as exc:
183
- logger.critical(f"Database connection failed: {exc}")
184
  sys.exit(1)
185
 
186
  rebuild_manager = RebuildManager()
 
174
  def run_worker():
175
  logger.info("Initializing Sync Worker service...")
176
 
177
+ # Verify DB connection and auto-initialize schema/triggers if missing
178
  try:
179
+ with engine.begin() as conn:
180
+ # 1. Check and create SyncQueue table
181
+ row = conn.execute(text("SELECT OBJECT_ID('SyncQueue', 'U')")).fetchone()
182
+ if row[0] is None:
183
+ logger.info("SyncQueue table does not exist. Initializing from DDL script...")
184
+ ddl_path = Path(__file__).resolve().parents[2] / "Data" / "database" / "create_sync_queue.sql"
185
+ if ddl_path.exists():
186
+ sql = ddl_path.read_text(encoding="utf-8")
187
+ conn.execute(text(sql))
188
+ logger.info("SyncQueue table and indexes created successfully.")
189
+ else:
190
+ logger.error("DDL script 'create_sync_queue.sql' not found!")
191
+
192
+ # 2. Check and deploy SQL triggers
193
+ row_trg = conn.execute(text("SELECT OBJECT_ID('trg_Projects_Insert', 'TR')")).fetchone()
194
+ if row_trg[0] is None:
195
+ logger.info("SQL Triggers do not exist on 'Projects'. Deploying triggers...")
196
+ triggers_path = Path(__file__).resolve().parents[2] / "Data" / "database" / "create_triggers.sql"
197
+ if triggers_path.exists():
198
+ sql_content = triggers_path.read_text(encoding="utf-8")
199
+ import re
200
+ # Split by SQL Server GO batch separator and execute statements individually
201
+ statements = re.split(r'(?i)\bGO\b', sql_content)
202
+ for stmt in statements:
203
+ stmt_clean = stmt.strip()
204
+ if stmt_clean:
205
+ conn.execute(text(stmt_clean))
206
+ logger.info("SQL Triggers deployed successfully.")
207
+ else:
208
+ logger.error("Trigger script 'create_triggers.sql' not found!")
209
+
210
+ logger.info("Database connection verified and schema initialized successfully.")
211
  except Exception as exc:
212
+ logger.critical(f"Database connection or schema initialization failed: {exc}")
213
  sys.exit(1)
214
 
215
  rebuild_manager = RebuildManager()