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
|
commit 0c619c133d3c248d62a2c5f6441d4fae0bf7042a
|
||||||
Author: Monsyne Dragon <mdragon@rackspace.com>
|
Author: Monsyne Dragon <mdragon@rackspace.com>
|
||||||
Date: Sun Sep 7 04:07:20 2014 +0000
|
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),
|
expire_timestamp=datetime.datetime(2014,8,16,0,0,0,42),
|
||||||
state=int(models.StreamState.active),
|
state=int(models.StreamState.active),
|
||||||
state_serial_no=0),
|
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': [
|
{'streamevent': [
|
||||||
dict(stream_id=1, event_id=3),
|
dict(stream_id=1, event_id=3),
|
||||||
|
@ -351,10 +379,11 @@ class TestDB(unittest.TestCase):
|
||||||
def test_get_ready_streams_fire(self):
|
def test_get_ready_streams_fire(self):
|
||||||
current_time = datetime.datetime(2014,8,12,0,0,0,42)
|
current_time = datetime.datetime(2014,8,12,0,0,0,42)
|
||||||
streams = self.db.get_ready_streams(10, current_time)
|
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]
|
stream_ids = [stream.id for stream in streams]
|
||||||
self.assertIn(3, stream_ids)
|
self.assertIn(3, stream_ids)
|
||||||
self.assertIn(4, stream_ids)
|
self.assertIn(4, stream_ids)
|
||||||
|
self.assertIn(7, stream_ids)
|
||||||
|
|
||||||
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
||||||
streams = self.db.get_ready_streams(10, current_time)
|
streams = self.db.get_ready_streams(10, current_time)
|
||||||
|
@ -369,12 +398,13 @@ class TestDB(unittest.TestCase):
|
||||||
def test_get_ready_streams_expire(self):
|
def test_get_ready_streams_expire(self):
|
||||||
current_time = datetime.datetime(2014,8,17,0,0,0,42)
|
current_time = datetime.datetime(2014,8,17,0,0,0,42)
|
||||||
streams = self.db.get_ready_streams(10, current_time, expire=True)
|
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]
|
stream_ids = [stream.id for stream in streams]
|
||||||
self.assertIn(1, stream_ids)
|
self.assertIn(1, stream_ids)
|
||||||
self.assertIn(2, stream_ids)
|
self.assertIn(2, stream_ids)
|
||||||
self.assertIn(3, stream_ids)
|
self.assertIn(3, stream_ids)
|
||||||
self.assertIn(4, stream_ids)
|
self.assertIn(4, stream_ids)
|
||||||
|
self.assertIn(8, stream_ids)
|
||||||
|
|
||||||
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
current_time = datetime.datetime(2014,8,10,12,0,0,42)
|
||||||
streams = self.db.get_ready_streams(10, current_time, expire=True)
|
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)
|
self.db.set_stream_state(stream, models.StreamState.firing)
|
||||||
with self.assertRaises(db.LockError):
|
with self.assertRaises(db.LockError):
|
||||||
self.db.set_stream_state(stream, models.StreamState.firing)
|
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
|
@sessioned
|
||||||
def get_ready_streams(self, batch_size, current_time, expire=False, session=None):
|
def get_ready_streams(self, batch_size, current_time, expire=False, session=None):
|
||||||
q = session.query(models.Stream)
|
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:
|
if expire:
|
||||||
q = q.filter(models.Stream.expire_timestamp < current_time)
|
q = q.filter(models.Stream.expire_timestamp < current_time)
|
||||||
else:
|
else:
|
||||||
|
@ -205,3 +210,10 @@ class DBInterface(object):
|
||||||
if ct != 1:
|
if ct != 1:
|
||||||
raise LockError("Optimistic Lock failed!")
|
raise LockError("Optimistic Lock failed!")
|
||||||
return self.get_stream_by_id(stream_id)
|
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
|
error = 4
|
||||||
expire_error = 5
|
expire_error = 5
|
||||||
completed = 6
|
completed = 6
|
||||||
|
retry_fire = 7
|
||||||
|
retry_expire = 8
|
||||||
|
|
||||||
|
|
||||||
class DBException(Exception):
|
class DBException(Exception):
|
||||||
|
|
Loading…
Reference in New Issue