Skip to content

Commit c43667d

Browse files
committed
module: add support for update-interval
Problem: Fluxion `find` search times are large for large resources graphs. To serve many users effectively, the resource status RPC response needs to return quickly. To return resource allocation status quickly, we will need a cache that is updated after a configured interval of seconds. Add support for `update-interval` configuration option for the resource module.
1 parent 2c61dcf commit c43667d

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

resource/modules/resource_match_opts.cpp

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ const std::string &resource_prop_t::get_prune_filters () const
7070
return m_prune_filters;
7171
}
7272

73+
const int resource_prop_t::get_update_interval () const
74+
{
75+
return m_update_interval;
76+
}
77+
7378
void resource_prop_t::set_load_file (const std::string &p)
7479
{
7580
m_load_file = p;
@@ -125,6 +130,11 @@ void resource_prop_t::add_to_prune_filters (const std::string &p)
125130
m_prune_filters += p;
126131
}
127132

133+
void resource_prop_t::set_update_interval (const int i)
134+
{
135+
m_update_interval = i;
136+
}
137+
128138
bool resource_prop_t::is_load_file_set () const
129139
{
130140
return m_load_file != RESOURCE_OPTS_UNSET_STR;
@@ -165,9 +175,14 @@ bool resource_prop_t::is_prune_filters_set () const
165175
return m_prune_filters != RESOURCE_OPTS_UNSET_STR;
166176
}
167177

178+
bool resource_prop_t::is_update_interval_set () const
179+
{
180+
return m_update_interval != 0;
181+
}
182+
168183
json_t *resource_prop_t::jsonify () const
169184
{
170-
return json_pack ("{ s:s? s:s? s:s? s:s? s:s? s:s? s:i s:s? }",
185+
return json_pack ("{ s:s? s:s? s:s? s:s? s:s? s:s? s:i s:s? s:i }",
171186
"load-file", is_load_file_set ()
172187
? get_load_file ().c_str ()
173188
: nullptr,
@@ -191,7 +206,10 @@ json_t *resource_prop_t::jsonify () const
191206
: 0,
192207
"prune-filters", is_prune_filters_set ()
193208
? get_prune_filters ().c_str ()
194-
: nullptr);
209+
: nullptr,
210+
"update-interval", is_update_interval_set ()
211+
? get_update_interval ()
212+
: 0);
195213
}
196214

197215

@@ -280,6 +298,12 @@ resource_opts_t::resource_opts_t ()
280298
::resource_opts_key_t
281299
::PRUNE_FILTERS)));
282300
inserted &= ret.second;
301+
ret= m_tab.insert (std::pair<std::string, int> (
302+
"update-interval",
303+
static_cast<int> (resource_opts_t
304+
::resource_opts_key_t
305+
::UPDATE_INTERVAL)));
306+
inserted &= ret.second;
283307

284308
if (!inserted)
285309
throw std::bad_alloc ();
@@ -325,6 +349,11 @@ const std::string &resource_opts_t::get_prune_filters () const
325349
return m_resource_prop.get_prune_filters ();
326350
}
327351

352+
const int resource_opts_t::get_update_interval () const
353+
{
354+
return m_resource_prop.get_update_interval ();
355+
}
356+
328357
const resource_prop_t &resource_opts_t::get_resource_prop () const
329358
{
330359
return m_resource_prop;
@@ -370,6 +399,11 @@ void resource_opts_t::set_prune_filters (const std::string &o)
370399
m_resource_prop.set_prune_filters (o);
371400
}
372401

402+
void resource_opts_t::set_update_interval (const int i)
403+
{
404+
m_resource_prop.set_update_interval (i);
405+
}
406+
373407
bool resource_opts_t::is_load_file_set () const
374408
{
375409
return m_resource_prop.is_load_file_set ();
@@ -410,6 +444,11 @@ bool resource_opts_t::is_prune_filters_set () const
410444
return m_resource_prop.is_prune_filters_set ();
411445
}
412446

447+
bool resource_opts_t::is_update_interval_set () const
448+
{
449+
return m_resource_prop.is_update_interval_set ();
450+
}
451+
413452
resource_opts_t &resource_opts_t::canonicalize ()
414453
{
415454
return *this;
@@ -441,6 +480,9 @@ resource_opts_t &resource_opts_t::operator+= (const resource_opts_t &src)
441480
if (src.m_resource_prop.is_prune_filters_set ())
442481
m_resource_prop.set_prune_filters (
443482
src.m_resource_prop.get_prune_filters ());
483+
if (src.m_resource_prop.is_update_interval_set ())
484+
m_resource_prop.set_update_interval (
485+
src.m_resource_prop.get_update_interval ());
444486
return *this;
445487
}
446488

@@ -543,6 +585,15 @@ int resource_opts_t::parse (const std::string &k,
543585
}
544586
break;
545587

588+
case static_cast<int> (resource_opts_key_t::UPDATE_INTERVAL):
589+
if (is_number (v)) {
590+
int s = std::stoi (v);
591+
if ( !(s <= 0 || s > 2000000)) {
592+
m_resource_prop.set_update_interval (s);
593+
}
594+
}
595+
break;
596+
546597
default:
547598
info += "Unknown option (" + k + ").";
548599
errno = EINVAL;

resource/modules/resource_match_opts.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class resource_prop_t {
3535
const int get_reserve_vtx_vec () const;
3636
const std::string &get_prune_filters () const;
3737
const resource_prop_t &get_resource_prop () const;
38+
const int get_update_interval () const;
3839

3940
void set_load_file (const std::string &o);
4041
bool set_load_format (const std::string &o);
@@ -45,6 +46,7 @@ class resource_prop_t {
4546
void set_reserve_vtx_vec (const int i);
4647
void set_prune_filters (const std::string &o);
4748
void add_to_prune_filters (const std::string &o);
49+
void set_update_interval (const int i);
4850

4951
bool is_load_file_set () const;
5052
bool is_load_format_set () const;
@@ -54,6 +56,7 @@ class resource_prop_t {
5456
bool is_match_subsystems_set () const;
5557
bool is_reserve_vtx_vec_set () const;
5658
bool is_prune_filters_set () const;
59+
bool is_update_interval_set () const;
5760

5861
json_t *jsonify () const;
5962

@@ -66,6 +69,7 @@ class resource_prop_t {
6669
std::string m_match_subsystems = RESOURCE_OPTS_UNSET_STR;
6770
int m_reserve_vtx_vec = 0;
6871
std::string m_prune_filters = RESOURCE_OPTS_UNSET_STR;
72+
int m_update_interval = 0;
6973
};
7074

7175

@@ -82,6 +86,7 @@ class resource_opts_t : public optmgr_parse_t {
8286
MATCH_SUBSYSTEMS = 50, // subsystem
8387
RESERVE_VTX_VEC = 60, // reserve-vtx-vec
8488
PRUNE_FILTERS = 70, // prune-filter
89+
UPDATE_INTERVAL = 80, // update-interval
8590
UNKNOWN = 5000
8691
};
8792

@@ -102,6 +107,7 @@ class resource_opts_t : public optmgr_parse_t {
102107
const int get_reserve_vtx_vec () const;
103108
const std::string &get_prune_filters () const;
104109
const resource_prop_t &get_resource_prop () const;
110+
const int get_update_interval () const;
105111

106112
void set_load_file (const std::string &o);
107113
bool set_load_format (const std::string &o);
@@ -111,6 +117,7 @@ class resource_opts_t : public optmgr_parse_t {
111117
void set_match_subsystems (const std::string &o);
112118
void set_reserve_vtx_vec (const int i);
113119
void set_prune_filters (const std::string &o);
120+
void set_update_interval (const int i);
114121

115122
bool is_load_file_set () const;
116123
bool is_load_format_set () const;
@@ -120,6 +127,7 @@ class resource_opts_t : public optmgr_parse_t {
120127
bool is_match_subsystems_set () const;
121128
bool is_reserve_vtx_vec_set () const;
122129
bool is_prune_filters_set () const;
130+
bool is_update_interval_set () const;
123131

124132
/*! Canonicalize the option set -- apply the general resource properties
125133
*/

0 commit comments

Comments
 (0)