Fix slice logic for less-then-frame tsdb overlap
When the tsdb has a last datum that is in the past less then a "frame's worth" of sample steps we need to slice out only the data from the latest frame that doesn't overlap; this fixes that slice logic.. Previously i dunno wth it was doing..incr_update_backup
parent
468cd3a381
commit
112cba43e5
|
@ -208,28 +208,25 @@ def diff_history(
|
|||
|
||||
) -> np.ndarray:
|
||||
|
||||
to_push = array
|
||||
|
||||
if last_tsdb_dt:
|
||||
s_diff = (start_dt - last_tsdb_dt).seconds
|
||||
|
||||
to_push = array[:s_diff]
|
||||
|
||||
# if we detect a partial frame's worth of data
|
||||
# that is new, slice out only that history and
|
||||
# write to shm.
|
||||
if abs(s_diff) < len(array):
|
||||
if (
|
||||
s_diff < 0
|
||||
and abs(s_diff) < len(array)
|
||||
):
|
||||
log.info(
|
||||
f'Pushing partial frame {to_push.size} to shm'
|
||||
)
|
||||
# assert last_tsdb_dt > start_dt
|
||||
# selected = array['time'] > last_tsdb_dt.timestamp()
|
||||
# to_push = array[selected]
|
||||
# return to_push
|
||||
to_push = array[abs(s_diff):]
|
||||
|
||||
return to_push
|
||||
|
||||
else:
|
||||
return array
|
||||
|
||||
|
||||
async def start_backfill(
|
||||
mod: ModuleType,
|
||||
|
@ -248,6 +245,17 @@ async def start_backfill(
|
|||
# back to what is recorded in the tsdb
|
||||
array, start_dt, end_dt = await hist(end_dt=None)
|
||||
|
||||
times = array['time']
|
||||
|
||||
# sample period step size in seconds
|
||||
step_size_s = (
|
||||
pendulum.from_timestamp(times[-1]) -
|
||||
pendulum.from_timestamp(times[-2])
|
||||
).seconds
|
||||
|
||||
# "frame"'s worth of sample period steps in seconds
|
||||
frame_size_s = len(array) * step_size_s
|
||||
|
||||
to_push = diff_history(
|
||||
array,
|
||||
start_dt,
|
||||
|
@ -267,13 +275,6 @@ async def start_backfill(
|
|||
# let caller unblock and deliver latest history frame
|
||||
task_status.started((shm, start_dt, end_dt, bf_done))
|
||||
|
||||
times = array['time']
|
||||
step_size_s = (
|
||||
pendulum.from_timestamp(times[-1]) -
|
||||
pendulum.from_timestamp(times[-2])
|
||||
).seconds
|
||||
frame_size_s = len(to_push) * step_size_s
|
||||
|
||||
if last_tsdb_dt is None:
|
||||
# maybe a better default (they don't seem to define epoch?!)
|
||||
|
||||
|
|
Loading…
Reference in New Issue