# Presentation: 373027

## CZAR: Jefferson Lab’s New Archiving System

**Christopher A. Larrieu**
**Chris Slominski**
**Matthew Bickley**

## Buzzword Conformance

**Relational Database**
**SQL**
**CORBA**
**Java**
**Distributed System**
**Multi-threaded CA**
**Plug-ins**
**C++, Standard Library**

## Components

**Configuration Database**
**Data logging engine**
**Data store**
**History data server**
**Configuration management GUI**
**Engine control / monitor GUI**
**History data retrieval clients**

## System Overview

**System Overview**

- Database
- (MySQL)

- DAQ Engine

- History Server

- Manager GUI

- Filesystem

- XARR

- StripTool

- DARTH

- CORBA

- CORBA

- Embedded SQL

- JDBC

## Configuration Database

**Arbitrary relationships between PVs**
**administrative groupings**
**logical groupings**
**convenience groupings**
**“****Stream” associates PV with DAQ specs**
**journal configuration changes**
**multiple, evolving, specs per PV**

## Data Acquisition Engine

**Multi-threaded CA client**
**runs CA task in separate thread**
**SQL client**
**reads configuration information from database**
**CORBA server**
**exposes control API**
**pushes status events into CosEventService**
**DAQ plug-in modules**

## DAQ Engine Remote API

**Activate / Deactivate streams**
**Enable / Disable per-stream status events**
**connect, disconnect, flush**
**Query stream status**
**bytes written, when connected, buffer status**
**Asynchronous status events**
**engine state, bytes written, CA activity**

## DAQ Plug-in Modules

**Monitor**
**time threshold**
**buffer size**
**maximum buffer age**
**Trigger**
**ring buffer size**
**causal trigger**
**flush delay**

## Data Store

**Engine**
**streams raw data to disk**
**Converter**
**runs periodically, or on-demand**
**“****cooks” raw data (convert, compress, index)**
**Database**
**connection history**
**data directory**
**file status**

## History Data Server

**Multi-threaded CORBA server**
**Accesses data store via CADataStore API**
**Consults database for data summary**
**Reads data from file system shared with Engine**
**Converts spooled but unprocessed data on demand**

## History Server Remote API

**Supplies archive accessor objects to clients**
**Client initializes range in archive accessor**
**data summary**
**first, last point**
**before, after point**
**num points**
**range accessor object**
**provides data pull interface**
**serves sequences of data in large chunks**
**timestamp, value, status, severity, control info**

## Managment GUI

**Java 1.3, Swing, JDBC, CORBA**
**truly platform-independent**
**View/manipulate hierarchical ordering**
**Specify/modify DAQ parameters**
**Enable/disable streams**
**Monitor/control engine**
**flush streams**
**display engine status**
**Multiple simultaneous instances**

## History Clients

**XARR**
**pure CORBA client**
**command-line tools**
**specify signal, time range**
**StripTool**
**work in progress**
**New java-based tools**

## Status

**Engine up since January 2002**
**~ 21,000 signals**
**~ 2Gb / day raw; ~ 600Mb processed**
**< 20% CPU (HP B2000, 1GB RAM)**
**XARR**
**retrieve 100,000 points: ~ 3 sec.**
**Management GUI 1.0 99% done**
**Port to Solaris, Oracle: June**

## Transportability

**Entire system**
**Engine**
**History server**
**Database structure**
**CADataStore**
**CORBA API**
**Modular DAQ plug-ins**

## Scalability

**Data store decoupled from data acquisition**
**multiple engines can spool data**
**Database indexes, summarizes data**
**fast lookup**
**File system stores data**
**easily shuffle data offline/online**
**fast access to binary data**
**History server**
**reduce data before transporting**