Files
flexnbd-c/src/status.h

115 lines
3.1 KiB
C
Raw Normal View History

2012-06-22 10:05:41 +01:00
#ifndef STATUS_H
#define STATUS_H
/* Status reports
*
* The status will be reported by writing to a file descriptor. The
* status report will be on a single line. The status format will be:
*
* A=B C=D
*
* That is, a space-separated list of label,value pairs, each pair
* separated by an '=' character. Neither ' ' nor '=' will appear in
* either labels or values.
*
* Boolean values will appear as the strings "true" and "false".
*
* The following status fields are defined:
*
* pid:
* The current process ID.
*
* size:
* The size of the backing file being served, in bytes.
*
2012-06-22 10:05:41 +01:00
* has_control:
* This will be false when the server is listening for an incoming
* migration. It will switch to true when the end-of-migration
* handshake is successfully completed.
* If the server is started in "serve" mode, this will never be
* false.
*
* clients_allowed:
* This will be false if the server is not currently allowing new
* connections, for instance, if we're in the migration endgame.
*
* num_clients:
* This tells us how many clients are currently running. If we're in the
* migration endgame, it should be 0
*
2012-06-22 10:05:41 +01:00
* is_migrating:
* This will be false when the server is started in either "listen"
* or "serve" mode. It will become true when a server in "serve"
* mode starts a migration, and will become false again when the
* migration terminates, successfully or not.
* If the server is currently in "listen" mode, this will never be
2012-06-22 10:05:41 +01:00
* true.
*
2013-09-23 14:09:25 +01:00
*
* If is_migrating is true, then a number of other attributes may appear,
* relating to the progress of the migration.
*
* migration_duration:
* How long the migration has been running for, in ms.
*
* migration_speed:
* Network transfer speed, in bytes/second. This only takes dirty bytes
* into account.
*
* migration_pass:
* When migrating, we perform a number of passes over the file. This indicates
* the current pass.
*
* pass_dirty_bytes:
* For the current pass, how many dirty bytes have we found so far? These are
* classed as bytes that we are required to send to the destination.
*
* pass_clean_bytes:
* For the current pass, how many clean bytes? These are bytes we don't need
* to send to the destination. Once all the bytes are clean, the migration is
* done.
*
2013-09-23 14:09:25 +01:00
* migration_seconds_left:
* Our current best estimate of how many seconds are left before the migration
* migration is finished.
*
2012-06-22 10:05:41 +01:00
*/
#include "serve.h"
#include <sys/types.h>
#include <unistd.h>
2012-06-22 10:05:41 +01:00
struct status {
pid_t pid;
uint64_t size;
2012-06-22 10:05:41 +01:00
int has_control;
int clients_allowed;
int num_clients;
2012-06-22 10:05:41 +01:00
int is_mirroring;
int migration_pass;
uint64_t pass_dirty_bytes;
uint64_t pass_clean_bytes;
uint64_t migration_duration;
uint64_t migration_speed;
uint64_t migration_speed_limit;
2013-09-23 14:09:25 +01:00
uint64_t migration_seconds_left;
2012-06-22 10:05:41 +01:00
};
/** Create a status object for the given server. */
struct status * status_create( struct server * );
/** Output the given status object to the given file descriptot */
int status_write( struct status *, int fd );
/** Free the status object */
void status_destroy( struct status * );
#endif