Home Download FAQ / Knowledge Base Screenshots Documentation Support Roadmap

How deferred processing works in Citadel

One advantage of the Citadel system over other, less tightly integrated groupware packages is that it has the ability to defer potentially resource-intensive operations until off-hours, improving the interactive performance of the system during the hours that users are online and active. This is primarily used for performing "delete" operations in a batch mode. This article explains the technological underpinnings, and is mainly intended for developers.

Data model

In order to understand what's going on under the covers, there are several things you need to know about Citadel's data model:

Synchronous operations

Here are some activities which are performed synchronously -- in other words, the user must wait while they are completed.



Asynchronous operations (or, what happens during a purger run)



Here's where the magic happens. We run a nightly batch job, affectionately known as The Dreaded Auto-Purger, which is responsible for cleaning everything up. It does a lot of work, in a very specific order to ensure that it doesn't have to run twice to get everything. The code can all be found in modules/expire/serv_expire.c. Here's how it works.
There are no social media links here. Enjoy a friendly Citadel community instead. Or go outside.