summaryrefslogtreecommitdiff
path: root/TAO/tao/Invocation_Retry_State.h
blob: e68bb509b1d8d942768386a02d74986108a941c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* -*- C++ -*- $Id$ */
//=============================================================================
/**
 *  @file   Invocation_Retry_State.h
 *
 *  @author Byron Harris (harrisb@ociweb.com)
 *
 */
//=============================================================================

#ifndef TAO_INVOCATION_RETRY_STATE_H
#define TAO_INVOCATION_RETRY_STATE_H

#include "tao/Stub.h"
#include "tao/Invocation_Retry_Params.h"

#include "ace/Array_Map.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

namespace TAO
{

  /**
   * @class Invocation_Retry_State
   *
   * @brief Maintains state of invocation retries.
   */
  class Invocation_Retry_State
  {
  public:
    Invocation_Retry_State (TAO_Stub &stub);

    ~Invocation_Retry_State ();

    /**
     * Answer if any profile forward on exception limit
     * parameter is used.
     */
    bool forward_on_exception_limit_used () const;

    /**
     * Attempt to increment the count of profile
     * forwards.
     * @return false if forward on exception is not
     * being used or the limit has been reached.
     */
    bool forward_on_exception_increment (const int ef);

    /**
     * Attempt to increment the count of retries
     * when a server connection is seen as closed
     * during reply.
     */
    bool forward_on_reply_closed_increment ();

    /**
     * Increment to next profile in preparation
     * to retry using that profile.
     * If the next profile is the starting
     * base profile then also call
     * sleep ().
     * @see TAO_Stub::next_profile_retry()
     */
    void next_profile_retry (TAO_Stub &stub) const;

    /**
     * Sleep if profile is the starting
     * base profile.
     */
    void sleep_at_starting_profile (TAO_Stub &stub) const;

    /**
     * Sleep according to the delay value
     * in Invocation_Retry_Params.
     */
    void sleep () const;

  private:

    typedef ACE_Array_Map<int, int> Ex_Count_Map;
    Ex_Count_Map ex_count_map_;
    int forward_on_reply_closed_count_;
    Invocation_Retry_Params retry_params_;
    bool forward_on_exception_limit_used_;
  };

}

TAO_END_VERSIONED_NAMESPACE_DECL

#endif /* TAO_INVOCATION_RETRY_STATE_H*/