Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Slurm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
tud-zih-energy
Slurm
Commits
b7410c4f
Commit
b7410c4f
authored
11 years ago
by
Danny Auble
Browse files
Options
Downloads
Patches
Plain Diff
sview - speed up logic for large numbers of front end nodes
parent
69d3fa54
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/sview/front_end_info.c
+89
-66
89 additions, 66 deletions
src/sview/front_end_info.c
with
89 additions
and
66 deletions
src/sview/front_end_info.c
+
89
−
66
View file @
b7410c4f
...
@@ -36,9 +36,13 @@
...
@@ -36,9 +36,13 @@
/* Collection of data for printing reports. Like data is combined here */
/* Collection of data for printing reports. Like data is combined here */
typedef
struct
{
typedef
struct
{
int
color_inx
;
int
color_inx
;
char
*
front_end_name
;
front_end_info_t
*
front_end_ptr
;
front_end_info_t
*
front_end_ptr
;
GtkTreeIter
iter_ptr
;
bool
iter_set
;
char
*
boot_time
;
char
*
boot_time
;
int
node_inx
[
3
];
int
node_inx
[
3
];
int
pos
;
char
*
reason
;
char
*
reason
;
char
*
slurmd_start_time
;
char
*
slurmd_start_time
;
char
*
state
;
char
*
state
;
...
@@ -68,6 +72,7 @@ enum {
...
@@ -68,6 +72,7 @@ enum {
SORTID_REASON
,
SORTID_REASON
,
SORTID_SLURMD_START_TIME
,
SORTID_SLURMD_START_TIME
,
SORTID_STATE
,
SORTID_STATE
,
SORTID_UPDATED
,
SORTID_CNT
SORTID_CNT
};
};
...
@@ -109,6 +114,8 @@ static display_data_t display_data_front_end[] = {
...
@@ -109,6 +114,8 @@ static display_data_t display_data_front_end[] = {
refresh_front_end
,
create_model_front_end
,
admin_edit_front_end
},
refresh_front_end
,
create_model_front_end
,
admin_edit_front_end
},
{
G_TYPE_POINTER
,
SORTID_NODE_INX
,
NULL
,
FALSE
,
EDIT_NONE
,
{
G_TYPE_POINTER
,
SORTID_NODE_INX
,
NULL
,
FALSE
,
EDIT_NONE
,
refresh_front_end
,
create_model_front_end
,
admin_edit_front_end
},
refresh_front_end
,
create_model_front_end
,
admin_edit_front_end
},
{
G_TYPE_INT
,
SORTID_UPDATED
,
NULL
,
FALSE
,
EDIT_NONE
,
refresh_resv
,
create_model_resv
,
admin_edit_resv
},
{
G_TYPE_NONE
,
-
1
,
NULL
,
FALSE
,
EDIT_NONE
}
{
G_TYPE_NONE
,
-
1
,
NULL
,
FALSE
,
EDIT_NONE
}
};
};
...
@@ -132,16 +139,23 @@ static void _admin_front_end(GtkTreeModel *model, GtkTreeIter *iter, char *type,
...
@@ -132,16 +139,23 @@ static void _admin_front_end(GtkTreeModel *model, GtkTreeIter *iter, char *type,
static
void
_process_each_front_end
(
GtkTreeModel
*
model
,
GtkTreePath
*
path
,
static
void
_process_each_front_end
(
GtkTreeModel
*
model
,
GtkTreePath
*
path
,
GtkTreeIter
*
iter
,
gpointer
userdata
);
GtkTreeIter
*
iter
,
gpointer
userdata
);
static
void
_front_end_info_
list_del
(
void
*
object
)
static
void
_front_end_info_
free
(
sview_front_end_info_t
*
sview_front_end_info
)
{
{
sview_front_end_info_t
*
sview_front_end_info
;
sview_front_end_info
=
(
sview_front_end_info_t
*
)
object
;
if
(
sview_front_end_info
)
{
if
(
sview_front_end_info
)
{
xfree
(
sview_front_end_info
->
boot_time
);
xfree
(
sview_front_end_info
->
boot_time
);
xfree
(
sview_front_end_info
->
reason
);
xfree
(
sview_front_end_info
->
reason
);
xfree
(
sview_front_end_info
->
slurmd_start_time
);
xfree
(
sview_front_end_info
->
slurmd_start_time
);
xfree
(
sview_front_end_info
->
state
);
xfree
(
sview_front_end_info
->
state
);
}
}
static
void
_front_end_info_list_del
(
void
*
object
)
{
sview_front_end_info_t
*
sview_front_end_info
;
sview_front_end_info
=
(
sview_front_end_info_t
*
)
object
;
if
(
sview_front_end_info
)
{
_front_end_info_free
(
sview_front_end_info
);
xfree
(
sview_front_end_info
);
xfree
(
sview_front_end_info
);
}
}
}
}
...
@@ -210,15 +224,14 @@ static void _layout_front_end_record(GtkTreeView *treeview,
...
@@ -210,15 +224,14 @@ static void _layout_front_end_record(GtkTreeView *treeview,
static
void
_update_front_end_record
(
static
void
_update_front_end_record
(
sview_front_end_info_t
*
sview_front_end_info_ptr
,
sview_front_end_info_t
*
sview_front_end_info_ptr
,
GtkTreeStore
*
treestore
,
GtkTreeStore
*
treestore
)
GtkTreeIter
*
iter
)
{
{
front_end_info_t
*
front_end_ptr
;
front_end_info_t
*
front_end_ptr
;
front_end_ptr
=
sview_front_end_info_ptr
->
front_end_ptr
;
front_end_ptr
=
sview_front_end_info_ptr
->
front_end_ptr
;
/* Combining these records provides a slight performance improvement */
/* Combining these records provides a slight performance improvement */
gtk_tree_store_set
(
treestore
,
ite
r
,
gtk_tree_store_set
(
treestore
,
&
sview_front_end_info_ptr
->
iter_pt
r
,
SORTID_ALLOW_GROUPS
,
front_end_ptr
->
allow_groups
,
SORTID_ALLOW_GROUPS
,
front_end_ptr
->
allow_groups
,
SORTID_ALLOW_USERS
,
front_end_ptr
->
allow_users
,
SORTID_ALLOW_USERS
,
front_end_ptr
->
allow_users
,
SORTID_BOOT_TIME
,
SORTID_BOOT_TIME
,
...
@@ -236,6 +249,7 @@ static void _update_front_end_record(
...
@@ -236,6 +249,7 @@ static void _update_front_end_record(
SORTID_SLURMD_START_TIME
,
SORTID_SLURMD_START_TIME
,
sview_front_end_info_ptr
->
slurmd_start_time
,
sview_front_end_info_ptr
->
slurmd_start_time
,
SORTID_STATE
,
sview_front_end_info_ptr
->
state
,
SORTID_STATE
,
sview_front_end_info_ptr
->
state
,
SORTID_UPDATED
,
1
,
-
1
);
-
1
);
return
;
return
;
...
@@ -243,77 +257,58 @@ static void _update_front_end_record(
...
@@ -243,77 +257,58 @@ static void _update_front_end_record(
static
void
_append_front_end_record
(
static
void
_append_front_end_record
(
sview_front_end_info_t
*
sview_front_end_info_ptr
,
sview_front_end_info_t
*
sview_front_end_info_ptr
,
GtkTreeStore
*
treestore
,
GtkTreeIter
*
iter
,
GtkTreeStore
*
treestore
)
int
line
)
{
{
gtk_tree_store_append
(
treestore
,
iter
,
NULL
);
gtk_tree_store_append
(
treestore
,
&
sview_front_end_info_ptr
->
iter_ptr
,
gtk_tree_store_set
(
treestore
,
iter
,
SORTID_POS
,
line
,
-
1
);
NULL
);
_update_front_end_record
(
sview_front_end_info_ptr
,
treestore
,
iter
);
gtk_tree_store_set
(
treestore
,
&
sview_front_end_info_ptr
->
iter_ptr
,
SORTID_POS
,
sview_front_end_info_ptr
->
pos
,
-
1
);
_update_front_end_record
(
sview_front_end_info_ptr
,
treestore
);
}
}
static
void
_update_info_front_end
(
List
info_list
,
GtkTreeView
*
tree_view
)
static
void
_update_info_front_end
(
List
info_list
,
GtkTreeView
*
tree_view
)
{
{
GtkTreePath
*
path
=
gtk_tree_path_new_first
();
GtkTreeModel
*
model
=
gtk_tree_view_get_model
(
tree_view
);
GtkTreeModel
*
model
=
gtk_tree_view_get_model
(
tree_view
);
GtkTreeIter
iter
;
static
GtkTreeModel
*
last_model
=
NULL
;
front_end_info_t
*
front_end_ptr
=
NULL
;
char
*
name
;
int
line
=
0
;
char
*
host
=
NULL
,
*
front_end_name
=
NULL
;
ListIterator
itr
=
NULL
;
ListIterator
itr
=
NULL
;
sview_front_end_info_t
*
sview_front_end_info
=
NULL
;
sview_front_end_info_t
*
sview_front_end_info
=
NULL
;
/* get the iter, or find out the list is empty goto add */
set_for_update
(
model
,
SORTID_UPDATED
);
if
(
gtk_tree_model_get_iter
(
model
,
&
iter
,
path
))
{
/* make sure all the reserves are still here */
while
(
1
)
{
if
(
!
gtk_tree_model_iter_next
(
model
,
&
iter
))
{
break
;
}
}
}
itr
=
list_iterator_create
(
info_list
);
itr
=
list_iterator_create
(
info_list
);
while
((
sview_front_end_info
=
list_next
(
itr
)))
{
while
((
sview_front_end_info
=
list_next
(
itr
)))
{
front_end_ptr
=
sview_front_end_info
->
front_end_ptr
;
/* This means the tree_store changed (added new column
/* get the iter, or find out the list is empty goto add */
or something). */
if
(
!
gtk_tree_model_get_iter
(
model
,
&
iter
,
path
))
{
if
(
last_model
!=
model
)
goto
adding
;
sview_front_end_info
->
iter_set
=
false
;
}
line
=
0
;
if
(
sview_front_end_info
->
iter_set
)
{
while
(
1
)
{
gtk_tree_model_get
(
model
,
/* search for the jobid and check to see if
&
sview_front_end_info
->
iter_ptr
,
it is in the list */
SORTID_NAME
,
&
name
,
-
1
);
gtk_tree_model_get
(
model
,
&
iter
,
SORTID_NAME
,
if
(
strcmp
(
name
,
&
front_end_name
,
-
1
);
sview_front_end_info
->
front_end_name
))
{
if
(
!
strcmp
(
front_end_name
,
front_end_ptr
->
name
))
{
/* Bad pointer */
/* update with new info */
sview_front_end_info
->
iter_set
=
false
;
g_free
(
front_end_name
);
//g_print("bad front_end iter pointer\n");
_update_front_end_record
(
sview_front_end_info
,
GTK_TREE_STORE
(
model
),
&
iter
);
goto
found
;
}
g_free
(
front_end_name
);
line
++
;
if
(
!
gtk_tree_model_iter_next
(
model
,
&
iter
))
{
break
;
}
}
g_free
(
name
);
}
if
(
sview_front_end_info
->
iter_set
)
_update_front_end_record
(
sview_front_end_info
,
GTK_TREE_STORE
(
model
));
else
{
_append_front_end_record
(
sview_front_end_info
,
GTK_TREE_STORE
(
model
));
sview_front_end_info
->
iter_set
=
true
;
}
}
adding:
_append_front_end_record
(
sview_front_end_info
,
GTK_TREE_STORE
(
model
),
&
iter
,
line
);
found:
;
}
}
list_iterator_destroy
(
itr
);
list_iterator_destroy
(
itr
);
if
(
host
)
free
(
host
);
gtk_tree_path_free
(
path
);
/* remove all old front_ends */
remove_old
(
model
,
SORTID_UPDATED
);
return
;
last_model
=
model
;
}
}
static
List
_create_front_end_info_list
(
static
List
_create_front_end_info_list
(
...
@@ -322,6 +317,8 @@ static List _create_front_end_info_list(
...
@@ -322,6 +317,8 @@ static List _create_front_end_info_list(
char
*
upper
=
NULL
;
char
*
upper
=
NULL
;
char
user
[
32
],
time_str
[
32
];
char
user
[
32
],
time_str
[
32
];
static
List
info_list
=
NULL
;
static
List
info_list
=
NULL
;
List
last_list
=
NULL
;
ListIterator
last_list_itr
=
NULL
;
int
i
=
0
;
int
i
=
0
;
sview_front_end_info_t
*
sview_front_end_info_ptr
=
NULL
;
sview_front_end_info_t
*
sview_front_end_info_ptr
=
NULL
;
front_end_info_t
*
front_end_ptr
=
NULL
;
front_end_info_t
*
front_end_ptr
=
NULL
;
...
@@ -330,19 +327,40 @@ static List _create_front_end_info_list(
...
@@ -330,19 +327,40 @@ static List _create_front_end_info_list(
goto
update_color
;
goto
update_color
;
if
(
info_list
)
if
(
info_list
)
list_flush
(
info_list
);
last_list
=
info_list
;
else
info_list
=
list_create
(
_front_end_info_list_del
);
info_list
=
list_create
(
_front_end_info_list_del
);
if
(
!
info_list
)
{
if
(
!
info_list
)
{
g_print
(
"malloc error
\n
"
);
g_print
(
"malloc error
\n
"
);
return
NULL
;
return
NULL
;
}
}
if
(
last_list
)
last_list_itr
=
list_iterator_create
(
last_list
);
for
(
i
=
0
;
i
<
front_end_info_ptr
->
record_count
;
i
++
)
{
for
(
i
=
0
;
i
<
front_end_info_ptr
->
record_count
;
i
++
)
{
front_end_ptr
=
&
(
front_end_info_ptr
->
front_end_array
[
i
]);
front_end_ptr
=
&
(
front_end_info_ptr
->
front_end_array
[
i
]);
sview_front_end_info_ptr
=
xmalloc
(
sizeof
(
sview_front_end_info_t
));
sview_front_end_info_ptr
=
NULL
;
if
(
last_list_itr
)
{
while
((
sview_front_end_info_ptr
=
list_next
(
last_list_itr
)))
{
if
(
!
strcmp
(
sview_front_end_info_ptr
->
front_end_name
,
front_end_ptr
->
name
))
{
list_remove
(
last_list_itr
);
_front_end_info_free
(
sview_front_end_info_ptr
);
break
;
}
}
list_iterator_reset
(
last_list_itr
);
}
if
(
!
sview_front_end_info_ptr
)
sview_front_end_info_ptr
=
xmalloc
(
sizeof
(
sview_front_end_info_t
));
sview_front_end_info_ptr
->
pos
=
i
;
sview_front_end_info_ptr
->
front_end_name
=
front_end_ptr
->
name
;
sview_front_end_info_ptr
->
front_end_ptr
=
front_end_ptr
;
sview_front_end_info_ptr
->
front_end_ptr
=
front_end_ptr
;
sview_front_end_info_ptr
->
color_inx
=
i
%
sview_colors_cnt
;
sview_front_end_info_ptr
->
color_inx
=
i
%
sview_colors_cnt
;
if
(
g_node_info_ptr
)
{
if
(
g_node_info_ptr
)
{
...
@@ -390,6 +408,11 @@ static List _create_front_end_info_list(
...
@@ -390,6 +408,11 @@ static List _create_front_end_info_list(
list_append
(
info_list
,
sview_front_end_info_ptr
);
list_append
(
info_list
,
sview_front_end_info_ptr
);
}
}
if
(
last_list
)
{
list_iterator_destroy
(
last_list_itr
);
list_destroy
(
last_list
);
}
update_color:
update_color:
return
info_list
;
return
info_list
;
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment