/
Node.h
164 lines (141 loc) · 3.79 KB
/
Node.h
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
162
163
164
/* -*- C++ -*-; c-basic-offset: 4; indent-tabs-mode: nil */
/*!
* @file Node.h
* @brief Interface definition file for Node
*/
/* Copyright (c) 2009 Webroot Software, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
#ifndef NODE_H
#define NODE_H
#include <string>
#include <map>
#include <list>
#include <boost/shared_ptr.hpp>
#include <expat.h>
#include <sstream>
namespace Voldemort {
using namespace boost;
class Cluster;
/**
* Represent a Voldemort node configuration
*/
class Node
{
public:
/**
* Construct a new Node object
*
* @param id the node ID
* @param host the hostname for the node
* @param httpPort the HTTP port for the node
* @param socketPort the socket port for the node
* @param adminPort the admin port for the node
* @param partitions the list of partitions hosted on the node
*/
Node(int id,
std::string& host,
int httpPort,
int socketPort,
int adminPort,
shared_ptr<std::list<int> >& partitions);
Node();
~Node() {}
/**
* Get the Node ID for this node
*
* @return the node ID
*/
int getId() { return id_; }
/**
* Get the host name for this node
*
* @return the host name
*/
const std::string& getHost() { return host_; }
/**
* Get the HTTP port for this node
*
* @return the HTTP port
*/
int getHttpPort() { return httpPort_; }
/**
* Get the socket port for this node
*
* @return the socket port
*/
int getSocketPort() { return socketPort_; }
/**
* Get the admin port for this node
*
* @return the admin port
*/
int getAdminPort() { return adminPort_; }
/**
* Return whether the node is current available in the node list.
*
* @return true if the node is available
*/
bool isAvailable() { return isAvailable_; }
/**
* Return whether the node is current available in the node list,
* or if its unavailable but the timeout period specified has
* elapsed.
*
* @return true if the node is available
*/
bool isAvailable(uint64_t timeout);
/**
* Set whether the node is available
*
* @param avail true if the node is available, false otherwise
*/
void setAvailable(bool avail);
/**
* Get the system time in milliseconds when this node was last
* checked.
*
* @return the time in milliseconds
*/
uint64_t getLastChecked() { return lastChecked_; }
/**
* Get the number of milliseconds since the last time this node
* was checked for availability.
*
* @return the number of milliseconds since we last checked for
* this node.
*/
uint64_t getMsSinceLastChecked();
/**
* Stream insertion operator for cluster
*
* @param output the stream
* @param node the node object
* @return the stream
*/
friend std::ostream& operator<<(std::ostream& output, const Node& node);
private:
friend class Cluster;
int id_;
std::string host_;
int httpPort_;
int socketPort_;
int adminPort_;
shared_ptr<std::list<int> > partitions_;
/* Node status */
bool isAvailable_;
uint64_t lastChecked_;
};
} /* namespace Voldemort */
#endif /* NODE_H */