state: add workaround for VACUUM bug on python 3.6 (#1315)

Fixes #1314

Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
Ruslan Kuprieiev
2018-11-11 23:11:30 +02:00
committed by GitHub
parent 4d03f69a86
commit fb65bb3967
2 changed files with 25 additions and 1 deletions
+7 -1
View File
@@ -190,6 +190,12 @@ class State(object):
else:
raise
def _vacuum(self):
# NOTE: see https://bugs.python.org/issue28518
self.db.isolation_level = None
self._execute("VACUUM")
self.db.isolation_level = ''
def dump(self):
assert self.db is not None
@@ -213,7 +219,7 @@ class State(object):
self.STATE_TABLE,
delete))
self._execute("VACUUM")
self._vacuum()
cmd = "SELECT COUNT(*) FROM {}"
+18
View File
@@ -5,6 +5,7 @@ import time
from dvc.system import System
from dvc.state import State
from dvc.utils import file_md5
from dvc.main import main
from tests.basic_env import TestDvc
@@ -39,3 +40,20 @@ class TestState(TestDvc):
entry_md5 = state.update(path)
self.assertEqual(entry_md5, md5)
class TestStateOverflow(TestDvc):
def test(self):
# NOTE: trying to add more entries than state can handle,
# to see if it will clean up and vacuum successfully
ret = main(['config', 'state.row_limit', '10'])
self.assertEqual(ret, 0)
dname = 'dir'
os.mkdir(dname)
for i in range(20):
with open(os.path.join(dname, str(i)), 'w+') as fobj:
fobj.write(str(i))
ret = main(['add', 'dir'])
self.assertEqual(ret, 0)