mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noël Rouvignac
28.10.2015 07e7cb84f497a907074b5ca46f3147f65488d6ed
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Portions Copyright 2015 ForgeRock AS.
 */
package org.opends.server.replication.common;
 
/**
 * The various status a DS can take.
 */
public enum ServerStatus
{
 
  /**
   * Invalid status: special status used in state machine implementation to
   * return an error (impossible status). See class StatusMachine class for
   * further details.
   */
  INVALID_STATUS((byte) -1),
  /**
   * Not connected status: special status used as initial status of the state
   * machine in the DS context only as already connected while state machine
   * considered in RS context.
   */
  NOT_CONNECTED_STATUS((byte) 0),
  /**
   * DS in normal status.
   * When:
   * - everything is fine
   * Properties:
   * - no referrals
   * - updates received from RS
   * - if assured mode, RS asks for ack
   */
  NORMAL_STATUS((byte) 1),
  /**
   * DS in degraded status.
   * When:
   * - DS is too late compared to number of updates RS has to send
   * Properties:
   * - referrals returned
   * - updates received from RS
   * - if assured mode, RS does not asks for ack
   */
  DEGRADED_STATUS((byte) 2),
  /**
   * DS in full update (local DS is initialized from another DS).
   * (if local DS initializes another, it is not in this status)
   * When:
   * - A full update is being performed to our local DS
   * Properties:
   * - referrals returned
   * - no updates received from RS
   * - no ack requested as no updates received
   */
  FULL_UPDATE_STATUS((byte) 3),
  /**
   * DS in bad generation id status.
   * When:
   * - A reset generation id order has been sent to topology
   * Properties:
   * - no referrals returned
   * - no updates received from RS
   * - no ack requested as no updates received
   */
  BAD_GEN_ID_STATUS((byte) 4);
 
  /** The status value. */
  private byte value = -1;
 
  private ServerStatus(byte value)
  {
    this.value = value;
  }
 
  /**
   * Returns the ServerStatus matching the passed status numeric representation.
   * @param value The numeric value for the status to return
   * @return The matching ServerStatus
   * @throws java.lang.IllegalArgumentException If provided status value is
   * wrong
   */
  public static ServerStatus valueOf(byte value) throws IllegalArgumentException
  {
    switch (value)
    {
      case -1:
        return INVALID_STATUS;
      case 0:
        return NOT_CONNECTED_STATUS;
      case 1:
        return NORMAL_STATUS;
      case 2:
        return DEGRADED_STATUS;
      case 3:
        return FULL_UPDATE_STATUS;
      case 4:
        return BAD_GEN_ID_STATUS;
      default:
        throw new IllegalArgumentException("Wrong status numeric value: " +
          value);
    }
  }
 
  /**
   * Get a numeric representation of the status.
   * @return The numeric representation of the status
   */
  public byte getValue()
  {
    return value;
  }
 
  /**
   * Get a user readable string representing this status (User friendly string
   * for monitoring purpose).
   * @return A user readable string representing this status.
   */
  public String toString()
  {
    switch (value)
    {
      case -1:
        return "Invalid";
      case 0:
        return "Not connected";
      case 1:
        return "Normal";
      case 2:
        return "Degraded";
      case 3:
        return "Full update";
      case 4:
        return "Bad generation id";
      default:
        throw new IllegalArgumentException("Wrong status numeric value: " +
          value);
    }
  }
}