> 1. Eventclient |  |
> 1.1 --Introduction |  |
> 1.2 Client |  |
> 1.3 Server |  |

> Function Index |  |

# 1. Eventclient

## 1.1 --Introduction

NAME

    Evenclient -- The Grid Engine Event Client Interface

FUNCTION

    The Grid Engine Event Client Interface provides a means to connect
    to the Grid Engine qmaster and receive information about objects
    (actual object properties and changes).
    It provides a subscribe/unsubscribe mechanism allowing fine grained
    selection of objects per object types and event types (e.g. add,
    modify, delete).

NOTES

    The current implementation is a generalized form of the event client
    interface that already existed in Codine/GRD.
    It still contains code handling scheduler specific behavior, like
    the flushing of certain events.
    A further cleanup and generalization step should be done.
    The code should also be extracted from qmaster, scheduler and libsched
    directories and could form a new event client library.

SEE ALSO

- 1.2.1 --Introduction.
- 1.3.1 --Introduction.

## 1.2 Client

### 1.2.1 --Introduction

NAME

    Event Client Interface -- Client Functionality

SYNOPSIS

    int ec_prepare_registration(u_long32 id, const char *name);
    int ec_register(void);
    int ec_deregister(void);

    int ec_subscribe(int event);
    int ec_subscribe_all(void);

    int ec_unsubscribe(int event);
    int ec_unsubscribe_all(void);

    int ec_set_edtime(int intval);
    int ec_get_edtime(void);

    int ec_commit(void);

    int ec_get(lList **);

    void ec_mark4registration(void);
    int ec_need_new_registration(void);

FUNCTION

    The client side of the event client interface provides functions
    to register and deregister (before registering, you have to call
    ec_prepare_registration to set an id and client name).

    The subscribe / unsubscribe mechanism allows to select the data
    (object types and events) an event client shall be sent.

    It is possible to set the interval in which qmaster will send
    new events to an event client.

EXAMPLE

    clients/qevent/qevent.c can serve as a simple example.
    The scheduler (daemons/schedd/sge_schedd.c) is also implemented
    as event client and uses all mechanisms of the event client
    interface.

SEE ALSO

- 1.1 --Introduction.

### 1.2.2 -Global_Variables

NAME

    Global_Variables -- global variables in the client

SYNOPSIS

    static int config_changed = 0;
    static int need_register  = 1;
    static lListElem *ec      = NULL;
    static u_long32 ec_reg_id = 0;

FUNCTION

    config_changed - the configuration changed (subscription or event interval)
    need_register  - the client is not registered at the server
    ec             - event client object holding configuration data
    ec_reg_id      - the id used to register at the qmaster

NOTES

    These global variables should be part of the event client object.
    The only remaining global variable would be a list of event client objects,
    allowing one client to connect to multiple event client servers.

### 1.2.3 ck_event_number

NAME

    ck_event_number() -- test event numbers

SYNOPSIS

    static u_long32 ck_event_number(lList *lp, u_long32 *waiting_for,
                                    u_long32 *wrong_number)

FUNCTION

    Tests list of events if it contains right numbered events.

    Events with numbers lower than expected get trashed.

    In cases the master has added no new events to the event list
    and the acknowledge we sent was lost also a list with events lower
    than "waiting_for" is correct.
    But the number of the last event must be at least "waiting_for"-1.

    On success *waiting_for will contain the next number we wait for.

    On failure *waiting_for gets not changed and if wrong_number is not
    NULL *wrong_number contains the wrong number we got.

INPUTS

    lList *lp              - event list to check
    u_long32 *waiting_for  - next number to wait for
    u_long32 *wrong_number - event number that causes a failure

RESULT

    static u_long32 - 0 on success, else -1

### 1.2.4 ec_commit

NAME

    ec_commit() -- commit configuration changes

SYNOPSIS

    int ec_commit(void)

FUNCTION

    Configuration changes (subscription and/or event delivery time) will be
    sent to the event server.
    The function should be called after (multiple) configuration changes
    have been made.
    If it is not explicitly called by the event client program, the next
    call of ec_get will commit configuration changes before looking for new
    events.

RESULT

    int - 1 on success, else 0

SEE ALSO

- 1.2.5 ec_config_changed.
- 1.2.7 ec_get.

### 1.2.5 ec_config_changed

NAME

    ec_config_changed() -- has the configuration changed?

SYNOPSIS

    static void ec_config_changed(void)

FUNCTION

    Checkes whether the configuration has changes.
    Configuration changes can either be changes in the subscription
    or change of the event delivery interval.

RESULT

    static void - 1, if the config has been changed, else 0

SEE ALSO

- 1.2.14 ec_subscribe.
- 1.2.15 ec_subscribe_all.
- 1.2.16 ec_unsubscribe.
- 1.2.17 ec_unsubscribe_all.
- 1.2.13 ec_set_edtime.

### 1.2.6 ec_deregister

NAME

    ec_deregister() -- deregister from the event server

SYNOPSIS

    int ec_deregister(void)

FUNCTION

    Deregister from the event server (usually the qmaster).
    This function should be called when an event client exits.

    If an event client does not deregister, qmaster will spool events for this
    client until it times out (it did not acknowledge events sent by qmaster).
    After the timeout, it will be deleted.

RESULT

    int - 1, if the deregistration succeeded, else 0

SEE ALSO

- 1.2.12 ec_register.

### 1.2.7 ec_get

NAME

    ec_get() -- look for new events

SYNOPSIS

    int ec_get(lList **event_list)

FUNCTION

    ec_get looks for new events.
    If new events have arrived, they are passed back to the caller in the
    parameter event_list.

    If the event client is not yet registered at the event server,
    the registration will be done before looking for events.

    If the configuration changed since the last call of ec_get and has
    not been committed, ec_commit will be called before looking for
    events.

INPUTS

    lList **event_list - pointer to an event list to hold arriving events

RESULT

    int - 0, if events or an empty event list was received, or
             if no data was received within a certain time period
         <0 (commlib error code), if an error occured

NOTES

    The event_list has to be freed by the calling function.

SEE ALSO

- 1.2.12 ec_register.
- 1.2.4 ec_commit.

### 1.2.8 ec_get_edtime

NAME

    ec_get_edtime() -- get the current event delivery interval

SYNOPSIS

    int ec_get_edtime(void)

FUNCTION

    Get the interval qmaster will use to send events to the client.

RESULT

    int - the interval in seconds

SEE ALSO

- 1.2.13 ec_set_edtime.

### 1.2.9 ec_mark4registration

NAME

    ec_mark4registration() -- new registration is required

SYNOPSIS

    void ec_mark4registration(void)

FUNCTION

    Tells the event client mechanism, that the connection to the server
    is broken and it has to reregister.

NOTES

    Should be no external interface. The event client mechanism should itself
    detect such situations and react accordingly.
    Should not reference a global variable from scheduler (new_global_config)!

SEE ALSO

- 1.2.10 ec_need_new_registration.

### 1.2.10 ec_need_new_registration

NAME

    ec_need_new_registration() -- is a reregistration neccessary

SYNOPSIS

    int ec_need_new_registration(void)

FUNCTION

    Function to check, if a new registration at the server is neccessary.

RESULT

    int - 1, if the client has to (re)register, else 0

### 1.2.11 ec_prepare_registration

NAME

    ec_prepare_registration() -- prepare registration at server

SYNOPSIS

    int ec_prepare_registration(u_long32 id, const char *name)

FUNCTION

    Initializes necessary data structures and sets the data needed for
    registration at an event server.
    The events sgeE_QMASTER_GOES_DOWN and sgeE_SHUTDOWN are subscribed.

    For valid id's see ....
    The name is informational data that will be included in messages
    (errors, warnings, infos) and will be shown in the command line tool
    qconf -sec.

INPUTS

    u_long32 id      - id used to register
    const char *name - name of the event client

RESULT

    int - 1,if the function succeeded, else 0

SEE ALSO

- See ``qconf`'
- See ``manpage`'
- See ``list`'
- See ``of`'
- See ``events`'
- See ``list`'
- See ``of`'
- See ``ids`'

### 1.2.12 ec_register

NAME

    ec_register() -- register at the event server

SYNOPSIS

    int ec_register(void)

FUNCTION

    Registers the event client at the event server (usually the qmaster).
    This function can be called explicitly in the event client at startup
    or when the connection to qmaster is down.

    It will be called implicitly by ec_get, whenever it detects the neccessity
    to (re)register the client.

RESULT

    int - 1, if the registration succeeded, else 0

SEE ALSO

- 1.2.6 ec_deregister.
- 1.2.7 ec_get.

### 1.2.13 ec_set_edtime

NAME

    ec_set_edtime() -- set the event delivery interval

SYNOPSIS

    int ec_set_edtime(int interval)

FUNCTION

    Set the interval qmaster will use to send events to the client.
    Any number > 0 is a valid interval in seconds.

INPUTS

    int interval - interval [s]

RESULT

    int - 1, if the value was changed, else 0

NOTES

    The maximum interval should be limited. A too big interval makes
    qmaster spool lots of events and consume a lot of memory.

SEE ALSO

- 1.2.8 ec_get_edtime.

### 1.2.14 ec_subscribe

NAME

    ec_subscribe() -- Subscribe an event

SYNOPSIS

    int ec_subscribe(int event)

FUNCTION

    Subscribe a certain event.
    See ... for a list of all events.
    The subscription will be in effect after calling ec_commit or ec_get.
    It is possible / sensible to subscribe all events wanted and then call
    ec_commit.

INPUTS

    int event - the event number

RESULT

    int - 1 on success, else 0

SEE ALSO

- 1.2.15 ec_subscribe_all.
- 1.2.16 ec_unsubscribe.
- 1.2.17 ec_unsubscribe_all.
- 1.2.4 ec_commit.
- 1.2.7 ec_get.

### 1.2.15 ec_subscribe_all

NAME

    ec_subscribe_all() -- subscribe all events

SYNOPSIS

    int ec_subscribe_all(void)

FUNCTION

    Subscribe all possible event.
    The subscription will be in effect after calling ec_commit or ec_get.

RESULT

    int - 1 on success, else 0

NOTES

    Subscribing all events can cause a lot of traffic and may decrease performance
    of qmaster.
    Only subscribe all events, if you really need them.

SEE ALSO

- 1.2.14 ec_subscribe.
- 1.2.16 ec_unsubscribe.
- 1.2.17 ec_unsubscribe_all.
- 1.2.4 ec_commit.
- 1.2.7 ec_get.

### 1.2.16 ec_unsubscribe

NAME

    ec_unsubscribe() -- unsubscribe an event

SYNOPSIS

    int ec_unsubscribe(int event)

FUNCTION

    Unsubscribe a certain event.
    See ... for a list of all events.
    The change will be in effect after calling ec_commit or ec_get.
    It is possible / sensible to unsubscribe all events
    no longer needed and then call ec_commit.

INPUTS

    int event - the event to unsubscribe

RESULT

    int - 1 on success, else 0

NOTES

    The events sgeE_QMASTER_GOES_DOWN and sgeE_SHUTDOWN cannot
    be unsubscribed. ec_unsubscribe will output an error message if
    you try to unsubscribe sgeE_QMASTER_GOES_DOWN or sgeE_SHUTDOWN
    and return 0.

SEE ALSO

- 1.2.14 ec_subscribe.
- 1.2.15 ec_subscribe_all.
- 1.2.17 ec_unsubscribe_all.
- 1.2.4 ec_commit.
- 1.2.7 ec_get.

### 1.2.17 ec_unsubscribe_all

NAME

    ec_unsubscribe_all() -- unsubscribe all events

SYNOPSIS

    int ec_unsubscribe_all(void)

FUNCTION

    Unsubscribe all possible event.
    The change will be in effect after calling ec_commit or ec_get.

RESULT

    int - 1 on success, else 0

NOTES

    The events sgeE_QMASTER_GOES_DOWN and sgeE_SHUTDOWN will not be
    unsubscribed.

SEE ALSO

- 1.2.14 ec_subscribe.
- 1.2.15 ec_subscribe_all.
- 1.2.16 ec_unsubscribe.
- 1.2.4 ec_commit.
- 1.2.7 ec_get.

### 1.2.18 get_event_list

NAME

    get_event_list() -- get event list via gdi call

SYNOPSIS

    static int get_event_list(int sync, lList **report_list)

FUNCTION

    Tries to retrieve the event list.
    Returns the incoming data and the commlib status/error code.
    This function is used by ec_get.

INPUTS

    int sync            - synchronous transfer
    lList **report_list - pointer to returned list

RESULT

    static int - commlib status/error code

SEE ALSO

- 1.2.7 ec_get.

## 1.3 Server

### 1.3.1 --Introduction

NAME

    Event Client Interface -- Server Functionality

FUNCTION

    The server module of the event client interface is used to integrate
    the capability to server event clients into server daemons.

    It is used in the Grid Engine qmaster but should be capable to handle
    any event client server integration.

NOTES

    The module still contains code specific to one event client, the scheduler.
    A further cleanup step should be done as suggested in
    Eventclient/--Introduction

SEE ALSO

- 1.1 --Introduction.

### 1.3.2 -Defines

NAME

    Defines -- Constants used in the module

SYNOPSIS

    #define FLUSH_INTERVAL 15
    #define EVENT_ACK_MIN_TIMEOUT 600
    #define EVENT_ACK_MAX_TIMEOUT 1200

FUNCTION

    FLUSH_INTERVAL is the default event delivery interval, if the client
    would not set a correct interval.

    EVENT_ACK_MIN/MAX_TIMEOUT is the minimum/maximum timeout value for an event
    client sending the acknowledge for the delivery of events.
    The real timeout value depends on the event delivery interval for the
    event client (10 * event delivery interval).

### 1.3.3 -Global_Variables

NAME

    sge_flush_events() -- ???

SYNOPSIS

    extern lList *Master_Adminhost_List;
    extern lList *Master_Calendar_List;
    extern lList *Master_Ckpt_List;
    extern lList *Master_Complex_List;
    extern lList *Master_Config_List;
    extern lList *Master_Exechost_List;
    extern lList *Master_Job_List;
    extern lList *Master_Job_Schedd_Info_List;
    extern lList *Master_Manager_List;
    extern lList *Master_Operator_List;
    extern lList *Master_Pe_List;
    extern lList *Master_Project_List;
    extern lList *Master_Queue_List;
    extern lList *Master_Sched_Config_List;
    extern lList *Master_Sharetree_List;
    extern lList *Master_Submithost_List;
    extern lList *Master_User_List;
    extern lList *Master_Userset_List;

    static int schedule_interval = FLUSH_INTERVAL;

    int last_seq_no = -1;
    int scheduler_busy = 0;

    lList *EV_Clients = NULL;

FUNCTION

    The extern lList's reference all object lists that can be used
    in a Grid Engine event client interface.

    schedule_interval, last_seq_no and scheduler_busy are used
    for scheduler specific handling.

    EV_Clients is a list of all event clients to the event server.

NOTES

    The scheduler specific handling (schedule_interval, last_seq_no and
    scheduler_busy) should be eliminated. The mechanisms implemented with
    these variables should be generally available for all event clients.#
    The same applies to the global variables flush_finish_sec and
    flush_submit_sec used in sge_flush_events.

### 1.3.4 check_send_new_subscribed_list

NAME

    check_send_new_subscribed_list() -- check suscription for new list events

SYNOPSIS

    static void check_send_new_subscribed_list(const char *old_subscription,
    const char *new_subscription, lListElem *event_client, int event)

FUNCTION

    Checks, if sgeE*_LIST events have been added to the subscription of a
    certain event client. If yes, send these lists to the event client.

INPUTS

    const char *old_subscription - former subscription
    const char *new_subscription - new subscription
    lListElem *event_client      - the event client object
    int event                    - the event to check

SEE ALSO

- 1.3.20 sge_total_update_event.

### 1.3.5 ck_4_deliver_events

NAME

    ck_4_deliver_events() -- deliver events if necessary

SYNOPSIS

    void ck_4_deliver_events(u_long32 now)

FUNCTION

    Checks delivery time of each event client - if it has been reached, deliver
    all events for that client.

    In addition, timed out event clients are removed. An event client times out,
    if it doesn't acknowledge events within 10 * EV_ed_time
    (respecting EVENT_ACK_MIN_TIMEOUT and EVENT_ACK_MAX_TIMEOUT).

INPUTS

    u_long32 now - actual timestamp

SEE ALSO

- 1.3.3 -Global_Variables.
- 1.3.7 sge_ack_event.

### 1.3.6 reinit_schedd

NAME

    reinit_schedd() -- do a total update for the scheduler

SYNOPSIS

    void reinit_schedd()

FUNCTION

    Does a total update (send all lists) to the scheduler and output
    an error message.

NOTES

    This function should not be part of the core event client interface, it
    should perhaps be a commodity function or in qmaster itself.

SEE ALSO

- 1.3.21 total_update.

### 1.3.7 sge_ack_event

NAME

    sge_ack_event() -- process acknowledge to event delivery

SYNOPSIS

    int sge_ack_event(lListElem *event_client, u_long32 event_number)

FUNCTION

    After the server sent events to an event client, it has to acknowledge
    their receipt.
    Acknowledged events are deleted from the list of events to deliver, otherwise
    they will be resent after the next event delivery interval.

INPUTS

    lListElem *event_client - event client sending acknowledge
    u_long32 event_number   - serial number of the last event to acknowledge

RESULT

    int - always 0

NOTES

    Returncode makes no sense anymore. Either improve error handling or
    make function return void.

SEE ALSO

- 1.3.16 sge_get_next_event_number.

### 1.3.8 sge_add_event

NAME

    sge_add_event() -- add an object as event

SYNOPSIS

    void sge_add_event(lListElem *event_client, u_long32 type, u_long32
    intkey, u_long32 intkey2, const char *strkey, lListElem *element)

FUNCTION

    Adds an object to the list of events to deliver. Called, if an event occurs to
    that object, e.g. it was added to Grid Engine, modified or deleted.

    Internally, a list with that single object is created and passed to
    sge_add_list_event().

INPUTS

    lListElem *event_client - the event client to receive the event, if NULL,
                              all event clients will receive the event
    u_long32 type           - the event id
    u_long32 intkey         - additional data
    u_long32 intkey2        - additional data
    const char *strkey      - additional data
    lListElem *element      - the object to deliver as event

NOTES

    Do we need the additional data fields?

SEE ALSO

- 1.3.10 sge_add_list_event.

### 1.3.9 sge_add_event_client

NAME

    sge_add_event_client() -- register a new event client

SYNOPSIS

    int sge_add_event_client(lListElem *clio, lList **alpp, lList **eclpp,
    char *ruser, char *rhost)

FUNCTION

    Registeres a new event client.
    If it requested a dynamic id, a new id is created and assigned.
    If the registration succees, the event client is sent all data
    (sgeE*_LIST events) according to its subscription.

INPUTS

    lListElem *clio - the event client object used as registration data
    lList **alpp    - answer list pointer for answer to event client
    lList **eclpp   - list pointer to return new event client object
    char *ruser     - user that tries to register an event client
    char *rhost     - host on which the event client runs

RESULT

    int - AN_status value. STATUS_OK on success, else error code

NOTES

    Special handling for scheduler should be generalized in some way.

SEE ALSO

- 1.3.18 sge_mod_event_client.
- 1.3.14 sge_gdi_kill_eventclient.
- 1.3.21 total_update.

### 1.3.10 sge_add_list_event

NAME

    sge_add_list_event() -- add a list as event

SYNOPSIS

    void sge_add_list_event(lListElem *event_client, u_long32 type, u_long32
    intkey, u_long32 intkey2, const char *strkey, lList *list)

FUNCTION

    Adds a list of objects to the list of events to deliver, e.g. the sgeE*_LIST
    events.

INPUTS

    lListElem *event_client - the event client to receive the event, if NULL,
                              all event clients will receive the event
    u_long32 type           - the event id
    u_long32 intkey         - additional data
    u_long32 intkey2        - additional data
    const char *strkey      - additional data
    lList *list             - the list to deliver as event

NOTES

    Do we need the additional data fields?

SEE ALSO

- 1.3.8 sge_add_event.

### 1.3.11 sge_event_client_exit

NAME

    sge_event_client_exit() -- event client deregisters

SYNOPSIS

    void sge_event_client_exit(const char *host, const char *commproc,
    sge_pack_buffer *pb)

FUNCTION

    Deregistration of an event client.
    The event client tells qmaster that it will wants to deregister - usually before
    it exits.
    The event client is removed from the list of all event clients.

INPUTS

    const char *host     - host that sent the exit message
    const char *commproc - commproc of the sender
    sge_pack_buffer *pb  - packbuffer containing information about event client

### 1.3.12 sge_eventclient_subscribed

NAME

    sge_eventclient_subscribed() -- has event client subscribed a certain event?

SYNOPSIS

    int sge_eventclient_subscribed(const lListElem *event_client, int event)

FUNCTION

    Checks if the given event client has a certain event subscribed.

INPUTS

    const lListElem *event_client - event client to check
    int event                     - event to check

RESULT

    int - 0 = not subscribed, 1 = subscribed

### 1.3.13 sge_flush_events

NAME

    sge_flush_events() -- set the flushing time for events

SYNOPSIS

    void sge_flush_events(lListElem *event_client, int cmd)

FUNCTION

    Sets the timestamp for the next flush of events for all or a specific
    event client.
    When events will be next sent to an event client is stored in its
    event client object in the variable EV_next_send_time.

INPUTS

    lListElem *event_client - the event client for which to define flushing,
                              or NULL (flush all event clients)
    int cmd                 - how to flush:
                              FLUSH_EVENTS_SET: flush immediately; send events
                              when the server triggers the next sending
                              FLUSH_EVENTS_JOB_FINISHED: flush after the
                              interval defined in flush_finish_sec
                              FLUSH_EVENTS_JOB_SUBMITTED: flush after the
                              interval defined in flush_submit_sec

NOTES

    The global variables flush_finish_sec and flush_submit_sec should be
    eliminated and replaced by a more general mechanism, where each event
    client can define individually, which event will trigger which flushing
    behaviour.

SEE ALSO

- 1.3.5 ck_4_deliver_events.

### 1.3.14 sge_gdi_kill_eventclient

NAME

    sge_gdi_kill_eventclient() -- kill an event client

SYNOPSIS

    void sge_gdi_kill_eventclient(const char *host, sge_gdi_request *request,
    sge_gdi_request *answer)

FUNCTION

    Kills one or all dynamic event clients.
    If a certain event client id is contained in the request, an event client
    with that id is killed.
    If the requested id is EC_ID_ANY (0), all event clients with dynamic ids
    are killed.
    Killing an event client is done by sending it the special event
    sgeE_SHUTDOWN and flushing immediately.

INPUTS

    const char *host         - host that sent the kill request
    sge_gdi_request *request - request containing the event client id
    sge_gdi_request *answer  - answer structure to return an answer to the
                               client issuing the kill command (usually qconf)

SEE ALSO

- See ``qconf`'
- See ``-kec`'

### 1.3.15 sge_gdi_tsm

NAME

    sge_gdi_tsm() -- trigger scheduling

SYNOPSIS

    void sge_gdi_tsm(char *host, sge_gdi_request *request, sge_gdi_request
    *answer)

FUNCTION

    Triggers a scheduling run for the scheduler as special event client.

INPUTS

    char *host               - host that triggered scheduling
    sge_gdi_request *request - request structure
    sge_gdi_request *answer  - answer structure to return to client

NOTES

    This function should not be part of the core event client interface.

SEE ALSO

- See ``qconf`'
- See ``-tsm`'

### 1.3.16 sge_get_next_event_number

NAME

    sge_get_next_event_number() -- next event number for an event client

SYNOPSIS

    u_long32 sge_get_next_event_number(u_long32 client_id)

FUNCTION

    Retrieves the next serial event number for an event client.

INPUTS

    u_long32 client_id - id of the event client

RESULT

    u_long32 - serial number for next event to deliver

### 1.3.17 sge_locate_scheduler

NAME

    sge_locate_scheduler() -- search for the scheduler

SYNOPSIS

    lListElem* sge_locate_scheduler()

FUNCTION

    Searches an event client of type scheduler (EV_ID_SCHEDD).
    Returns a pointer to the scheduler event client object or
    NULL, if no scheduler is registered as event client.

RESULT

    lListElem* - scheduler event client object or NULL.

NOTES

    Should not be part of the core event client interface.
    Might be provided in a more general form (for any special event client)
    as commodity function.

### 1.3.18 sge_mod_event_client

NAME

    sge_mod_event_client() -- modify event client

SYNOPSIS

    int sge_mod_event_client(lListElem *clio, lList **alpp, lList **eclpp,
    char *ruser, char *rhost)

FUNCTION

    An event client object is modified.
    It is possible to modify the event delivery time and
    the subscription.
    If the subscription is changed, and new sgeE*_LIST events are subscribed,
    these lists are sent to the event client.

INPUTS

    lListElem *clio - object containing the data to change
    lList **alpp    - answer list pointer
    lList **eclpp   - list pointer to return changed object
    char *ruser     - user that triggered the modify action
    char *rhost     - host that triggered the modify action

RESULT

    int - AN_status code. STATUS_OK on success, else error code

SEE ALSO

- 1.3.4 check_send_new_subscribed_list.

### 1.3.19 sge_next_flush

NAME

    sge_next_flush() -- when will be the next flush of events?

SYNOPSIS

    int sge_next_flush(int now)

FUNCTION

    Returns the timestamp of the next required flush to any event client
    (the minimum of EV_next_send_time for all event clients).

INPUTS

    int now - actual timestamp

RESULT

    int - the timestamp of the next flush or
          0, if no event client is connected and up.

### 1.3.20 sge_total_update_event

NAME

    sge_total_update_event() -- create a total update event

SYNOPSIS

    static void sge_total_update_event(lListElem *event_client, u_long32
    type)

FUNCTION

    Creates an event delivering a certain list of objects for an event client.

INPUTS

    lListElem *event_client - event client to receive the list
    u_long32 type           - event describing the list to update

### 1.3.21 total_update

NAME

    total_update() -- send all data to eventclient

SYNOPSIS

    static void total_update(lListElem *event_client)

FUNCTION

    Sends all complete lists it subscribed to an eventclient.
    If the event client receives a complete list instead of single events,
    it should completely update it's database.

INPUTS

    lListElem *event_client - the event client to update

# Function Index

Jump to: | C E G R S T

| Index Entry | Section

C |  |
| `check_send_new_subscribed_list` | 1.3.4 check_send_new_subscribed_list
| `ck_4_deliver_events` | 1.3.5 ck_4_deliver_events
| `ck_event_number` | 1.2.3 ck_event_number

E |  |
| `ec_commit` | 1.2.4 ec_commit
| `ec_config_changed` | 1.2.5 ec_config_changed
| `ec_deregister` | 1.2.6 ec_deregister
| `ec_get` | 1.2.7 ec_get
| `ec_get_edtime` | 1.2.8 ec_get_edtime
| `ec_mark4registration` | 1.2.9 ec_mark4registration
| `ec_need_new_registration` | 1.2.10 ec_need_new_registration
| `ec_prepare_registration` | 1.2.11 ec_prepare_registration
| `ec_register` | 1.2.12 ec_register
| `ec_set_edtime` | 1.2.13 ec_set_edtime
| `ec_subscribe` | 1.2.14 ec_subscribe
| `ec_subscribe_all` | 1.2.15 ec_subscribe_all
| `ec_unsubscribe` | 1.2.16 ec_unsubscribe
| `ec_unsubscribe_all` | 1.2.17 ec_unsubscribe_all

G |  |
| `get_event_list` | 1.2.18 get_event_list

R |  |
| `reinit_schedd` | 1.3.6 reinit_schedd

S |  |
| `sge_ack_event` | 1.3.7 sge_ack_event
| `sge_add_event` | 1.3.8 sge_add_event
| `sge_add_event_client` | 1.3.9 sge_add_event_client
| `sge_add_list_event` | 1.3.10 sge_add_list_event
| `sge_event_client_exit` | 1.3.11 sge_event_client_exit
| `sge_eventclient_subscribed` | 1.3.12 sge_eventclient_subscribed
| `sge_flush_events` | 1.3.13 sge_flush_events
| `sge_gdi_kill_eventclient` | 1.3.14 sge_gdi_kill_eventclient
| `sge_gdi_tsm` | 1.3.15 sge_gdi_tsm
| `sge_get_next_event_number` | 1.3.16 sge_get_next_event_number
| `sge_locate_scheduler` | 1.3.17 sge_locate_scheduler
| `sge_mod_event_client` | 1.3.18 sge_mod_event_client
| `sge_next_flush` | 1.3.19 sge_next_flush
| `sge_total_update_event` | 1.3.20 sge_total_update_event

T |  |
| `total_update` | 1.3.21 total_update

Jump to: | C E G R S T

[Top] | [Contents] | [Index] | [ ? ]

# Table of Contents

> 1. Eventclient

> > 1.1 --Introduction
> > 1.2 Client

> > > 1.2.1 --Introduction
> > > 1.2.2 -Global_Variables
> > > 1.2.3 ck_event_number
> > > 1.2.4 ec_commit
> > > 1.2.5 ec_config_changed
> > > 1.2.6 ec_deregister
> > > 1.2.7 ec_get
> > > 1.2.8 ec_get_edtime
> > > 1.2.9 ec_mark4registration
> > > 1.2.10 ec_need_new_registration
> > > 1.2.11 ec_prepare_registration
> > > 1.2.12 ec_register
> > > 1.2.13 ec_set_edtime
> > > 1.2.14 ec_subscribe
> > > 1.2.15 ec_subscribe_all
> > > 1.2.16 ec_unsubscribe
> > > 1.2.17 ec_unsubscribe_all
> > > 1.2.18 get_event_list

> > 1.3 Server

> > > 1.3.1 --Introduction
> > > 1.3.2 -Defines
> > > 1.3.3 -Global_Variables
> > > 1.3.4 check_send_new_subscribed_list
> > > 1.3.5 ck_4_deliver_events
> > > 1.3.6 reinit_schedd
> > > 1.3.7 sge_ack_event
> > > 1.3.8 sge_add_event
> > > 1.3.9 sge_add_event_client
> > > 1.3.10 sge_add_list_event
> > > 1.3.11 sge_event_client_exit
> > > 1.3.12 sge_eventclient_subscribed
> > > 1.3.13 sge_flush_events
> > > 1.3.14 sge_gdi_kill_eventclient
> > > 1.3.15 sge_gdi_tsm
> > > 1.3.16 sge_get_next_event_number
> > > 1.3.17 sge_locate_scheduler
> > > 1.3.18 sge_mod_event_client
> > > 1.3.19 sge_next_flush
> > > 1.3.20 sge_total_update_event
> > > 1.3.21 total_update

> Function Index

[Top] | [Contents] | [Index] | [ ? ]

# Short Table of Contents

> 1. Eventclient
> Function Index

[Top] | [Contents] | [Index] | [ ? ]

# About this document

This document was generated using texi2html

The buttons in the navigation panels have the following meaning:

Button | Name | Go to | From 1.2.3 go to
--- | --- | --- | ---
[ < ] | Back | previous section in reading order | 1.2.2
[ > ] | Forward | next section in reading order | 1.2.4
[ << ] | FastBack | previous or up-and-previous section | 1.1
[ Up ] | Up | up section | 1.2
[ >> ] | FastForward | next or up-and-next section | 1.3
[Top] | Top | cover (top) of document |
[Contents] | Contents | table of contents |
[Index] | Index | concept index |
[ ? ] | About | this page |

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

- 1. Section One

- 1.1 Subsection One-One

- ...

- 1.2 Subsection One-Two

- 1.2.1 Subsubsection One-Two-One
- 1.2.2 Subsubsection One-Two-Two
- 1.2.3 Subsubsection One-Two-Three <== Current Position
- 1.2.4 Subsubsection One-Two-Four

- 1.3 Subsection One-Three

- ...

- 1.4 Subsection One-Four

This document was generated by Joachim Gabler on December, 14 2001 using texi2html