Changeset ece0e80 for benchmark


Ignore:
Timestamp:
Jan 9, 2021, 4:27:57 PM (3 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
561dd26
Parents:
35fd2c4
Message:

Added prints.
Naive implementation of cancel.
Server now shutdown cleanly.

Location:
benchmark/io/http
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • benchmark/io/http/main.cfa

    r35fd2c4 rece0e80  
    114114                options.clopts.instance = &cl;
    115115
    116                 init_protocol();
    117116
    118117                int pipe_cnt = options.clopts.nworkers * 2;
     
    131130                {
    132131                        ServerProc procs[options.clopts.nprocs];
     132
     133                        init_protocol();
    133134                        {
    134135                                Worker workers[options.clopts.nworkers];
     
    158159                                        printf("Shutting Down\n");
    159160                                }
     161
     162                                for(i; options.clopts.nworkers) {
     163                                        printf("Cancelling %p\n", (void*)workers[i].cancel.target);
     164                                        cancel(workers[i].cancel);
     165                                }
     166
     167                                printf("Shutting down socket\n");
     168                                int ret = shutdown( server_fd, SHUT_RD );
     169                                if( ret < 0 ) { abort( "shutdown error: (%d) %s\n", (int)errno, strerror(errno) ); }
     170
     171                                //===================
     172                                // Close Socket
     173                                printf("Closing Socket\n");
     174                                ret = close( server_fd );
     175                                if(ret < 0) {
     176                                        abort( "close socket error: (%d) %s\n", (int)errno, strerror(errno) );
     177                                }
    160178                        }
    161179                        printf("Workers Closed\n");
     180
     181                        deinit_protocol();
    162182                }
    163183
     
    170190                free(fds);
    171191
    172                 deinit_protocol();
    173         }
    174 
    175         //===================
    176         // Close Socket
    177         printf("Closing Socket\n");
    178         ret = close( server_fd );
    179         if(ret < 0) {
    180                 abort( "close socket error: (%d) %s\n", (int)errno, strerror(errno) );
    181192        }
    182193
  • benchmark/io/http/protocol.cfa

    r35fd2c4 rece0e80  
    7171}
    7272
    73 [HttpCode code, bool closed, * const char file, size_t len] http_read(int fd, []char buffer, size_t len) {
     73[HttpCode code, bool closed, * const char file, size_t len] http_read(int fd, []char buffer, size_t len, io_cancellation * cancel) {
    7474        char * it = buffer;
    7575        size_t count = len - 1;
     
    7777        READ:
    7878        for() {
    79                 int ret = cfa_read(fd, (void*)it, count, 0, -1`s, 0p, 0p);
     79                int ret = cfa_read(fd, (void*)it, count, 0, -1`s, cancel, 0p);
    8080                // int ret = read(fd, (void*)it, count);
    8181                if(ret == 0 ) return [OK200, true, 0, 0];
     
    148148
    149149void ?{}( DateFormater & this ) {
    150         ((thread&)this){ *options.clopts.instance };
     150        ((thread&)this){ "Server Date Thread", *options.clopts.instance };
    151151        this.idx = 0;
    152152        memset( this.buffers[0].buff, 0, sizeof(this.buffers[0]) );
     
    162162
    163163                Time now = getTimeNsec();
    164                 // Date: Wed, 17 Apr 2013 12:00:00 GMT
     164
    165165                strftime( this.buffers[this.idx].buff, 100, "%a, %d %b %Y %H:%M:%S %Z", now );
    166                 printf("Changing date to %s\n", this.buffers[this.idx].buff);
    167166
    168167                char * next = this.buffers[this.idx].buff;
  • benchmark/io/http/protocol.hfa

    r35fd2c4 rece0e80  
    11#pragma once
     2
     3struct io_cancellation;
    24
    35enum HttpCode {
     
    1517int answer_header( int fd, size_t size );
    1618
    17 [HttpCode code, bool closed, * const char file, size_t len] http_read(int fd, []char buffer, size_t len);
     19[HttpCode code, bool closed, * const char file, size_t len] http_read(int fd, []char buffer, size_t len, io_cancellation *);
    1820
    1921void sendfile( int pipe[2], int fd, int ans_fd, size_t count );
  • benchmark/io/http/worker.cfa

    r35fd2c4 rece0e80  
    2828        CONNECTION:
    2929        for() {
    30                 int fd = cfa_accept4( this.[sockfd, addr, addrlen, flags], 0, -1`s, 0p, 0p );
     30                printf("=== Accepting connection ===\n");
     31                int fd = cfa_accept4( this.[sockfd, addr, addrlen, flags], 0, -1`s, &this.cancel, 0p );
    3132                if(fd < 0) {
    3233                        if( errno == ECONNABORTED ) break;
     34                        if( errno == EINVAL ) break;
    3335                        abort( "accept error: (%d) %s\n", (int)errno, strerror(errno) );
    3436                }
    3537
    36                 printf("New connection %d, waiting for requests\n", fd);
     38                printf("=== New connection %d, waiting for requests ===\n", fd);
    3739                REQUEST:
    3840                for() {
     
    4547                        size_t len = options.socket.buflen;
    4648                        char buffer[len];
    47                         printf("Reading request\n");
    48                         [code, closed, file, name_size] = http_read(fd, buffer, len);
     49                        printf("=== Reading request ===\n");
     50                        [code, closed, file, name_size] = http_read(fd, buffer, len, &this.cancel);
    4951
    5052                        // if we are done, break out of the loop
    5153                        if( closed ) {
    52                                 printf("Connection closed\n");
     54                                printf("=== Connection closed ===\n");
    5355                                continue CONNECTION;
    5456                        }
     
    5658                        // If this wasn't a request retrun 400
    5759                        if( code != OK200 ) {
    58                                 printf("Invalid Request : %d\n", code_val(code));
     60                                printf("=== Invalid Request : %d ===\n", code_val(code));
    5961                                answer_error(fd, code);
    6062                                continue REQUEST;
    6163                        }
    6264
    63                         printf("Request for file %.*s\n", (int)name_size, file);
     65                        printf("=== Request for file %.*s ===\n", (int)name_size, file);
    6466
    6567                        // Get the fd from the file cache
     
    7072                        // If we can't find the file, return 404
    7173                        if( ans_fd < 0 ) {
    72                                 printf("File Not Found\n");
     74                                printf("=== File Not Found ===\n");
    7375                                answer_error(fd, E404);
    7476                                continue REQUEST;
     
    8183                        sendfile( this.pipe, fd, ans_fd, count);
    8284
    83                         printf("File sent\n");
     85                        printf("=== File sent ===\n");
    8486                }
    8587        }
  • benchmark/io/http/worker.hfa

    r35fd2c4 rece0e80  
    1717        socklen_t * addrlen;
    1818        int flags;
     19        io_cancellation cancel;
    1920};
    2021void ?{}( Worker & this);
Note: See TracChangeset for help on using the changeset viewer.