mirror of
https://github.com/psy0rz/zfs_autobackup.git
synced 2025-04-13 22:47:12 +03:00
different approach
This commit is contained in:
parent
bf985998b3
commit
ebbc05d52b
115
zfs_autobackup
115
zfs_autobackup
@ -842,68 +842,119 @@ def thin(schedule, snapshots):
|
|||||||
|
|
||||||
# for snapshot in list(reversed(snapshots)):
|
# for snapshot in list(reversed(snapshots)):
|
||||||
#always keep latest
|
#always keep latest
|
||||||
for snapshot in snapshots[:-1]:
|
for snapshot in snapshots:
|
||||||
|
|
||||||
snapshot_time=snapshot
|
snapshot_time=snapshot
|
||||||
age=now-snapshot_time
|
|
||||||
|
|
||||||
keeps=""
|
keeps=""
|
||||||
|
# just store in the correct time blocks, per period-size
|
||||||
for ( period, ttl ) in schedule:
|
for ( period, ttl ) in schedule:
|
||||||
block_nr=int(snapshot_time/period)
|
block_nr=int(snapshot_time/period)
|
||||||
if age<=ttl:
|
if not block_nr in time_blocks[period]:
|
||||||
if not block_nr in time_blocks[period]:
|
time_blocks[period][block_nr]=[]
|
||||||
time_blocks[period][block_nr]=snapshot_time
|
time_blocks[period][block_nr].append(snapshot_time)
|
||||||
keeps=keeps+" ({}days, block{}) ".format(int(period/(3600*24)), block_nr)
|
|
||||||
|
|
||||||
struct=time.localtime(snapshot_time)
|
|
||||||
if keeps:
|
|
||||||
ret.append(snapshot)
|
|
||||||
print("{} {} {}days".format(time.strftime("%Y-%m-%d %H:%M:%S",struct),keeps,int(age/(3600*24))))
|
|
||||||
# else:
|
|
||||||
# print("{}".format(time.strftime("%Y-%m-%d %H:%M:%S",struct)))
|
|
||||||
|
|
||||||
|
|
||||||
|
keep=set()
|
||||||
|
|
||||||
|
#now get the oldest one within the ttl, per block
|
||||||
|
for ( period, ttl ) in schedule:
|
||||||
|
for ( block_nr, snapshots ) in time_blocks[period].items():
|
||||||
|
for snapshot_time in sorted(snapshots):
|
||||||
|
age=now-snapshot_time
|
||||||
|
if age<ttl:
|
||||||
|
keep.add(snapshot_time)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
return (sorted(keep))
|
||||||
|
|
||||||
|
|
||||||
# return(list(reversed(ret)))
|
# return(list(reversed(ret)))
|
||||||
|
|
||||||
#always keep latest!
|
#always keep latest!
|
||||||
# if not keeps and snapshots:
|
# if not keeps and snapshots:
|
||||||
# ret.append(snapshots[:-1])
|
# # ret.append(snapshots[:-1])
|
||||||
|
# struct=time.localtime(snapshot_time)
|
||||||
|
# if keeps:
|
||||||
|
# ret.append(snapshot)
|
||||||
|
# print("{} {} {}days".format(time.strftime("%Y-%m-%d %H:%M:%S",struct),keeps,int(age/(3600*24))))
|
||||||
|
# # else:
|
||||||
|
# # print("{}".format(time.strftime("%Y-%m-%d %H:%M:%S",struct)))
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# p(time_blocks)
|
||||||
|
|
||||||
ret.append(snapshots[-1])
|
# ret.append(snapshots[-1])
|
||||||
struct=time.localtime(snapshots[-1])
|
# struct=time.localtime(snapshots[-1])
|
||||||
print("{}".format(time.strftime("%Y-%m-%d %H:%M:%S",struct)))
|
# print("{}".format(time.strftime("%Y-%m-%d %H:%M:%S",struct)))
|
||||||
return(ret)
|
# return(ret)
|
||||||
|
|
||||||
# snapshots=range(now-400*24*3600, now, 24*3600)
|
# snapshots=range(now-400*24*3600, now, 24*3600)
|
||||||
|
|
||||||
schedule=[
|
schedule=[
|
||||||
#every ... keep for ...
|
#every ... keep for ...
|
||||||
( 1*time_blocks['days'] , 7 * time_blocks['days'] ),
|
( 1*time_blocks['days'] , 4 * time_blocks['days'] ),
|
||||||
( 1*time_blocks['weeks'] , 4 * time_blocks['weeks'] ),
|
( 1*time_blocks['weeks'] , 4 * time_blocks['weeks'] ),
|
||||||
( 1*time_blocks['months'], (12 * time_blocks['months']) ),
|
( 1*time_blocks['months'], (6 * time_blocks['months']) ),
|
||||||
( 1*time_blocks['years'], 2 * time_blocks['years'] ),
|
( 1*time_blocks['years'], 1 * time_blocks['years'] ),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import random
|
import random
|
||||||
msnapshots=[]
|
|
||||||
|
|
||||||
while True:
|
|
||||||
print("#################### {}".format(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(now))))
|
|
||||||
|
|
||||||
# if random.random()>0.5:
|
|
||||||
msnapshots.append(now)
|
|
||||||
msnapshots=thin(schedule, msnapshots)
|
|
||||||
|
|
||||||
sys.stdin.readline()
|
|
||||||
now=now+random.randint(0,80000)
|
|
||||||
# msnapshots.insert(0,now)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def printsnap(s):
|
||||||
|
age=now-s
|
||||||
|
struct=time.localtime(s)
|
||||||
|
return("{} {}days".format(time.strftime("%Y-%m-%d %H:%M:%S",struct),int(age/(3600*24))))
|
||||||
|
|
||||||
|
|
||||||
|
def test():
|
||||||
|
global now
|
||||||
|
a=[]
|
||||||
|
b=[]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print("#################### {}".format(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(now))))
|
||||||
|
|
||||||
|
# if random.random()>0.5:
|
||||||
|
a.append(now)
|
||||||
|
a=thin(schedule,a)
|
||||||
|
# b.append(now)
|
||||||
|
# b=thin(schedule,a, oldest=False)
|
||||||
|
b=[]
|
||||||
|
|
||||||
|
|
||||||
|
for count in range(0,max(len(a), len(b))):
|
||||||
|
sa=""
|
||||||
|
if count<len(a):
|
||||||
|
sa=printsnap(a[count])
|
||||||
|
|
||||||
|
sb=""
|
||||||
|
if count<len(b):
|
||||||
|
sb=printsnap(b[count])
|
||||||
|
|
||||||
|
print("{:15} | {:15}".format(sa,sb))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# for s in msnapshots:
|
||||||
|
# age=now-s
|
||||||
|
# struct=time.localtime(s)
|
||||||
|
# print("{} {}days".format(time.strftime("%Y-%m-%d %H:%M:%S",struct),int(age/(3600*24))))
|
||||||
|
|
||||||
|
|
||||||
|
sys.stdin.readline()
|
||||||
|
now=now+random.randint(0,80000)
|
||||||
|
# msnapshots.insert(0,now)
|
||||||
|
|
||||||
|
test()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user