diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ExperimentBasedArchivingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ExperimentBasedArchivingTask.java index 94ae0bf89a8dd504ef44241cced13848a62aad7f..e017b5c8dff1909ad633968165da61d251823b16 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ExperimentBasedArchivingTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ExperimentBasedArchivingTask.java @@ -82,7 +82,7 @@ public class ExperimentBasedArchivingTask implements IDataStoreLockingMaintenanc static final String FREE_SPACE_PROVIDER_PREFIX = "free-space-provider."; - static final String DATA_SET_SIZE_PREFIX = "data-set-size."; + static final String DATA_SET_SIZE_PREFIX = "data-set-size-in-KB."; static final String DEFAULT_DATA_SET_TYPE = "DEFAULT"; @@ -161,7 +161,7 @@ public class ExperimentBasedArchivingTask implements IDataStoreLockingMaintenanc if (ClassUtils.hasConstructor(clazz, properties)) { - return ClassUtils.create(IFreeSpaceProvider.class, clazz, properties); + return ClassUtils.create(IFreeSpaceProvider.class, clazz, providerProps); } else { diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProvider.java index 561a9975a37bd6e5a6712c30722ac66e008256e0..f17f8606856604d9558ca2c532a8193bdbfafc6c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProvider.java @@ -66,8 +66,7 @@ public class PostgresPlusFileSystemFreeSpaceProvider implements IFreeSpaceProvid + " (SELECT relname, (SELECT free_space FROM pgstattuple(relid)) " + " AS free_space FROM pg_catalog.pg_statio_user_tables);"; - private static final String SELECT_FREE_SPACE_QUERY = CREATE_TMP_FREE_SPACE_TABLE - + " SELECT sum(free_space) FROM freespace;"; + private static final String SELECT_FREE_SPACE_QUERY = "SELECT sum(free_space) FROM freespace;"; private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, PostgresPlusFileSystemFreeSpaceProvider.class); @@ -95,7 +94,7 @@ public class PostgresPlusFileSystemFreeSpaceProvider implements IFreeSpaceProvid public long freeSpaceKb(HostAwareFile path) throws IOException { - long dataSourceFreeSpace = calculateDataSourceFreeSpace(); + long dataSourceFreeSpace = calculateDataSourceFreeSpace() / 1024L; long fsFreeSpace = fileSystemFreeSpaceProvider.freeSpaceKb(path); return dataSourceFreeSpace + fsFreeSpace; } @@ -129,8 +128,17 @@ public class PostgresPlusFileSystemFreeSpaceProvider implements IFreeSpaceProvid private long calculateFreeSpace(Connection connection) throws SQLException { - ResultSet result = connection.createStatement().executeQuery(SELECT_FREE_SPACE_QUERY); - return result.getLong(1); + connection.setAutoCommit(false); + try + { + connection.createStatement().execute(CREATE_TMP_FREE_SPACE_TABLE); + ResultSet result = connection.createStatement().executeQuery(SELECT_FREE_SPACE_QUERY); + result.next(); + return result.getLong(1); + } finally + { + connection.setAutoCommit(true); + } } private Connection createConnection() throws SQLException diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProviderTest.java index 3feb155ffc24cbb6893f5661ac0a7502633acfa3..333528a0542e0a37c243a4cc731e619be9c44b1c 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProviderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/PostgresPlusFileSystemFreeSpaceProviderTest.java @@ -111,7 +111,7 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit { provider = createProvider(false); - final long postgresFreeSpace = 1000L; + final long postgresFreeSpace = 4098L; final long fsFreeSpace = 5001L; prepareFreeSpaceExpectations(postgresFreeSpace, fsFreeSpace); @@ -119,7 +119,7 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit HostAwareFile file = new HostAwareFile(workDir); long totalFreeSpace = provider.freeSpaceKb(file); - assertEquals(fsFreeSpace + postgresFreeSpace, totalFreeSpace); + assertEquals(5005, totalFreeSpace); } @Test @@ -127,7 +127,7 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit { provider = createProvider(true); - final long postgresFreeSpace = 1000L; + final long postgresFreeSpace = 4098L; final long fsFreeSpace = 5001L; prepareVacuumExpectations(); prepareFreeSpaceExpectations(postgresFreeSpace, fsFreeSpace); @@ -136,7 +136,7 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit HostAwareFile file = new HostAwareFile(workDir); long totalFreeSpace = provider.freeSpaceKb(file); - assertEquals(fsFreeSpace + postgresFreeSpace, totalFreeSpace); + assertEquals(5005, totalFreeSpace); } private void prepareVacuumExpectations() throws Exception @@ -159,7 +159,14 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit context.checking(new Expectations() { { - Statement statement = context.mock(Statement.class, "freeSpaceStatement"); + one(connection).setAutoCommit(false); + + Statement statement = context.mock(Statement.class, "tempTableStatement"); + one(connection).createStatement(); + will(returnValue(statement)); + one(statement).execute(with(any(String.class))); + + statement = context.mock(Statement.class, "freeSpaceStatement"); one(connection).createStatement(); will(returnValue(statement)); @@ -168,9 +175,12 @@ public class PostgresPlusFileSystemFreeSpaceProviderTest extends AssertJUnit ResultSet rs = context.mock(ResultSet.class); will(returnValue(rs)); + one(rs).next(); one(rs).getLong(1); will(returnValue(freeSpace)); + one(connection).setAutoCommit(true); + one(fsFreeSpaceProvider).freeSpaceKb(with(any(HostAwareFile.class))); will(returnValue(fsFreeSpace)); }