Token problem???

Jochen Saile saile at sfs.nphil.uni-tuebingen.de
Wed Aug 9 17:12:31 CEST 2000


Moin,

i just did a few experiments with gdb and vos examine. It seems that none of the
functions in rxk_locl.c or rxk_serv.c are called, so i traced it to the function
call where the error happend:

The first trace is with tokens.....


vos: exa home.sailej

Breakpoint 3, VL_GetEntryByNameN (connection=0x810a1e0, 
    volumename=0x80bc384 "home.sailej", entry=0x80471d0) at vldb.cs.c:1433
1433    int ret = 0;
(gdb) n
1434    call = rx_NewCall (connection);
(gdb) 
1436    u = htonl (519);
(gdb) 
1437    if(rx_Write(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1441    char zero[4] = {0, 0, 0, 0};
(gdb) 
1443    len = strlen(volumename);
(gdb) 
1444    padlen = (4 - (len % 4)) % 4;
(gdb) 
1446    u = htonl (len);
(gdb) 
1447    if(rx_Write(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1450    if(rx_Write(call, volumename, len) != len)
(gdb) 
1452    if(rx_Write(call, zero, padlen) != padlen)
(gdb) 
1457    for(i0 = 0; i0 < 65;++i0){
(gdb) 
1459    if(rx_Read(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1460    goto fail;
(gdb) 
1567    ret = conv_to_arla_errno(rx_Error(call));
(gdb) 
1568    rx_EndCall (call, 0);
(gdb) 
1569    return ret;
(gdb) 
1570    }
(gdb) c
Continuing.
VL_GetEntryByName(home.saile) failed: rxkad - Seal inconsistency.
vos: 

When i step into rx_Read() it seems that roxane gets no response from the
remote machine. 


rx_ReadProc (call=0x8109998, vbuf=0x8046fa0, nbytes=4) at rx_rdwr.c:45
45          char *buf = (char *)vbuf;
(gdb) n
49          requestCount = nbytes;
(gdb) 
55          while (nbytes) {
(gdb) 
56              if (call->nLeft == 0) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
60                          if (call->error) {
(gdb) 
66                          if (call->mode == RX_MODE_SENDING) {
(gdb) 
67                              rx_FlushWrite(call);
(gdb) 
68                              continue;
(gdb) 
58                  for (;;) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
71                      if (queue_IsNotEmpty(&call->rq)) {
(gdb) 
154                     if (call->flags & RX_CALL_RECEIVE_DONE) {
(gdb) 
161                     call->flags |= RX_CALL_READER_WAIT;
(gdb) 
162                     clock_NewTime();
(gdb) 
163                     call->startWait = clock_Sec();
(gdb) 
171                     osi_rxSleep(&call->rq);
(gdb) 
176                     call->startWait = 0;
(gdb) 
58                  for (;;) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
60                          if (call->error) {
(gdb) 
64                              return 0;
(gdb) 
.
.

kdestroy tickets and restart gdb

vos: exa home.sailej

Breakpoint 1, VL_GetEntryByNameN (connection=0x81099f0, 
    volumename=0x80ad054 "home.sailej", entry=0x80471d0) at vldb.cs.c:1433
1433    int ret = 0;
(gdb) n
1434    call = rx_NewCall (connection);
(gdb) 
1436    u = htonl (519);
(gdb) 
1437    if(rx_Write(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1441    char zero[4] = {0, 0, 0, 0};
(gdb) 
1443    len = strlen(volumename);
(gdb) 
1444    padlen = (4 - (len % 4)) % 4;
(gdb) 
1446    u = htonl (len);
(gdb) 
1447    if(rx_Write(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1450    if(rx_Write(call, volumename, len) != len)
(gdb) 
1452    if(rx_Write(call, zero, padlen) != padlen)
(gdb) 
1457    for(i0 = 0; i0 < 65;++i0){
(gdb) 
1459    if(rx_Read(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1461    (*entry).name[i0] = ntohl (u);
(gdb) 
1462    }
(gdb) 
1459    if(rx_Read(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1461    (*entry).name[i0] = ntohl (u);
(gdb) 
1462    }
(gdb) 
1459    if(rx_Read(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1461    (*entry).name[i0] = ntohl (u);
(gdb) 
1462    }
(gdb) 
1459    if(rx_Read(call, &u, sizeof(u)) != sizeof(u))
(gdb) 
1461    (*entry).name[i0] = ntohl (u);
(gdb) 
1462    }
(gdb) c
Continuing.
home.sailej                     1937022657 RW       17 K  On-line
    roubaix.Informatik.Uni-Tuebingen.De /vicepc
    RWrite 1937022657   Backup 1937022659
    MaxQuota     100000 K
    Creation    Wed Jul 26 11:55:15 2000
    Last Update Wed Aug  9 12:53:48 2000
    99 accesses in the past day (i.e., vnode references)

    RWrite: 1937022657  ROnly: 0        Backup: 1937022659
    number of sites -> 1
       server roubaix.Informatik.Uni-Tuebingen.De partition /vicepc RW Site
vos: 

Without a ticket the rx_Read call is successful..... 

And again the trace from rx_Read()...


rx_ReadProc (call=0x8109ea8, vbuf=0x8046fa0, nbytes=4) at rx_rdwr.c:45
45          char *buf = (char *)vbuf;
(gdb) n
49          requestCount = nbytes;
(gdb) 
55          while (nbytes) {
(gdb) 
56              if (call->nLeft == 0) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
60                          if (call->error) {
(gdb) 
66                          if (call->mode == RX_MODE_SENDING) {
(gdb) 
67                              rx_FlushWrite(call);
(gdb) 
68                              continue;
(gdb) 
58                  for (;;) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
71                      if (queue_IsNotEmpty(&call->rq)) {
(gdb) 
154                     if (call->flags & RX_CALL_RECEIVE_DONE) {
(gdb) 
161                     call->flags |= RX_CALL_READER_WAIT;
(gdb) 
162                     clock_NewTime();
(gdb) 
163                     call->startWait = clock_Sec();
(gdb) 
171                     osi_rxSleep(&call->rq);
(gdb) 
176                     call->startWait = 0;
(gdb) 
58                  for (;;) {
(gdb) 
59                      if (call->error || (call->mode != RX_MODE_RECEIVING)) {
(gdb) 
71                      if (queue_IsNotEmpty(&call->rq)) {
(gdb) 
73                          rp = queue_First(&call->rq, rx_packet);
(gdb) 
74                          if (rp->header.seq == call->rnext) {
(gdb) 
76                              struct rx_connection *conn = call->conn;
(gdb) 
78                              queue_Remove(rp);
(gdb) 
86                              if ((error =
RXS_CheckPacket(conn->securityObject,
(gdb) 
103                             call->rnext++;
(gdb) 
104                             call->currentPacket = rp;
(gdb) 
105                             call->curvec = 1;       /* 0th vec is always
header */
(gdb) 
111                             call->curpos = call->conn->securityHeaderSize;
(gdb) 
123                             call->nLeft = rp->length;
(gdb) 
124                             if (rp->header.flags & RX_LAST_PACKET)
(gdb) 
125                                 call->flags |= RX_CALL_RECEIVE_DONE;
(gdb) 
139                             if (call->rnext > (call->lastAcked + (rx_Window
>> 1)))
(gdb) 
147                             break;
(gdb) 
178             } else {                       /* assert(call->currentPacket);
*/
(gdb) 
243         }                                  /* while (nbytes) ... */
(gdb) 
55          while (nbytes) {
(gdb) 
56              if (call->nLeft == 0) {
(gdb) 
196                 while (nbytes && call->currentPacket) {
(gdb) 
197                     p1 =
(char*)call->currentPacket->wirevec[call->curvec].iov_base +
(gdb) 
199                     l1 = call->currentPacket->wirevec[call->curvec].iov_len
-
(gdb) 
202                     t = MIN(l1, nbytes);
(gdb) 
203                     t = MIN(t, call->nLeft);
(gdb) 
204                     memcpy(buf, p1, t);
(gdb) 
205                     p1 += t;
(gdb) 
206                     buf += t;
(gdb) 
207                     l1 -= t;
(gdb) 
208                     nbytes -= t;
(gdb) 
209                     call->curpos += t;
(gdb) 
210                     call->nLeft -= t;
(gdb) 
212                     if (call->nLeft == 0) {
(gdb) 
233                 }
(gdb) 
196                 while (nbytes && call->currentPacket) {
(gdb) 
234                 if (nbytes == 0) {
(gdb) 
239                     return requestCount;
(gdb) 
249     }
(gdb) 
VL_GetEntryByNameN (connection=0x8109ad8, volumename=0x80ad06c "home.sailej", 
    entry=0x80471d0) at vldb.cs.c:1461
1461    (*entry).name[i0] = ntohl (u);
(gdb) 

I'm not sure if this is of any help.

Ciao

Jochen 





More information about the Arla-drinkers mailing list