cluster configuration

This commit is contained in:
roberto@sirius
2010-11-24 13:25:30 +01:00
parent 3dec2821f4
commit 7a262159dc
3 changed files with 92 additions and 1 deletions
+44 -1
View File
@@ -48,6 +48,12 @@ void master_loop(char **argv, char **environ) {
int udp_managed = 0;
int rlen;
int udp_fd = -1 ;
char *cluster_opt_buf = NULL;
int cluster_opt_size = 4;
char *cptrbuf;
uint16_t ustrlen;
struct uwsgi_header *uh;
#endif
int i,j;
@@ -85,6 +91,35 @@ void master_loop(char **argv, char **environ) {
uwsgi_poll[uwsgi_poll_size].fd = uwsgi.cluster_fd;
uwsgi_poll[uwsgi_poll_size].events = POLLIN;
uwsgi_poll_size++;
for(i=0;i<uwsgi.exported_opts_cnt;i++) {
cluster_opt_size += 2+strlen(uwsgi.exported_opts[i]->key);
cluster_opt_size += 2+strlen(uwsgi.exported_opts[i]->value);
}
cluster_opt_buf = malloc(cluster_opt_size);
uh = (struct uwsgi_header *) cluster_opt_buf;
uh->modifier1 = 99;
uh->pktsize = cluster_opt_size - 4;
uh->modifier2 = 1;
cptrbuf = cluster_opt_buf+4;
for(i=0;i<uwsgi.exported_opts_cnt;i++) {
ustrlen = strlen(uwsgi.exported_opts[i]->key);
*cptrbuf++ = (uint8_t) (ustrlen & 0xff);
*cptrbuf++ = (uint8_t) ((ustrlen >>8) & 0xff);
memcpy(cptrbuf, uwsgi.exported_opts[i]->key, ustrlen);
cptrbuf+=ustrlen;
ustrlen = strlen(uwsgi.exported_opts[i]->value);
*cptrbuf++ = (uint8_t) (ustrlen & 0xff);
*cptrbuf++ = (uint8_t) ((ustrlen >>8) & 0xff);
memcpy(cptrbuf, uwsgi.exported_opts[i]->value, ustrlen);
cptrbuf+=ustrlen;
}
}
#endif
#endif
@@ -284,7 +319,15 @@ void master_loop(char **argv, char **environ) {
}
if (uwsgi_poll[i].fd == uwsgi.cluster_fd) {
uwsgi_log("received a cluster message\n");
if (uwsgi_get_dgram(uwsgi.cluster_fd, uwsgi.wsgi_requests[0])) {
continue;
}
if (uwsgi.wsgi_requests[0]->uh.modifier1 == 99) {
uwsgi_log("requested configuration data\n");
send(uwsgi.cluster_fd, cluster_opt_buf, cluster_opt_size, 0);
}
}
}
}
+46
View File
@@ -596,6 +596,52 @@ ssize_t uwsgi_send_empty_pkt(int fd, char *socket_name, uint8_t modifier1, uint8
return ret;
}
int uwsgi_get_dgram(int fd, struct wsgi_request *wsgi_req) {
ssize_t rlen;
struct uwsgi_header *uh;
static char *buffer = NULL;
if (!buffer) {
buffer = malloc(uwsgi.buffer_size + 4);
if (!buffer) {
uwsgi_error("malloc()");
exit(1);
}
}
rlen = read(fd, buffer, uwsgi.buffer_size + 4);
if (rlen < 0) {
uwsgi_error("read()");
return -1;
}
if (rlen < 4) {
uwsgi_log("invalid uwsgi packet\n");
return -1;
}
uh = (struct uwsgi_header *) buffer;
wsgi_req->uh.modifier1 = uh->modifier1;
wsgi_req->uh.pktsize = uh->pktsize;
wsgi_req->uh.modifier2 = uh->modifier2;
if (wsgi_req->uh.pktsize > uwsgi.buffer_size) {
uwsgi_log("invalid uwsgi packet size, probably you need to increase buffer size\n");
return -1;
}
wsgi_req->buffer = buffer+4;
uwsgi_log("request received %d %d\n", wsgi_req->uh.modifier1, wsgi_req->uh.modifier2);
return 0;
}
int uwsgi_hooked_parse_dict_dgram(int fd, char *buffer, size_t len, uint8_t modifier1, uint8_t modifier2, void (*hook)()) {
struct uwsgi_header *uh;
+2
View File
@@ -1155,3 +1155,5 @@ int uwsgi_waitfd(int, int);
int uwsgi_hooked_parse_dict_dgram(int, char *, size_t, uint8_t, uint8_t, void (*)());
void manage_string_opt(char *, int, char*, int);
int uwsgi_get_dgram(int, struct wsgi_request *);