所以我们的代码已经工作了一段时间,除了本月。
我们做了一些更改,但我没有参与更改,但我负责修复错误 现在最奇怪的是,在运行此代码的每个其他python进程中,它只在一个进程中断开,但它完全相同的代码只是不同的数据库表。现在我的第一个想法是数据库中的数据必定是错误的,但是代码的工作方式是从中间数据库获取样本并将该月数据写入oracle数据库中的历史表。
问题是由于某种原因它被困在6月。所有进程的功能几乎相同,因此7月份中间数据库中的样本表中的数据不在7月的历史数据库中。但是,请注意所有其他进程的功能相同,因此当他们第一次运行7月时,他们就不会有历史数据。
cursor.execute("alter session set time_zone='UTC'")
cursor.execute("""select nvl(to_char(max(datetime),'YYYY-MM-DD HH24:MI:SS'),'0000-00-00 00:00:00'),
to_char(trunc(sysdate,'MM') - 1,'YYYY-MM'),
to_char(sysdate,'YYYY-MM')
from vm_storage_histories""")
last_date,last_month,current_month = cursor.fetchone()
if current_month == last_date[:7]: # Start the summarization for the current month
start_date = current_month + '-01 00:00:00'
else:
if last_date == '0000-00-00 00:00:00':
try:
pg_cursor.execute("select to_char(min(datetime),'YYYY-MM-DD HH24:MI:SS') from storage_samples")
start_date, = pg_cursor.fetchone()
except:
postgres.rollback()
start_date = '1970-01-01 00:00:00'
else:
start_date = last_month + '-01 00:00:00'
try: # Purge the old data
cursor.execute("delete from vm_storage_histories where datetime >= to_timestamp('%s','YYYY-MM-DD HH24:MI:SS')" % start_date)
except:
pass # if there are no rows, that's ok
stmt = """select distinct to_char(datetime,'YYYY-MM'),
datastore_id,
vm_id
from storage_samples
where datetime >= to_timestamp('%s','YYYY-MM-DD HH24:MI:SS')""" % start_date
pg_cursor.execute(stmt)
然而,对我来说,这个代码看起来似乎永远不会在下个月插入,因为它已经工作并且它实际上是从工作副本中复制出来的,但它不适用于这个过程有道理。
它唯一可能是数据,但程序被编写为始终运行并插入下个月的数据令人困惑。