The xxx_test demo

xxx_test - an interactive test program for the VIEWS stack, the CLSV:FIFO stack or any other stack with group membership information.

SYNOPSIS

xxx_test [-t protocol]

DESCRIPTION

This is an interactive test program for any layer with group membership information. You can create a group, join the group, multicast messages within the group, leave the group, or kill the group. After each membership change, typically the stability matrix at each member is printed.

Invoke the program with xxx_test. It prompts with '>'. You may enter the commands in the following section.

A typical usage for a coordinator at the prompt: create group_a
A typical usage for a non coordinator at the prompt: join group_a

As with any Horus application, a directory server (dirsvr) must be started before starting any xxx_test process.

COMMANDS

Only the first character of the command is significant, and in most cases the case is not. Thus 'join', 'JOIN', 'j', and 'Jack' are all the same command.

Currently, the following characters are available for allocation to commands: iuvwz

OPTIONS

  • -t protocol
    Specify the protocol stack.

    EXAMPLE


    Notice the text in bold is what you type in, the normal text is what the program produces.
    1. step 1: invoke one dirsvr and three xxx_test in different windows

      • window 0: > ./dirsvr
      • window 1: > ./xxx_test
      • window 2: > ./xxx_test
      • window 3. > ./xxx_test

      Notice if all the windows are on the same machine, you might see the warning message after you invoke xxx_test: "bind broadcase address: Address already in use." You can safely ignore the message.

    2. step 2: enter command "c group_a" in window 1.
      Notice the endpoint in window 1 is the group coordinator from now on. It has rank 0 in group_a.

      • window 0:

      • window 1: > c group_a
        creating 'group_a'
        >
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 1
        MCAST STABILITY:
               1
        PT2PT STABILITY:
               0
        >
        
      • window 2:

      • window 3:

    3. step 3: enter command "j group_a" in window 2.

      Notice the coordinator in window 1 gets join_request from the endpoint in window 2 and starts the flush protocol. From now on, the endpoint in wondow 2 has rank 1 in group_a.

      • window 0:

      • window 1:
        group_a: JOIN_REQUEST (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 1
        MCAST STABILITY:
               1
        PT2PT STABILITY:
               0
        > 
        group_a: FLUSH_OK (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 1
        MCAST STABILITY:
               1
        PT2PT STABILITY:
               0
        >
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 2
        I'm contact, some ep joining, done in 0.066537 sec
        MCAST STABILITY:
               1       0
               0       0
        PT2PT STABILITY:
               0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 2
        MCAST STABILITY:
               1       0
               1       0
        PT2PT STABILITY:
               0       0
        >
        
        
      • window 2: > j group_a
        joining 'group_a'
        > 
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 0, nmembers = 2
        I'm joining, done in 0.190353 sec
        MCAST STABILITY:
               1       0
               1       0
        PT2PT STABILITY:
               0       0
        >
        
      • window 3:

    4. step 4: enter command "j group_a" in window 3.
      Notice the result is similar to step 3.

      • window 0:

      • window 1:
        group_a: JOIN_REQUEST (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 2
        MCAST STABILITY:
               1       0
               1       0
        PT2PT STABILITY:
               0       0
        > 
        group_a: FLUSH_OK (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 2
        MCAST STABILITY:
               1       0
               1       0
        PT2PT STABILITY:
               0       0
        > 
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 3
        I'm contact, some ep joining, done in 0.128782 sec
        MCAST STABILITY:
               1       0       0
               0       0       0
               0       0       0
        PT2PT STABILITY:
               0       0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 3
        MCAST STABILITY:
               1       0       0
               0       0       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        > 
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 3
        MCAST STABILITY:
               1       0       0
               1       0       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        > 
        
      • window 2:
        group_a: FLUSH (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 0, nmembers = 2
        MCAST STABILITY:
               1       0
               1       0
        PT2PT STABILITY:
               0       0
        >
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 0, nmembers = 3
        MCAST STABILITY:
               1       0       0
               1       0       0
               0       0       0
        PT2PT STABILITY:
               0       0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 1, nmembers = 3
        MCAST STABILITY:
               1       0       0
               1       0       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        > 
        
        
      • window 3: > j group_a
        joining 'group_a'
        > 
        group_a: VIEW (#problems = 0; size = 0, time = 0.000000)
                my_rank = 2, origin = 0, nmembers = 3
        I'm joining, done in 0.185403 sec
        MCAST STABILITY:
               1       0       0
               0       0       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 2, origin = 2, nmembers = 3
        MCAST STABILITY:
               1       0       0
               1       0       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        > 
        

    5. step 5: enter command "m 1 msg_a" in window 2.
      This means multicast msg_a to group_a once. Notice there is no local delivery in wondow 2.

      • window 0:

      • window 1:
        group_a: CAST (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 1, nmembers = 3
        MCAST STABILITY:
               1       1       0
               1       1       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 0, origin = 0, nmembers = 3
        MCAST STABILITY:
               1       1       0
               1       1       0
               1       1       0
        PT2PT STABILITY:
               0       0       0
        > 
        
        
      • window 2: > m 1 msg_a
        cast to 'group_a'
        > 
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 1, nmembers = 3
        MCAST STABILITY:
               1       1       0
               1       1       0
               1       0       0
        PT2PT STABILITY:
               0       0       0
        > 
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 1, origin = 1, nmembers = 3
        MCAST STABILITY:
               1       1       0
               1       1       0
               1       1       0
        PT2PT STABILITY:
               0       0       0
        
        >
        
      • window 3:
        group_a: CAST (#problems = 0; size = 0, time = 0.000000)
                my_rank = 2, origin = 1, nmembers = 3
        MCAST STABILITY:
               1       0       0
               1       1       0
               1       1       0
        PT2PT STABILITY:
               0       0       0
        >
        group_a: STABLE (#problems = 0; size = 0, time = 0.000000)
                my_rank = 2, origin = 2, nmembers = 3
        MCAST STABILITY:
               1       1       0
               1       1       0
               1       1       0
        PT2PT STABILITY:
               0       0       0
        >
        
        

    FILES

    horus/src/hutil/xxx_test.c

    AUTHOR

    Robbert van Renesse

    BUGS