osftslog

This page was automatically generated from the database schema dump and may be incomplete or incorrect. Columns and data types are confirmed from the schema dump; the value ranges of flag1/flag2 and the pipeline lifecycle are additionally reverse-engineered from enaio server logs (version 11.0, build 801/802).

Persistent status mirror of the enaio® Full Text Search (FTS) pipeline. One row per indexable DMS object (primary key osid), living forever — no DELETE observed in the analysed logs. No pull queue: every access is via osid lookup; the actual job queue of the FTS pipeline is oscpmqueue.

Maintained exclusively by two service workers:

  • index:<port> — FTS indexer service (default port 8045), consuming the CP queues FULLTEXTIDX, FULLTEXTDOC, FULLTEXTFILTER, FULLTEXTLOCATION, FULLTEXTDELETE.

  • os-rendition-cache — rendition service, consuming the CP queues RENDITION, RENRESET.

User clients never access this table directly.

1. Columns

Name Type Length Description

osid

int

not-null

DMS object ID (primary key, unique per row). References the main object table of the respective object type (objectX.id).

ostype

int

not-null

enaio object-type ID (haupttyp * 65536 + untertyp, see Object-type ID). Observed example values include 17, 262144, 262163, 262248, 393219.

date1

int

Trigger time — point in time of the last object change that required a (re-)indexing. Format: minutes since Unix epoch (1970-01-01 UTC).

date2

int

Last processing time of the pipeline (same format as date1). Updated on every status change — including partial updates by the rendition worker. On INSERT, initially identical to date1.

flag1

int

Index-relevance flag. Consistently 1 in the analysed logs; 0 presumably means "not to be indexed". Set exclusively by full `UPDATE`s of the indexer; partial `UPDATE`s by the rendition worker leave the column untouched.

flag2

int

Pipeline status code — see Value range flag2. A mix of HTTP-status-code analogues (200/404/422) for terminal states and vendor-specific codes (10011006) for intermediate pipeline phases.

instance

nvarchar

32

Worker instance tag in the form '<service-name>:<port>' (e.g. 'index:8045'). Varies across multiple indexer instances.

2. Value range flag2

Value Meaning

0

Object picked up by the indexer from FULLTEXTIDX — waiting for the final indexing run. INSERT always sets this value initially. Full UPDATE by indexer, preceded by: std.GetNextCPMessage(QueueNames='FULLTEXTIDX').

200

OK — full-text successfully indexed. Full UPDATE by indexer, preceded by: std.GetNextCPMessage(QueueNames='FULLTEXTDOC').

404

Full-text rendition not (yet) available in the cache. The indexer then triggers a new rendition job via std.CreateCPMessages with CreateRenditionMessages=true. Transient state.

422

Rendition is present but the content cannot (meaningfully) be indexed — e.g. a PDF without extractable text (scan without OCR), format incompatibility. Terminal state (no automatic retry observed).

1001

Rendition worker has picked up the job. Partial UPDATE by rendition service, preceded by: std.GetNextCPMessage(QueueNames='RENDITION').

1002

Rendition finished and written to cache (after std.StoreInCacheByID). Partial UPDATE by rendition service.

1003

Rendition worker starts the productive step. Deterministically transitions to 1004.

1004

Rendition running / result pending. Typical predecessor state of 200.

1006

Rendition skipped — no hash, no full-text file available. Retry path.

Full UPDATE`s (by the indexer) set `flag1, date1, date2, flag2, instance. Partial UPDATE`s (by the rendition service) set only `date2, flag2.

3. Typical lifecycle of an osid

INSERT (flag2 = 0, by indexer from FULLTEXTIDX)
  → UPDATE flag2 = 1001   (rendition worker pickup)
  → UPDATE flag2 = 1003 → 1004   (rendition running)
  → UPDATE flag2 = 1002   (rendition in cache)
  → UPDATE flag2 = 200    (indexer from FULLTEXTDOC: successfully indexed)

When the object changes, a new FULLTEXTIDX entry is created in oscpmqueue; the lifecycle restarts with flag2 = 0.

4. Observed SQL patterns

-- Initial registration (INSERT, by indexer)
INSERT INTO osftslog (osid, ostype, date1, date2, flag1, flag2, instance)
VALUES (2677570, 262248, 29657186, 29657186, 1, 0, 'index:8045');

-- Set terminal state (full UPDATE, by indexer)
UPDATE osftslog
SET date1 = 29657186, flag1 = 1, date2 = 29657186, flag2 = 200, instance = 'index:8045'
WHERE osid = 2677570;

-- Intermediate pipeline phase (partial UPDATE, by rendition service)
UPDATE osftslog SET date2 = 29657186, flag2 = 1002 WHERE osid = 2677570;

-- Status lookup (before every operation)
SELECT * FROM osftslog WHERE osid = 2677570;
  • oscpmqueue — the actual CP message queue of the pipeline (push-pull mechanism).

  • osftcontent — full-text content storage (read by the indexer as source).

  • osfttab — main index table of the full-text search.

Job Role w.r.t. osftslog

std.GetNextCPMessage

Pickup from oscpmqueue — starts every pipeline action. The queue name determines which flag2 values follow.

std.GetCPObjectInfo

Provides the worker with HasVolltextFile and Hash — influences whether 10011006 (skip) or 1003/1004 (work) is set.

std.GetCPObjectIdxFulltext

Indexer read path: fetches the full-text content (from osftcontent or the cache). Empty result → flag2 = 404.

std.CreateCPMessages

Called by the indexer when a rendition needs to be re-requested (CreateRenditionMessages=true).

std.DispatchCPMessage

Post-processing of a completed message.

std.CPRenditionChanged

Called by the rendition service after Reason=TEXT / PAGECOUNT / … . Triggers re-indexing (transition 2001004).

ado.ExecuteSQL

Direct SQL path through which both workers read and write osftslog.