memcache/request.c
author Tero Marttila <terom@fixme.fi>
Fri, 29 Aug 2008 23:31:17 +0300
changeset 48 1c67f512779b
parent 46 8a832c0e01ee
permissions -rw-r--r--
fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <stdlib.h>
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <assert.h>
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "request.h"
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include "memcache.h"
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include "../common.h"
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
     9
struct memcache_req *memcache_req_alloc (struct memcache *mc, enum memcache_command cmd_type, const struct memcache_key *key, const struct memcache_obj *obj, const struct memcache_buf *buf, void *cb_arg) {
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    struct memcache_req *req = NULL;
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    11
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    12
    // ensure key is provided
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    13
    assert(key != NULL);
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    // allocate it
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    if ((req = calloc(1, sizeof(*req))) == NULL)
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        ERROR("calloc");
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    // state
41
540737bf6bac sending requests, and partial support for receiving -- incomplete, not tested
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    20
    req->state = MEMCACHE_STATE_INVALID;
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    22
    // key length?
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    23
    if (key->len == 0)
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    24
        req->key.len = strlen(key->buf);
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    25
    else
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    26
        req->key.len = key->len;
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    27
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    28
    if (req->key.len == 0)
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    29
        ERROR("zero-length key");
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    30
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    // copy the key
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    32
    if ((req->key.buf = malloc(req->key.len)) == NULL)
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        ERROR("malloc key buf");
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    35
    memcpy(req->key.buf, key->buf, req->key.len);
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    36
    
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    37
    // copy the obj if provided
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    38
    if (obj) {
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    39
        memcpy(&req->obj, obj, sizeof(req->obj));
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    40
        req->have_obj = 1;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    41
    }
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    42
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    43
    // copy the buf if provided, and reset the offset to zero
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    44
    if (buf) {
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    45
        // ensure that it is a valid buffer
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    46
        assert(buf->data && buf->len > 0 && buf->offset == buf->len);
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    47
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    48
        memcpy(&req->buf, buf, sizeof(req->buf));
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    49
        req->have_buf = 1;
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    50
        req->is_buf_ours = 0;
46
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    51
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    52
        // set offset to zero
8a832c0e01ee bugfixed, enum->string mappings, test does requests
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    53
        req->buf.offset = 0;
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    54
    }
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
41
540737bf6bac sending requests, and partial support for receiving -- incomplete, not tested
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    56
    // store the other data
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    req->mc = mc;
41
540737bf6bac sending requests, and partial support for receiving -- incomplete, not tested
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    58
    req->cmd_type = cmd_type;
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    req->cb_arg = cb_arg;
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    // success
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    return req;
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
error:
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    if (req) {
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        free(req->key.buf);
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        free(req);
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    }
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    return NULL;
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
}
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    73
// accessors
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    74
enum memcache_state memcache_req_state (struct memcache_req *req) {
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    75
    return req->state;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    76
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    77
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    78
enum memcache_command memcache_req_cmd (struct memcache_req *req) {
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    79
    return req->cmd_type;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    80
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    81
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    82
enum memcache_reply memcache_req_reply (struct memcache_req *req) {
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    83
    return req->reply_type;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    84
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    85
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    86
const struct memcache_key *memcache_req_key (struct memcache_req *req) {
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    87
    return &req->key;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    88
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    89
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    90
const struct memcache_obj *memcache_req_obj (struct memcache_req *req) {
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    91
    return req->have_obj ? &req->obj : NULL;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    92
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    93
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    94
const struct memcache_buf *memcache_req_buf (struct memcache_req *req) {
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    95
    return req->have_buf ? &req->buf : NULL;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    96
}
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    97
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    98
// events
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    99
static void _memcache_req_notify (struct memcache_req *req) {
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   100
    req->mc->cb_fn(req, req->cb_arg);
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
}
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   103
void memcache_req_queued (struct memcache_req *req) {
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   104
    req->state = MEMCACHE_STATE_QUEUED;
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   105
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   106
//    _memcache_req_notify(req);
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   107
}
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   108
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   109
void memcache_req_send (struct memcache_req *req) {
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   110
    req->state = MEMCACHE_STATE_SEND;
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   111
    
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   112
//    _memcache_req_notify(req);
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   113
}
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   114
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   115
void memcache_req_recv (struct memcache_req *req, enum memcache_reply reply_type) {
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   116
    // set state to REPLY_DATA/REPLY based on have_buf/is_buf_ours
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   117
    req->state = (req->have_buf && req->is_buf_ours) ? MEMCACHE_STATE_REPLY_DATA : MEMCACHE_STATE_REPLY;
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   118
    req->reply_type = reply_type;
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   119
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   120
    // we must surely have a valid obj now
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   121
    req->have_obj = 1;
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   122
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   123
    _memcache_req_notify(req);
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   124
}
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   125
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   126
void memcache_req_data (struct memcache_req *req) {
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   127
    assert(req->state == MEMCACHE_STATE_REPLY || req->state == MEMCACHE_STATE_REPLY_DATA);
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   128
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   129
    req->state = MEMCACHE_STATE_REPLY_DATA;
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   130
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   131
    // we must surely have a valid buf now
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   132
    req->have_buf = 1;
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   133
    
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   134
    _memcache_req_notify(req);
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   135
}
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   136
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   137
void memcache_req_done (struct memcache_req *req) {
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   138
    // make sure we are in the REPLY/REPLY_DATA state
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   139
    assert(req->state == MEMCACHE_STATE_REPLY || req->state == MEMCACHE_STATE_REPLY_DATA);
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   140
    
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   141
    // set state to DONE_DATA/DONE based on have_buf/is_buf_ours
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   142
    req->state = (req->have_buf && req->is_buf_ours) ? MEMCACHE_STATE_DONE_DATA : MEMCACHE_STATE_DONE;
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   143
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   144
    // forget the connection
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   145
    req->conn = NULL;
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   146
    
44
03a7e064f833 stub functions and documentation
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   147
    _memcache_req_notify(req);
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   148
}
42
0e503189af2f more reply-receiving code, but still incomplete
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
   149
43
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   150
void memcache_req_error (struct memcache_req *req) {
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   151
    // forget our connection
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   152
    req->conn = NULL;
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   153
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   154
    req->state = MEMCACHE_STATE_ERROR;
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   155
e5b714190dee the request/reply code should be complete now, but still needs testing
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   156
    _memcache_req_notify(req);
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
}
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
void memcache_req_free (struct memcache_req *req) {
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    // must be unused
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
    assert(req->conn == NULL);
48
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   162
    assert(req->state == MEMCACHE_STATE_INVALID || req->state == MEMCACHE_STATE_ERROR || req->state == MEMCACHE_STATE_DONE || req->state == MEMCACHE_STATE_DONE_DATA);
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   163
    
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   164
    if (req->have_buf && req->is_buf_ours)
1c67f512779b fix doc tpyos, rename some enums, fix printf format len for non-zero terminated strings (hg status), pass args to memcache_cmd_format_header via memcache_req_*, handle zero-length STORE requests, memcache_req is_buf_ours + free, other function name typos (keymemcache_req_key), fix req state behaviour re *_DATA_* for STORE requests and FETCH/END, better memcache_server connpool events/management, modular memcache_test with a working benchmark. This is a long commit message.
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   165
        free(req->buf.data);
40
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    free(req->key.buf);
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
    free(req);
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
}
9cecd22e643a *queuing, and add missing file
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170