Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
I
ipaaca
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
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
Admin message
Looking for advice? Join the
Matrix channel for GitLab users in Bielefeld
!
Show more breadcrumbs
Social Cognitive Systems
ipaaca
Commits
e19d21c5
Commit
e19d21c5
authored
9 years ago
by
Hendrik Buschmeier
Browse files
Options
Downloads
Patches
Plain Diff
ipaaca-python: Fixed a bug when retracting IU not in InputBuffer.
parent
408841b9
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
ipaacalib/python/src/ipaaca/buffer.py
+28
-21
28 additions, 21 deletions
ipaacalib/python/src/ipaaca/buffer.py
with
28 additions
and
21 deletions
ipaacalib/python/src/ipaaca/buffer.py
+
28
−
21
View file @
e19d21c5
...
...
@@ -232,20 +232,22 @@ class InputBuffer(Buffer):
if
category_interests
is
not
None
:
self
.
add_category_interests
(
category_interests
)
def
_get_remote_server
(
self
,
iu
):
def
_get_remote_server
(
self
,
event
):
'''
Return (or create, store and return) a remote server.
'''
_owner
=
None
if
hasattr
(
iu
,
'
owner_name
'
):
_owner
=
iu
.
owner_name
elif
hasattr
(
iu
,
'
writer_name
'
):
_owner
=
iu
.
writer_name
if
_owner
is
not
None
:
if
hasattr
(
event
.
data
,
'
owner_name
'
):
_owner
=
event
.
data
.
owner_name
elif
hasattr
(
event
.
data
,
'
writer_name
'
):
_owner
=
event
.
data
.
writer_name
if
_owner
:
if
_owner
in
self
.
_remote_server_store
:
return
self
.
_remote_server_store
[
_owner
]
# TODO remove the str() when unicode is supported (issue #490)
remote_server
=
rsb
.
createRemoteServer
(
rsb
.
Scope
(
str
(
_owner
)))
self
.
_remote_server_store
[
_owner
]
=
remote_server
return
remote_server
return
remote_server
else
:
return
None
def
_add_category_listener
(
self
,
iu_category
):
'''
Create and store a listener on a specific category.
'''
...
...
@@ -294,9 +296,14 @@ class InputBuffer(Buffer):
del
self
.
_iu_store
[
event
.
data
.
uid
]
else
:
if
event
.
data
.
uid
not
in
self
.
_iu_store
:
if
self
.
_resend_active
:
# send resend request to remote server
self
.
_request_remote_resend
(
event
.
data
)
if
(
self
.
_resend_active
and
not
type_
is
ipaaca_pb2
.
IURetraction
):
# send resend request to remote server, IURetraction is ignored
try
:
self
.
_request_remote_resend
(
event
)
except
ipaaca
.
exception
.
IUResendRequestFailedError
:
LOGGER
.
warning
(
'
Requesting resend for IU {} failed.
'
.
format
(
event
.
data
.
uid
))
else
:
LOGGER
.
warning
(
"
Received an update for an IU which we did not receive before.
"
)
return
...
...
@@ -307,10 +314,6 @@ class InputBuffer(Buffer):
iu
.
_revision
=
event
.
data
.
revision
iu
.
_apply_retraction
()
# for now - just sets the _rectracted flag.
self
.
call_iu_event_handlers
(
event
.
data
.
uid
,
local
=
False
,
event_type
=
ipaaca
.
iu
.
IUEventType
.
RETRACTED
,
category
=
iu
.
category
)
# SPECIAL CASE: allow the handlers (which will need to find the IU
# in the buffer) to operate on the IU - then delete it afterwards!
# FIXME: for now: retracted == deleted! Think about this later
del
(
self
.
_iu_store
[
iu
.
uid
])
else
:
if
event
.
data
.
writer_name
==
self
.
unique_name
:
# Notify only for remotely triggered events;
...
...
@@ -349,13 +352,17 @@ class InputBuffer(Buffer):
else
:
self
.
_remove_category_listener
(
category_interests
)
def
_request_remote_resend
(
self
,
iu
):
remote_server
=
self
.
_get_remote_server
(
iu
)
resend_request
=
ipaaca_pb2
.
IUResendRequest
()
resend_request
.
uid
=
iu
.
uid
# target iu
resend_request
.
hidden_scope_name
=
str
(
self
.
_uuid
)
# hidden category name
remote_revision
=
remote_server
.
requestResend
(
resend_request
)
if
remote_revision
==
0
:
def
_request_remote_resend
(
self
,
event
):
remote_server
=
self
.
_get_remote_server
(
event
)
if
remote_server
:
resend_request
=
ipaaca_pb2
.
IUResendRequest
()
resend_request
.
uid
=
event
.
data
.
uid
# target iu
resend_request
.
hidden_scope_name
=
str
(
self
.
_uuid
)
# hidden category name
remote_revision
=
remote_server
.
requestResend
(
resend_request
)
if
remote_revision
==
0
:
raise
ipaaca
.
exception
.
IUResendRequestFailedError
()
else
:
# Remote server is not known
raise
ipaaca
.
exception
.
IUResendRequestFailedError
()
def
register_handler
(
self
,
handler_function
,
for_event_types
=
None
,
for_categories
=
None
):
...
...
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