.. index:: Technical_Server .. _Technical_Server: IceProd Server Details ====================== The server handles many different tasks and has several independent modules to take care of them. It uses asynchronous programming to avoid blocking on I/O. The server daemon handles startup of each module. It can also reload, restart, stop, or kill the modules. IceProd can be reloaded to update a configuration variable. This will only reload the affected parts of IceProd, while letting the rest continue running. Configuration ------------- The configuration is in :ref:`config`, which is stored as a dictionary and dumped to a json file on every modification. Queueing -------- This is where IceProd actually submits tasks to a grid. Various grid architectures are supported through plugins: * `HTCondor `_ (primary) * `PBS `_ / `Torque `_ * `Cream `_ The queueing module can submit to multiple grids at once since multiple plugins can be active at the same time. .. toctree:: :maxdepth: 3 submit_to_queue task_relationships lifecycles global_queueing Database -------- IceProd stores most of its information in a database. By default, it uses SQLite and a few local database files. For a master site that must handle the information of a large number of sites, MySQL can be used as a database (though this will take some external setup). The database structure is given in :ref:`dbtables`. Website ------- The website is the main way to communicate with IceProd, both from jobs and as a user. .. toctree:: :maxdepth: 3 async website auth user_accounts Proxying -------- Proxying is taken care of by Squid Cache, if configured. IceProd can start its own squid or use an external caching server. Other Utilities --------------- OpenSSL ^^^^^^^ OpenSSL can be used to make a local CA certificate, make a regular certificate signed by a CA certificate, or verify a certificate. This is mostly used by sites to create self-signed certificates. Scheduler ^^^^^^^^^ The scheduler can be used like cron, to run assigned tasks at specific intervals. It will mostly be used to update graphs and run other timed interactions.