Add reset stream method.
This commit is contained in:
parent
ca0d09f7bc
commit
2d47fa6f6e
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
commit ca0d09f7bc017ef9e372ae29a0c19bf20b68aca5
|
||||
Author: Monsyne Dragon <mdragon@rackspace.com>
|
||||
Date: Mon Sep 8 19:57:24 2014 +0000
|
||||
|
||||
Save newly generated events from pipeline
|
||||
|
||||
Save newly created events from pipeline run if pipeline commits.
|
||||
Refactor trigger manager api wart, move save_event call into add_event
|
||||
to make add_event and add_notification symmetric.
|
||||
|
||||
commit 0c619c133d3c248d62a2c5f6441d4fae0bf7042a
|
||||
Author: Monsyne Dragon <mdragon@rackspace.com>
|
||||
Date: Sun Sep 7 04:07:20 2014 +0000
|
||||
|
@ -71,6 +71,34 @@ TEST_DATA = [
|
||||
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||
state=int(models.StreamState.active),
|
||||
state_serial_no=0),
|
||||
dict(id=5, first_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
last_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
name='reset_test_trigger',
|
||||
fire_timestamp=datetime.datetime(2014,8,11,6,0,0,42),
|
||||
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||
state=int(models.StreamState.error),
|
||||
state_serial_no=0),
|
||||
dict(id=6, first_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
last_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
name='reset_test_trigger',
|
||||
fire_timestamp=datetime.datetime(2014,8,11,6,0,0,42),
|
||||
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||
state=int(models.StreamState.expire_error),
|
||||
state_serial_no=0),
|
||||
dict(id=7, first_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
last_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
name='reset_test_trigger',
|
||||
fire_timestamp=datetime.datetime(2014,8,11,6,0,0,42),
|
||||
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||
state=int(models.StreamState.retry_fire),
|
||||
state_serial_no=0),
|
||||
dict(id=8, first_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
last_event=datetime.datetime(2014,8,1,15,25,45,453201),
|
||||
name='reset_test_trigger',
|
||||
fire_timestamp=datetime.datetime(2014,8,11,6,0,0,42),
|
||||
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||
state=int(models.StreamState.retry_expire),
|
||||
state_serial_no=0),
|
||||
]},
|
||||
{'streamevent': [
|
||||
dict(stream_id=1, event_id=3),
|
||||
@ -351,10 +379,11 @@ class TestDB(unittest.TestCase):
|
||||
def test_get_ready_streams_fire(self):
|
||||
current_time = datetime.datetime(2014,8,12,0,0,0,42)
|
||||
streams = self.db.get_ready_streams(10, current_time)
|
||||
self.assertEqual(len(streams), 2)
|
||||
self.assertEqual(len(streams), 3)
|
||||
stream_ids = [stream.id for stream in streams]
|
||||
self.assertIn(3, stream_ids)
|
||||
self.assertIn(4, stream_ids)
|
||||
self.assertIn(7, stream_ids)
|
||||
|
||||
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
||||
streams = self.db.get_ready_streams(10, current_time)
|
||||
@ -369,12 +398,13 @@ class TestDB(unittest.TestCase):
|
||||
def test_get_ready_streams_expire(self):
|
||||
current_time = datetime.datetime(2014,8,17,0,0,0,42)
|
||||
streams = self.db.get_ready_streams(10, current_time, expire=True)
|
||||
self.assertEqual(len(streams), 4)
|
||||
self.assertEqual(len(streams), 5)
|
||||
stream_ids = [stream.id for stream in streams]
|
||||
self.assertIn(1, stream_ids)
|
||||
self.assertIn(2, stream_ids)
|
||||
self.assertIn(3, stream_ids)
|
||||
self.assertIn(4, stream_ids)
|
||||
self.assertIn(8, stream_ids)
|
||||
|
||||
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
||||
streams = self.db.get_ready_streams(10, current_time, expire=True)
|
||||
@ -399,3 +429,13 @@ class TestDB(unittest.TestCase):
|
||||
self.db.set_stream_state(stream, models.StreamState.firing)
|
||||
with self.assertRaises(db.LockError):
|
||||
self.db.set_stream_state(stream, models.StreamState.firing)
|
||||
|
||||
def test_reset_stream_fire(self):
|
||||
stream = self.db.get_stream_by_id(5)
|
||||
stream = self.db.reset_stream(stream)
|
||||
self.assertEqual(stream.state, models.StreamState.retry_fire)
|
||||
|
||||
def test_reset_stream_expire(self):
|
||||
stream = self.db.get_stream_by_id(6)
|
||||
stream = self.db.reset_stream(stream)
|
||||
self.assertEqual(stream.state, models.StreamState.retry_expire)
|
||||
|
@ -185,7 +185,12 @@ class DBInterface(object):
|
||||
@sessioned
|
||||
def get_ready_streams(self, batch_size, current_time, expire=False, session=None):
|
||||
q = session.query(models.Stream)
|
||||
q = q.filter(models.Stream.state == int(models.StreamState.active))
|
||||
if expire:
|
||||
states = (int(models.StreamState.active), int(models.StreamState.retry_expire))
|
||||
else:
|
||||
states = (int(models.StreamState.active), int(models.StreamState.retry_fire))
|
||||
|
||||
q = q.filter(models.Stream.state.in_(states))
|
||||
if expire:
|
||||
q = q.filter(models.Stream.expire_timestamp < current_time)
|
||||
else:
|
||||
@ -205,3 +210,10 @@ class DBInterface(object):
|
||||
if ct != 1:
|
||||
raise LockError("Optimistic Lock failed!")
|
||||
return self.get_stream_by_id(stream_id)
|
||||
|
||||
def reset_stream(self, stream):
|
||||
if stream.state == models.StreamState.error:
|
||||
return self.set_stream_state(stream, models.StreamState.retry_fire)
|
||||
if stream.state == models.StreamState.expire_error:
|
||||
return self.set_stream_state(stream, models.StreamState.retry_expire)
|
||||
return stream
|
||||
|
@ -39,6 +39,8 @@ class StreamState(IntEnum):
|
||||
error = 4
|
||||
expire_error = 5
|
||||
completed = 6
|
||||
retry_fire = 7
|
||||
retry_expire = 8
|
||||
|
||||
|
||||
class DBException(Exception):
|
||||
|
Loading…
x
Reference in New Issue
Block a user