DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦5338755cc⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Request, seg_04b23d, seg_04b2bb, separate Broker_Work

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Max;

separate (Broker_Work)

procedure Request (M : Message_New.Object; Save : in out Memory.File) is
    Iter1 : Database.Iterator := Database.Publishers
                                    (Message_New.Get_Method (M));
    Iter2 : Database.Iterator := Database.Subscribers
                                    (Message_New.Get_Method (M));
    S : Message_Transport.Status_Code;
    Msg : Message_New.Object := M;

    use Message_Transport;
begin  
    Log ("");
    Log ("+++ Received request for " &
         Method.Image (Message_New.Get_Method (M)));
    Count := Count + 1;  
    Memory.Add (Save, Count, Message_New.Get_Sender (M));
    Message_New.Set_Request (Msg, Count);

    Publishers:
        while not Database.Is_Done (Iter1) loop

            Log ("+++ Found potential server =>" &
                 Integer'Image (Database.Value (Iter1)));
            Log ("--- Forwarding request");

            Message_Transport.Put
               (Message => Standard.Message_New.Image (Msg),
                Remote_Host => Identifier.Get_Host
                                  (Identifier.Value (Database.Value (Iter1))),
                Remote_Socket => Identifier.Get_Socket
                                    (Identifier.Value (Database.Value (Iter1))),
                Number_Of_Retry => 10,
                Retry_Delay => 0.1,
                Status => S);

            if S = Message_Transport.Ok then
                Log ("+++ Forward successful");
                exit; --[we forwarded successfuly and continue]
            else
                Put_Line ("++* Forward failed for publisher =>" &
                          Integer'Image (Database.Value (Iter1)));

                Put_Line ("--- Making it stale");
                Stale (Behavior => Database.Value (Iter1));

                Put_Line ("--- Trying next publisher");
            end if;

            Database.Next (Iter1);

            if Database.Is_Done (Iter1) then
                Put_Line ("*** Forward failed for all publishers");
                Put_Line ("--- Method => " & Method.Image
                                                (Message_New.Get_Method (M)));
                Put_Line ("--- could not be handled");
            end if;

        end loop Publishers;


    Subscribers:
        while not Database.Is_Done (Iter2) loop

            Message_Transport.Put
               (Message => Standard.Message_New.Image (Msg),
                Remote_Host => Identifier.Get_Host
                                  (Identifier.Value (Database.Value (Iter2))),
                Remote_Socket => Identifier.Get_Socket
                                    (Identifier.Value (Database.Value (Iter2))),
                Number_Of_Retry => 10,
                Retry_Delay => 0.1,
                Status => S);


            if S = Message_Transport.Ok then
                Log ("+++ Propagated notification to subscriber => " &
                     Integer'Image (Database.Value (Iter2)));
            else
                Put_Line
                   ("*** Failed to propagate notification to subscriber => " &
                    Integer'Image (Database.Value (Iter2)));
                Put_Line ("--- Making it stale");
                Stale (Behavior => Database.Value (Iter2));
            end if;

            Database.Next (Iter2);
        end loop Subscribers;
end Request;

E3 Meta Data

    nblk1=5
    nid=3
    hdr6=8
        [0x00] rec0=1f rec1=00 rec2=01 rec3=01a
        [0x01] rec0=18 rec1=00 rec2=05 rec3=01c
        [0x02] rec0=19 rec1=00 rec2=02 rec3=05a
        [0x03] rec0=0e rec1=00 rec2=04 rec3=000
        [0x04] rec0=0d rec1=00 rec2=04 rec3=000
    tail 0x215483834867c63b354d4 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 00 00 58 80 2e 20 20 20 28 4d 65 73 73 61 67  ┆   X .   (Messag┆