Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
engine
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
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
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
AURA
engine
Commits
72b07356
Commit
72b07356
authored
4 years ago
by
David Trattnig
Browse files
Options
Downloads
Patches
Plain Diff
Handling for existing but dead commands. #55
parent
1e9f5390
No related branches found
No related tags found
No related merge requests found
Pipeline
#894
passed
4 years ago
Stage: test
Changes
1
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/core/control.py
+47
-22
47 additions, 22 deletions
src/core/control.py
with
47 additions
and
22 deletions
src/core/control.py
+
47
−
22
View file @
72b07356
...
@@ -225,18 +225,21 @@ class EngineExecutor(Timer):
...
@@ -225,18 +225,21 @@ class EngineExecutor(Timer):
self
.
dt
=
datetime
.
now
()
+
timedelta
(
seconds
=
diff
)
self
.
dt
=
datetime
.
now
()
+
timedelta
(
seconds
=
diff
)
self
.
func
=
func
self
.
func
=
func
self
.
param
=
param
self
.
param
=
param
self
.
update_store
()
is_stored
=
self
.
update_store
()
if
diff
<
0
:
if
not
is_stored
:
msg
=
f
"
Timer
'
{
self
.
timer_id
}
'
is due in the past. Executing immediately ...
"
self
.
logger
.
info
(
SU
.
red
(
"
Timer
'
{self.timer_id}
'
omitted because it
'
s already existing but dead
"
))
self
.
logger
.
error
(
SU
.
red
(
msg
))
self
.
exec_now
()
elif
diff
==
0
:
self
.
logger
.
info
(
f
"
Timer
'
{
self
.
timer_id
}
'
to be executed immediately
"
)
self
.
exec_now
()
else
:
else
:
self
.
exec_timed
()
if
diff
<
0
:
self
.
start
()
msg
=
f
"
Timer
'
{
self
.
timer_id
}
'
is due in the past. Executing immediately ...
"
self
.
logger
.
error
(
SU
.
red
(
msg
))
self
.
exec_now
()
elif
diff
==
0
:
self
.
logger
.
info
(
f
"
Timer
'
{
self
.
timer_id
}
'
to be executed immediately
"
)
self
.
exec_now
()
else
:
self
.
exec_timed
()
self
.
start
()
def
wait_for_parent
(
self
):
def
wait_for_parent
(
self
):
...
@@ -273,18 +276,34 @@ class EngineExecutor(Timer):
...
@@ -273,18 +276,34 @@ class EngineExecutor(Timer):
def
update_store
(
self
):
def
update_store
(
self
):
"""
"""
Adds the instance to the store and cancels any previously existing commands.
Adds the instance to the store and cancels any previously existing commands.
If a timer with the given ID is already existing but also already executed,
then it is not added to the store. In such case the method returns `False`.
Returns:
(Boolean): True if the timer has been added to the store
"""
"""
existing_command
=
None
existing_command
=
None
if
self
.
timer_id
in
EngineExecutor
.
timer_store
:
if
self
.
timer_id
in
EngineExecutor
.
timer_store
:
existing_command
=
EngineExecutor
.
timer_store
[
self
.
timer_id
]
existing_command
=
EngineExecutor
.
timer_store
[
self
.
timer_id
]
if
existing_command
:
if
existing_command
:
self
.
logger
.
debug
(
f
"
Cancelling previous timer with ID:
{
self
.
timer_id
}
"
)
existing_command
.
cancel
()
# Check if existing timer has been executed already -> don't update
if
existing_command
.
child_timer
:
if
not
existing_command
.
is_alive
():
self
.
logger
.
debug
(
f
"
Cancelling child timer with ID:
{
existing_command
.
child_timer
.
timer_id
}
"
)
self
.
logger
.
debug
(
f
"
Existing previous timer with ID:
{
self
.
timer_id
}
. Don
'
t update.
"
)
return
False
# Still waiting for execution -> update
else
:
self
.
logger
.
debug
(
f
"
Cancelling previous timer with ID:
{
self
.
timer_id
}
"
)
existing_command
.
cancel
()
if
existing_command
.
child_timer
:
self
.
logger
.
debug
(
f
"
Cancelling child timer with ID:
{
existing_command
.
child_timer
.
timer_id
}
"
)
EngineExecutor
.
timer_store
[
self
.
timer_id
]
=
self
EngineExecutor
.
timer_store
[
self
.
timer_id
]
=
self
self
.
logger
.
debug
(
f
"
Created command timer with ID:
{
self
.
timer_id
}
"
)
self
.
logger
.
debug
(
f
"
Created command timer with ID:
{
self
.
timer_id
}
"
)
return
True
def
is_alive
(
self
):
def
is_alive
(
self
):
...
@@ -306,13 +325,13 @@ class EngineExecutor(Timer):
...
@@ -306,13 +325,13 @@ class EngineExecutor(Timer):
@staticmethod
@staticmethod
def
remove_stale_timers
():
def
remove_stale_timers
():
"""
"""
Removes timers from store which have been executed and are older than
one
hour.
Removes timers from store which have been executed and are older than
5
hour
s
.
"""
"""
timers
=
EngineExecutor
.
timer_store
.
values
()
timers
=
EngineExecutor
.
timer_store
.
values
()
del_keys
=
[]
del_keys
=
[]
for
timer
in
timers
:
for
timer
in
timers
:
if
timer
.
dt
<
datetime
.
now
()
-
timedelta
(
seconds
=
3600
):
if
timer
.
dt
<
datetime
.
now
()
-
timedelta
(
hours
=
5
):
if
not
timer
.
child_timer
or
(
timer
.
child_timer
and
not
timer
.
child_timer
.
is_alive
()):
if
not
timer
.
child_timer
or
(
timer
.
child_timer
and
not
timer
.
child_timer
.
is_alive
()):
timer
.
logger
.
debug
(
f
"
Removing already executed timer with ID:
{
timer
.
timer_id
}
"
)
timer
.
logger
.
debug
(
f
"
Removing already executed timer with ID:
{
timer
.
timer_id
}
"
)
del_keys
.
append
(
timer
.
timer_id
)
del_keys
.
append
(
timer
.
timer_id
)
...
@@ -327,16 +346,22 @@ class EngineExecutor(Timer):
...
@@ -327,16 +346,22 @@ class EngineExecutor(Timer):
Prints a list of active timers and inactive timer not older than one hour.
Prints a list of active timers and inactive timer not older than one hour.
"""
"""
timers
=
EngineExecutor
.
timer_store
.
values
()
timers
=
EngineExecutor
.
timer_store
.
values
()
msg
=
"
\n
[ ENGINE COMMAND QUEUE ]
\n
"
msg
=
SU
.
blue
(
"
\n
[ ENGINE COMMAND QUEUE ]
\n
"
)
EngineExecutor
.
remove_stale_timers
()
EngineExecutor
.
remove_stale_timers
()
if
not
timers
:
if
not
timers
:
msg
+=
"
None available!
\n
"
msg
+=
"
\n
None available!
\n
"
else
:
else
:
for
timer
in
timers
:
for
timer
in
timers
:
if
not
timer
.
parent_timer
:
if
not
timer
.
parent_timer
:
msg
+=
f
"
=>
{
str
(
timer
)
}
\n
"
line
=
f
"
=>
{
str
(
timer
)
}
\n
"
#
if
timer
.
is_alive
():
line
=
SU
.
green
(
line
)
msg
+=
line
if
timer
.
child_timer
:
if
timer
.
child_timer
:
msg
+=
f
"
=>
{
str
(
timer
.
child_timer
)
}
\n
"
line
=
f
"
=>
{
str
(
timer
.
child_timer
)
}
\n
"
if
timer
.
child_timer
.
is_alive
():
line
=
SU
.
green
(
line
)
msg
+=
line
EngineExecutor
.
logger
.
info
(
msg
+
"
\n
"
)
EngineExecutor
.
logger
.
info
(
msg
+
"
\n
"
)
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