Ignore:
Timestamp:
Nov 25, 2016, 8:04:54 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to version 4.4.7

Location:
vendor/current/ctdb/client
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/ctdb/client/client.h

    r988 r989  
    7373bool ctdb_client_message_recv(struct tevent_req *req, int *perr);
    7474
     75struct tevent_req *ctdb_client_message_multi_send(
     76                                TALLOC_CTX *mem_ctx,
     77                                struct tevent_context *ev,
     78                                struct ctdb_client_context *client,
     79                                uint32_t *pnn_list, int count,
     80                                struct ctdb_req_message *message);
     81
     82bool ctdb_client_message_multi_recv(struct tevent_req *req, int *perr,
     83                                    TALLOC_CTX *mem_ctx, int **perr_list);
     84
    7585int ctdb_client_message(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
    7686                        struct ctdb_client_context *client,
    7787                        uint32_t destnode, struct ctdb_req_message *message);
     88
     89struct tevent_req *ctdb_client_set_message_handler_send(
     90                                        TALLOC_CTX *mem_ctx,
     91                                        struct tevent_context *ev,
     92                                        struct ctdb_client_context *client,
     93                                        uint64_t srvid,
     94                                        srvid_handler_fn handler,
     95                                        void *private_data);
     96bool ctdb_client_set_message_handler_recv(struct tevent_req *req, int *perr);
     97
     98struct tevent_req *ctdb_client_remove_message_handler_send(
     99                                        TALLOC_CTX *mem_ctx,
     100                                        struct tevent_context *ev,
     101                                        struct ctdb_client_context *client,
     102                                        uint64_t srvid,
     103                                        void *private_data);
     104bool ctdb_client_remove_message_handler_recv(struct tevent_req *req,
     105                                             int *perr);
    78106
    79107int ctdb_client_set_message_handler(TALLOC_CTX *mem_ctx,
     
    710738                                    uint32_t db_id);
    711739
     740int ctdb_ctrl_db_pull(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     741                      struct ctdb_client_context *client,
     742                      int destnode, struct timeval timeout,
     743                      struct ctdb_pulldb_ext *pulldb, uint32_t *num_records);
     744
     745int ctdb_ctrl_db_push_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     746                            struct ctdb_client_context *client,
     747                            int destnode, struct timeval timeout,
     748                            struct ctdb_pulldb_ext *pulldb);
     749
     750int ctdb_ctrl_db_push_confirm(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     751                              struct ctdb_client_context *client,
     752                              int destnode, struct timeval timeout,
     753                              uint32_t db_id, uint32_t *num_records);
     754
    712755/* from client/client_db.c */
    713756
  • vendor/current/ctdb/client/client_control_sync.c

    r988 r989  
    31183118        return 0;
    31193119}
     3120
     3121int ctdb_ctrl_db_pull(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     3122                      struct ctdb_client_context *client,
     3123                      int destnode, struct timeval timeout,
     3124                      struct ctdb_pulldb_ext *pulldb, uint32_t *num_records)
     3125{
     3126        struct ctdb_req_control request;
     3127        struct ctdb_reply_control *reply;
     3128        int ret;
     3129
     3130        ctdb_req_control_db_pull(&request, pulldb);
     3131        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
     3132                                  &request, &reply);
     3133        if (ret != 0) {
     3134                DEBUG(DEBUG_ERR,
     3135                      ("Control DB_PULL failed to node %u, ret=%d\n",
     3136                       destnode, ret));
     3137                return ret;
     3138        }
     3139
     3140        ret = ctdb_reply_control_db_pull(reply, num_records);
     3141        if (ret != 0) {
     3142                DEBUG(DEBUG_ERR, ("Control DB_PULL failed, ret=%d\n", ret));
     3143                return ret;
     3144        }
     3145
     3146        return 0;
     3147}
     3148
     3149int ctdb_ctrl_db_push_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     3150                            struct ctdb_client_context *client,
     3151                            int destnode, struct timeval timeout,
     3152                            struct ctdb_pulldb_ext *pulldb)
     3153{
     3154        struct ctdb_req_control request;
     3155        struct ctdb_reply_control *reply;
     3156        int ret;
     3157
     3158        ctdb_req_control_db_push_start(&request, pulldb);
     3159        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
     3160                                  &request, &reply);
     3161        if (ret != 0) {
     3162                DEBUG(DEBUG_ERR,
     3163                      ("Control DB_PUSH failed to node %u, ret=%d\n",
     3164                       destnode, ret));
     3165                return ret;
     3166        }
     3167
     3168        ret = ctdb_reply_control_db_push_start(reply);
     3169        if (ret != 0) {
     3170                DEBUG(DEBUG_ERR,
     3171                      ("Control DB_PUSH failed, ret=%d\n", ret));
     3172                return ret;
     3173        }
     3174
     3175        return 0;
     3176}
     3177
     3178int ctdb_ctrl_db_push_confirm(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     3179                              struct ctdb_client_context *client,
     3180                              int destnode, struct timeval timeout,
     3181                              uint32_t db_id, uint32_t *num_records)
     3182{
     3183        struct ctdb_req_control request;
     3184        struct ctdb_reply_control *reply;
     3185        int ret;
     3186
     3187        ctdb_req_control_db_push_confirm(&request, db_id);
     3188        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
     3189                                  &request, &reply);
     3190        if (ret != 0) {
     3191                DEBUG(DEBUG_ERR,
     3192                      ("Control DB_PUSH failed to node %u, ret=%d\n",
     3193                       destnode, ret));
     3194                return ret;
     3195        }
     3196
     3197        ret = ctdb_reply_control_db_push_confirm(reply, num_records);
     3198        if (ret != 0) {
     3199                DEBUG(DEBUG_ERR,
     3200                      ("Control DB_PUSH failed, ret=%d\n", ret));
     3201                return ret;
     3202        }
     3203
     3204        return 0;
     3205}
  • vendor/current/ctdb/client/client_message.c

    r988 r989  
    158158
    159159/*
     160 * Handle multiple nodes
     161 */
     162
     163struct ctdb_client_message_multi_state {
     164        uint32_t *pnn_list;
     165        int count;
     166        int done;
     167        int err;
     168        int *err_list;
     169};
     170
     171struct message_index_state {
     172        struct tevent_req *req;
     173        int index;
     174};
     175
     176static void ctdb_client_message_multi_done(struct tevent_req *subreq);
     177
     178struct tevent_req *ctdb_client_message_multi_send(
     179                                TALLOC_CTX *mem_ctx,
     180                                struct tevent_context *ev,
     181                                struct ctdb_client_context *client,
     182                                uint32_t *pnn_list, int count,
     183                                struct ctdb_req_message *message)
     184{
     185        struct tevent_req *req, *subreq;
     186        struct ctdb_client_message_multi_state *state;
     187        int i;
     188
     189        if (pnn_list == NULL || count == 0) {
     190                return NULL;
     191        }
     192
     193        req = tevent_req_create(mem_ctx, &state,
     194                                struct ctdb_client_message_multi_state);
     195        if (req == NULL) {
     196                return NULL;
     197        }
     198
     199        state->pnn_list = pnn_list;
     200        state->count = count;
     201        state->done = 0;
     202        state->err = 0;
     203        state->err_list = talloc_zero_array(state, int, count);
     204        if (tevent_req_nomem(state->err_list, req)) {
     205                return tevent_req_post(req, ev);
     206        }
     207
     208        for (i=0; i<count; i++) {
     209                struct message_index_state *substate;
     210
     211                subreq = ctdb_client_message_send(state, ev, client,
     212                                                  pnn_list[i], message);
     213                if (tevent_req_nomem(subreq, req)) {
     214                        return tevent_req_post(req, ev);
     215                }
     216
     217                substate = talloc(subreq, struct message_index_state);
     218                if (tevent_req_nomem(substate, req)) {
     219                        return tevent_req_post(req, ev);
     220                }
     221
     222                substate->req = req;
     223                substate->index = i;
     224
     225                tevent_req_set_callback(subreq, ctdb_client_message_multi_done,
     226                                        substate);
     227        }
     228
     229        return req;
     230}
     231
     232static void ctdb_client_message_multi_done(struct tevent_req *subreq)
     233{
     234        struct message_index_state *substate = tevent_req_callback_data(
     235                subreq, struct message_index_state);
     236        struct tevent_req *req = substate->req;
     237        int idx = substate->index;
     238        struct ctdb_client_message_multi_state *state = tevent_req_data(
     239                req, struct ctdb_client_message_multi_state);
     240        bool status;
     241        int ret;
     242
     243        status = ctdb_client_message_recv(subreq, &ret);
     244        TALLOC_FREE(subreq);
     245        if (! status) {
     246                if (state->err == 0) {
     247                        state->err = ret;
     248                        state->err_list[idx] = state->err;
     249                }
     250        }
     251
     252        state->done += 1;
     253
     254        if (state->done == state->count) {
     255                tevent_req_done(req);
     256        }
     257}
     258
     259bool ctdb_client_message_multi_recv(struct tevent_req *req, int *perr,
     260                                    TALLOC_CTX *mem_ctx, int **perr_list)
     261{
     262        struct ctdb_client_message_multi_state *state = tevent_req_data(
     263                req, struct ctdb_client_message_multi_state);
     264        int err;
     265
     266        if (tevent_req_is_unix_error(req, &err)) {
     267                if (perr != NULL) {
     268                        *perr = err;
     269                }
     270                if (perr_list != NULL) {
     271                        *perr_list = talloc_steal(mem_ctx, state->err_list);
     272                }
     273                return false;
     274        }
     275
     276        if (perr != NULL) {
     277                *perr = state->err;
     278        }
     279
     280        if (perr_list != NULL) {
     281                *perr_list = talloc_steal(mem_ctx, state->err_list);
     282        }
     283
     284        if (state->err != 0) {
     285                return false;
     286        }
     287
     288        return true;
     289}
     290
     291/*
    160292 * sync version of message send
    161293 */
     
    191323        talloc_free(tmp_ctx);
    192324        return 0;
     325}
     326
     327struct ctdb_client_set_message_handler_state {
     328        struct ctdb_client_context *client;
     329        uint64_t srvid;
     330        srvid_handler_fn handler;
     331        void *private_data;
     332};
     333
     334static void ctdb_client_set_message_handler_done(struct tevent_req *subreq);
     335
     336struct tevent_req *ctdb_client_set_message_handler_send(
     337                                        TALLOC_CTX *mem_ctx,
     338                                        struct tevent_context *ev,
     339                                        struct ctdb_client_context *client,
     340                                        uint64_t srvid,
     341                                        srvid_handler_fn handler,
     342                                        void *private_data)
     343{
     344        struct tevent_req *req, *subreq;
     345        struct ctdb_client_set_message_handler_state *state;
     346        struct ctdb_req_control request;
     347
     348        req = tevent_req_create(mem_ctx, &state,
     349                                struct ctdb_client_set_message_handler_state);
     350        if (req == NULL) {
     351                return NULL;
     352        }
     353
     354        state->client = client;
     355        state->srvid = srvid;
     356        state->handler = handler;
     357        state->private_data = private_data;
     358
     359        ctdb_req_control_register_srvid(&request, srvid);
     360        subreq = ctdb_client_control_send(state, ev, client, client->pnn,
     361                                          tevent_timeval_zero(), &request);
     362        if (tevent_req_nomem(subreq, req)) {
     363                return tevent_req_post(req, ev);
     364        }
     365        tevent_req_set_callback(subreq, ctdb_client_set_message_handler_done,
     366                                req);
     367
     368        return req;
     369}
     370
     371static void ctdb_client_set_message_handler_done(struct tevent_req *subreq)
     372{
     373        struct tevent_req *req = tevent_req_callback_data(
     374                subreq, struct tevent_req);
     375        struct ctdb_client_set_message_handler_state *state = tevent_req_data(
     376                req, struct ctdb_client_set_message_handler_state);
     377        struct ctdb_reply_control *reply;
     378        bool status;
     379        int ret;
     380
     381        status = ctdb_client_control_recv(subreq, &ret, state, &reply);
     382        TALLOC_FREE(subreq);
     383        if (! status) {
     384                tevent_req_error(req, ret);
     385                return;
     386        }
     387
     388        ret = ctdb_reply_control_register_srvid(reply);
     389        talloc_free(reply);
     390        if (ret != 0) {
     391                tevent_req_error(req, ret);
     392                return;
     393        }
     394
     395        ret = srvid_register(state->client->srv, state->client, state->srvid,
     396                             state->handler, state->private_data);
     397        if (ret != 0) {
     398                tevent_req_error(req, ret);
     399                return;
     400        }
     401
     402        tevent_req_done(req);
     403}
     404
     405bool ctdb_client_set_message_handler_recv(struct tevent_req *req, int *perr)
     406{
     407        int err;
     408
     409        if (tevent_req_is_unix_error(req, &err)) {
     410                if (perr != NULL) {
     411                        *perr = err;
     412                }
     413                return false;
     414        }
     415        return true;
     416}
     417
     418struct ctdb_client_remove_message_handler_state {
     419        struct ctdb_client_context *client;
     420        uint64_t srvid;
     421        void *private_data;
     422};
     423
     424static void ctdb_client_remove_message_handler_done(struct tevent_req *subreq);
     425
     426struct tevent_req *ctdb_client_remove_message_handler_send(
     427                                        TALLOC_CTX *mem_ctx,
     428                                        struct tevent_context *ev,
     429                                        struct ctdb_client_context *client,
     430                                        uint64_t srvid,
     431                                        void *private_data)
     432{
     433        struct tevent_req *req, *subreq;
     434        struct ctdb_client_remove_message_handler_state *state;
     435        struct ctdb_req_control request;
     436
     437        req = tevent_req_create(mem_ctx, &state,
     438                                struct ctdb_client_remove_message_handler_state);
     439        if (req == NULL) {
     440                return NULL;
     441        }
     442
     443        state->client = client;
     444        state->srvid = srvid;
     445        state->private_data = private_data;
     446
     447        ctdb_req_control_deregister_srvid(&request, srvid);
     448        subreq = ctdb_client_control_send(state, ev, client, client->pnn,
     449                                          tevent_timeval_zero(), &request);
     450        if (tevent_req_nomem(subreq, req)) {
     451                return tevent_req_post(req, ev);
     452        }
     453        tevent_req_set_callback(subreq,
     454                                ctdb_client_remove_message_handler_done, req);
     455
     456        return req;
     457}
     458
     459static void ctdb_client_remove_message_handler_done(struct tevent_req *subreq)
     460{
     461        struct tevent_req *req = tevent_req_callback_data(
     462                subreq, struct tevent_req);
     463        struct ctdb_client_remove_message_handler_state *state = tevent_req_data(
     464                req, struct ctdb_client_remove_message_handler_state);
     465        struct ctdb_reply_control *reply;
     466        bool status;
     467        int ret;
     468
     469        status = ctdb_client_control_recv(subreq, &ret, state, &reply);
     470        TALLOC_FREE(subreq);
     471        if (! status) {
     472                tevent_req_error(req, ret);
     473                return;
     474        }
     475
     476        ret = ctdb_reply_control_deregister_srvid(reply);
     477        talloc_free(reply);
     478        if (ret != 0) {
     479                tevent_req_error(req, ret);
     480                return;
     481        }
     482
     483        ret = srvid_deregister(state->client->srv, state->srvid,
     484                               state->private_data);
     485        if (ret != 0) {
     486                tevent_req_error(req, ret);
     487                return;
     488        }
     489
     490        tevent_req_done(req);
     491}
     492
     493bool ctdb_client_remove_message_handler_recv(struct tevent_req *req, int *perr)
     494{
     495        int err;
     496
     497        if (tevent_req_is_unix_error(req, &err)) {
     498                if (perr != NULL) {
     499                        *perr = err;
     500                }
     501                return false;
     502        }
     503        return true;
    193504}
    194505
Note: See TracChangeset for help on using the changeset viewer.