Skip to content

Commit

Permalink
WAL max size limit was restored. Free space detection bug was fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
laa committed Feb 5, 2015
1 parent cc38e1f commit b23efd9
Show file tree
Hide file tree
Showing 10 changed files with 206 additions and 116 deletions.
Expand Up @@ -118,9 +118,8 @@ public enum OGlobalConfiguration {


WAL_MAX_SEGMENT_SIZE("storage.wal.maxSegmentSize", "Maximum size of single. WAL segment in megabytes.", Integer.class, 128), WAL_MAX_SEGMENT_SIZE("storage.wal.maxSegmentSize", "Maximum size of single. WAL segment in megabytes.", Integer.class, 128),


WAL_MAX_SIZE("storage.wal.maxSize", "Supposed, maximum size of WAL on disk in megabytes. This size may be more or less. " WAL_MAX_SIZE("storage.wal.maxSize", "Supposed, maximum size of WAL on disk in megabytes. This size may be more or less. ",
+ "This parameter is used to calculate required free disk space, if we will have less free" Integer.class, 8 * 1024),
+ " disk space then required database will work in read only mode.", Integer.class, 4 * 1024),


WAL_COMMIT_TIMEOUT("storage.wal.commitTimeout", "Maximum interval between WAL commits (in ms.)", Integer.class, 1000), WAL_COMMIT_TIMEOUT("storage.wal.commitTimeout", "Maximum interval between WAL commits (in ms.)", Integer.class, 1000),


Expand Down
Expand Up @@ -20,10 +20,9 @@
package com.orientechnologies.orient.core.index.hashindex.local.cache; package com.orientechnologies.orient.core.index.hashindex.local.cache;


import com.orientechnologies.orient.core.command.OCommandOutputListener; import com.orientechnologies.orient.core.command.OCommandOutputListener;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.ODirtyPage; import com.orientechnologies.orient.core.storage.impl.local.OLowDiskSpaceListener;


import java.io.IOException; import java.io.IOException;
import java.util.Set;


/** /**
* This class is heart of OrientDB storage model it presents disk backed data cache which works with direct memory. * This class is heart of OrientDB storage model it presents disk backed data cache which works with direct memory.
Expand Down Expand Up @@ -120,9 +119,9 @@ public interface ODiskCache {


void unlock() throws IOException; void unlock() throws IOException;


void addLowDiskSpaceListener(OWOWCache.LowDiskSpaceListener listener); void addLowDiskSpaceListener(OLowDiskSpaceListener listener);


void removeLowDiskSpaceListener(OWOWCache.LowDiskSpaceListener listener); void removeLowDiskSpaceListener(OLowDiskSpaceListener listener);


long getUsedMemory(); long getUsedMemory();


Expand Down
Expand Up @@ -32,9 +32,9 @@
import com.orientechnologies.orient.core.config.OGlobalConfiguration; import com.orientechnologies.orient.core.config.OGlobalConfiguration;
import com.orientechnologies.orient.core.exception.OAllCacheEntriesAreUsedException; import com.orientechnologies.orient.core.exception.OAllCacheEntriesAreUsedException;
import com.orientechnologies.orient.core.exception.OStorageException; import com.orientechnologies.orient.core.exception.OStorageException;
import com.orientechnologies.orient.core.storage.impl.local.OLowDiskSpaceListener;
import com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage; import com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.base.ODurablePage; import com.orientechnologies.orient.core.storage.impl.local.paginated.base.ODurablePage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.ODirtyPage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OWriteAheadLog; import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OWriteAheadLog;


import java.io.IOException; import java.io.IOException;
Expand Down Expand Up @@ -628,12 +628,12 @@ public boolean isOpen(long fileId) {
} }


@Override @Override
public void addLowDiskSpaceListener(OWOWCache.LowDiskSpaceListener listener) { public void addLowDiskSpaceListener(OLowDiskSpaceListener listener) {
writeCache.addLowDiskSpaceListener(listener); writeCache.addLowDiskSpaceListener(listener);
} }


@Override @Override
public void removeLowDiskSpaceListener(OWOWCache.LowDiskSpaceListener listener) { public void removeLowDiskSpaceListener(OLowDiskSpaceListener listener) {
writeCache.removeLowDiskSpaceListener(listener); writeCache.removeLowDiskSpaceListener(listener);
} }


Expand Down
Expand Up @@ -34,9 +34,10 @@
import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.serialization.serializer.binary.OBinarySerializerFactory; import com.orientechnologies.orient.core.serialization.serializer.binary.OBinarySerializerFactory;
import com.orientechnologies.orient.core.storage.fs.OFileClassic; import com.orientechnologies.orient.core.storage.fs.OFileClassic;
import com.orientechnologies.orient.core.storage.impl.local.OLowDiskSpaceInformation;
import com.orientechnologies.orient.core.storage.impl.local.OLowDiskSpaceListener;
import com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage; import com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.base.ODurablePage; import com.orientechnologies.orient.core.storage.impl.local.paginated.base.ODurablePage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.ODirtyPage;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OLogSequenceNumber; import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OLogSequenceNumber;
import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OWriteAheadLog; import com.orientechnologies.orient.core.storage.impl.local.paginated.wal.OWriteAheadLog;


Expand All @@ -46,13 +47,10 @@
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NavigableMap; import java.util.NavigableMap;
import java.util.Set;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
Expand Down Expand Up @@ -80,7 +78,7 @@ public class OWOWCache {


private final long diskSizeCheckInterval = OGlobalConfiguration.DISC_CACHE_FREE_SPACE_CHECK_INTERVAL private final long diskSizeCheckInterval = OGlobalConfiguration.DISC_CACHE_FREE_SPACE_CHECK_INTERVAL
.getValueAsInteger() * 1000; .getValueAsInteger() * 1000;
private final List<WeakReference<LowDiskSpaceListener>> listeners = new CopyOnWriteArrayList<WeakReference<LowDiskSpaceListener>>(); private final List<WeakReference<OLowDiskSpaceListener>> listeners = new CopyOnWriteArrayList<WeakReference<OLowDiskSpaceListener>>();


private final AtomicLong lastDiskSpaceCheck = new AtomicLong(System.currentTimeMillis()); private final AtomicLong lastDiskSpaceCheck = new AtomicLong(System.currentTimeMillis());
private final String storagePath; private final String storagePath;
Expand Down Expand Up @@ -149,22 +147,21 @@ public void startFuzzyCheckpoints() {
} }
} }


public void addLowDiskSpaceListener(LowDiskSpaceListener listener) { public void addLowDiskSpaceListener(OLowDiskSpaceListener listener) {
listeners.add(new WeakReference<LowDiskSpaceListener>(listener)); listeners.add(new WeakReference<OLowDiskSpaceListener>(listener));
} }


public void removeLowDiskSpaceListener(LowDiskSpaceListener listener) { public void removeLowDiskSpaceListener(OLowDiskSpaceListener listener) {
final Iterator<WeakReference<LowDiskSpaceListener>> iterator = listeners.iterator(); List<WeakReference<OLowDiskSpaceListener>> itemsToRemove = new ArrayList<WeakReference<OLowDiskSpaceListener>>();
List<WeakReference<LowDiskSpaceListener>> itemsToRemove = new ArrayList<WeakReference<LowDiskSpaceListener>>();


for (WeakReference<LowDiskSpaceListener> ref : listeners) { for (WeakReference<OLowDiskSpaceListener> ref : listeners) {
final LowDiskSpaceListener lowDiskSpaceListener = ref.get(); final OLowDiskSpaceListener lowDiskSpaceListener = ref.get();


if (lowDiskSpaceListener == null || lowDiskSpaceListener.equals(listener)) if (lowDiskSpaceListener == null || lowDiskSpaceListener.equals(listener))
itemsToRemove.add(ref); itemsToRemove.add(ref);
} }


for (WeakReference<LowDiskSpaceListener> ref : itemsToRemove) for (WeakReference<OLowDiskSpaceListener> ref : itemsToRemove)
listeners.remove(ref); listeners.remove(ref);
} }


Expand All @@ -184,18 +181,18 @@ private void addAllocatedSpace(long diff) {
long effectiveFreeSpace = freeSpace - allocatedSpace.get(); long effectiveFreeSpace = freeSpace - allocatedSpace.get();


if (effectiveFreeSpace < freeSpaceLimit) if (effectiveFreeSpace < freeSpaceLimit)
callLowSpaceListeners(new LowDiskSpaceInformation(effectiveFreeSpace, freeSpaceLimit)); callLowSpaceListeners(new OLowDiskSpaceInformation(effectiveFreeSpace, freeSpaceLimit));


lastDiskSpaceCheck.lazySet(ts); lastDiskSpaceCheck.lazySet(ts);
} }
} }


private void callLowSpaceListeners(final LowDiskSpaceInformation information) { private void callLowSpaceListeners(final OLowDiskSpaceInformation information) {
lowSpaceEventsPublisher.submit(new Callable<Void>() { lowSpaceEventsPublisher.submit(new Callable<Void>() {
@Override @Override
public Void call() throws Exception { public Void call() throws Exception {
for (WeakReference<LowDiskSpaceListener> lowDiskSpaceListenerWeakReference : listeners) { for (WeakReference<OLowDiskSpaceListener> lowDiskSpaceListenerWeakReference : listeners) {
final LowDiskSpaceListener listener = lowDiskSpaceListenerWeakReference.get(); final OLowDiskSpaceListener listener = lowDiskSpaceListenerWeakReference.get();
if (listener != null) if (listener != null)
try { try {
listener.lowDiskSpace(information); listener.lowDiskSpace(information);
Expand Down Expand Up @@ -1304,21 +1301,7 @@ public Void call() throws Exception {
} }
} }


public interface LowDiskSpaceListener { private static class FlushThreadFactory implements ThreadFactory {
void lowDiskSpace(LowDiskSpaceInformation information);
}

public class LowDiskSpaceInformation {
public long freeSpace;
public long requiredSpace;

public LowDiskSpaceInformation(long freeSpace, long requiredSpace) {
this.freeSpace = freeSpace;
this.requiredSpace = requiredSpace;
}
}

private static class FlushThreadFactory implements ThreadFactory {
private final String storageName; private final String storageName;


private FlushThreadFactory(String storageName) { private FlushThreadFactory(String storageName) {
Expand Down
Expand Up @@ -52,7 +52,6 @@
import com.orientechnologies.orient.core.index.hashindex.local.cache.OCachePointer; import com.orientechnologies.orient.core.index.hashindex.local.cache.OCachePointer;
import com.orientechnologies.orient.core.index.hashindex.local.cache.ODiskCache; import com.orientechnologies.orient.core.index.hashindex.local.cache.ODiskCache;
import com.orientechnologies.orient.core.index.hashindex.local.cache.OPageDataVerificationError; import com.orientechnologies.orient.core.index.hashindex.local.cache.OPageDataVerificationError;
import com.orientechnologies.orient.core.index.hashindex.local.cache.OWOWCache;
import com.orientechnologies.orient.core.metadata.OMetadataDefault; import com.orientechnologies.orient.core.metadata.OMetadataDefault;
import com.orientechnologies.orient.core.metadata.OMetadataInternal; import com.orientechnologies.orient.core.metadata.OMetadataInternal;
import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OClass;
Expand Down Expand Up @@ -103,34 +102,36 @@
* @author Andrey Lomakin * @author Andrey Lomakin
* @since 28.03.13 * @since 28.03.13
*/ */
public abstract class OAbstractPaginatedStorage extends OStorageAbstract implements OWOWCache.LowDiskSpaceListener { public abstract class OAbstractPaginatedStorage extends OStorageAbstract implements OLowDiskSpaceListener,
private static final int RECORD_LOCK_TIMEOUT = OGlobalConfiguration.STORAGE_RECORD_LOCK_TIMEOUT OFullCheckpointRequestListener {
.getValueAsInteger(); private static final int RECORD_LOCK_TIMEOUT = OGlobalConfiguration.STORAGE_RECORD_LOCK_TIMEOUT

.getValueAsInteger();
private final ONewLockManager<ORID> lockManager;
private final String PROFILER_CREATE_RECORD; private final ONewLockManager<ORID> lockManager;
private final String PROFILER_READ_RECORD; private final String PROFILER_CREATE_RECORD;
private final String PROFILER_UPDATE_RECORD; private final String PROFILER_READ_RECORD;
private final String PROFILER_DELETE_RECORD; private final String PROFILER_UPDATE_RECORD;
private final ConcurrentMap<String, OCluster> clusterMap = new ConcurrentHashMap<String, OCluster>(); private final String PROFILER_DELETE_RECORD;
private final ThreadLocal<OStorageTransaction> transaction = new ThreadLocal<OStorageTransaction>(); private final ConcurrentMap<String, OCluster> clusterMap = new ConcurrentHashMap<String, OCluster>();
private final OModificationLock modificationLock = new OModificationLock(); private final ThreadLocal<OStorageTransaction> transaction = new ThreadLocal<OStorageTransaction>();
protected volatile OWriteAheadLog writeAheadLog; private final OModificationLock modificationLock = new OModificationLock();
protected volatile ODiskCache diskCache; protected volatile OWriteAheadLog writeAheadLog;
private ORecordConflictStrategy recordConflictStrategy = Orient.instance() protected volatile ODiskCache diskCache;
.getRecordConflictStrategy() private ORecordConflictStrategy recordConflictStrategy = Orient.instance()
.newInstanceOfDefaultClass(); .getRecordConflictStrategy()
private CopyOnWriteArrayList<OCluster> clusters = new CopyOnWriteArrayList<OCluster>(); .newInstanceOfDefaultClass();
private volatile int defaultClusterId = -1; private CopyOnWriteArrayList<OCluster> clusters = new CopyOnWriteArrayList<OCluster>();
private volatile OAtomicOperationsManager atomicOperationsManager; private volatile int defaultClusterId = -1;

private volatile OAtomicOperationsManager atomicOperationsManager;
private volatile boolean wereDataRestoredAfterOpen = false;
private volatile boolean wereNonTxOperationsPerformedInPreviousOpen = false; private volatile boolean wereDataRestoredAfterOpen = false;

private volatile boolean wereNonTxOperationsPerformedInPreviousOpen = false;
private boolean makeFullCheckPointAfterClusterCreate = OGlobalConfiguration.STORAGE_MAKE_FULL_CHECKPOINT_AFTER_CLUSTER_CREATE
.getValueAsBoolean(); private boolean makeFullCheckPointAfterClusterCreate = OGlobalConfiguration.STORAGE_MAKE_FULL_CHECKPOINT_AFTER_CLUSTER_CREATE

.getValueAsBoolean();
private volatile OWOWCache.LowDiskSpaceInformation lowDiskSpace = null;
private volatile OLowDiskSpaceInformation lowDiskSpace = null;
private volatile boolean fullCheckpointRequest = false;


public OAbstractPaginatedStorage(String name, String filePath, String mode) { public OAbstractPaginatedStorage(String name, String filePath, String mode) {
super(name, filePath, mode, OGlobalConfiguration.STORAGE_LOCK_TIMEOUT.getValueAsInteger()); super(name, filePath, mode, OGlobalConfiguration.STORAGE_LOCK_TIMEOUT.getValueAsInteger());
Expand Down Expand Up @@ -399,7 +400,7 @@ public boolean isMakeFullCheckPointAfterClusterCreate() {


public int addCluster(String clusterName, boolean forceListBased, final Object... parameters) { public int addCluster(String clusterName, boolean forceListBased, final Object... parameters) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


lock.acquireExclusiveLock(); lock.acquireExclusiveLock();
try { try {
Expand All @@ -415,7 +416,7 @@ public int addCluster(String clusterName, boolean forceListBased, final Object..
} }


public int addCluster(String clusterName, int requestedId, boolean forceListBased, Object... parameters) { public int addCluster(String clusterName, int requestedId, boolean forceListBased, Object... parameters) {
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


lock.acquireExclusiveLock(); lock.acquireExclusiveLock();
try { try {
Expand All @@ -438,7 +439,7 @@ public int addCluster(String clusterName, int requestedId, boolean forceListBase
} }


public boolean dropCluster(final int clusterId, final boolean iTruncate) { public boolean dropCluster(final int clusterId, final boolean iTruncate) {
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


lock.acquireExclusiveLock(); lock.acquireExclusiveLock();
try { try {
Expand Down Expand Up @@ -623,7 +624,7 @@ public long count(int[] iClusterIds, boolean countTombstones) {
public OStorageOperationResult<OPhysicalPosition> createRecord(final ORecordId rid, final byte[] content, public OStorageOperationResult<OPhysicalPosition> createRecord(final ORecordId rid, final byte[] content,
ORecordVersion recordVersion, final byte recordType, final int mode, final ORecordCallback<Long> callback) { ORecordVersion recordVersion, final byte recordType, final int mode, final ORecordCallback<Long> callback) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


final OPhysicalPosition ppos = new OPhysicalPosition(recordType); final OPhysicalPosition ppos = new OPhysicalPosition(recordType);
final OCluster cluster = getClusterById(rid.clusterId); final OCluster cluster = getClusterById(rid.clusterId);
Expand Down Expand Up @@ -699,7 +700,7 @@ public OStorageOperationResult<ORawBuffer> readRecord(final ORecordId iRid, fina
public OStorageOperationResult<ORecordVersion> updateRecord(final ORecordId rid, boolean updateContent, byte[] content, public OStorageOperationResult<ORecordVersion> updateRecord(final ORecordId rid, boolean updateContent, byte[] content,
final ORecordVersion version, final byte recordType, final int mode, ORecordCallback<ORecordVersion> callback) { final ORecordVersion version, final byte recordType, final int mode, ORecordCallback<ORecordVersion> callback) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


final OCluster cluster = getClusterById(rid.clusterId); final OCluster cluster = getClusterById(rid.clusterId);
if (transaction.get() != null) { if (transaction.get() != null) {
Expand Down Expand Up @@ -755,7 +756,7 @@ public OWriteAheadLog getWALInstance() {
public OStorageOperationResult<Boolean> deleteRecord(final ORecordId rid, final ORecordVersion version, final int mode, public OStorageOperationResult<Boolean> deleteRecord(final ORecordId rid, final ORecordVersion version, final int mode,
ORecordCallback<Boolean> callback) { ORecordCallback<Boolean> callback) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


final OCluster cluster = getClusterById(rid.clusterId); final OCluster cluster = getClusterById(rid.clusterId);


Expand Down Expand Up @@ -798,7 +799,7 @@ public OStorageOperationResult<Boolean> deleteRecord(final ORecordId rid, final
@Override @Override
public OStorageOperationResult<Boolean> hideRecord(final ORecordId rid, final int mode, ORecordCallback<Boolean> callback) { public OStorageOperationResult<Boolean> hideRecord(final ORecordId rid, final int mode, ORecordCallback<Boolean> callback) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


final OCluster cluster = getClusterById(rid.clusterId); final OCluster cluster = getClusterById(rid.clusterId);


Expand Down Expand Up @@ -880,7 +881,7 @@ public int getClusterIdByName(final String clusterName) {


public void commit(final OTransaction clientTx, Runnable callback) { public void commit(final OTransaction clientTx, Runnable callback) {
checkOpeness(); checkOpeness();
checkLowDiskSpace(); checkLowDiskSpaceAndFullCheckpointRequests();


final ODatabaseDocumentInternal databaseRecord = ODatabaseRecordThreadLocal.INSTANCE.get(); final ODatabaseDocumentInternal databaseRecord = ODatabaseRecordThreadLocal.INSTANCE.get();
if (databaseRecord != null) if (databaseRecord != null)
Expand Down Expand Up @@ -1146,10 +1147,15 @@ public String getMode() {
} }


@Override @Override
public void lowDiskSpace(OWOWCache.LowDiskSpaceInformation information) { public void lowDiskSpace(OLowDiskSpaceInformation information) {
lowDiskSpace = information; lowDiskSpace = information;
} }


@Override
public void requestFullCheckpoint() {
fullCheckpointRequest = true;
}

/** /**
* Executes the command request and return the result back. * Executes the command request and return the result back.
*/ */
Expand Down Expand Up @@ -2554,7 +2560,7 @@ private void rollbackAllUnfinishedWALOperations(Map<OOperationUnitId, List<OLogS
} }
} }


private void checkLowDiskSpace() { private void checkLowDiskSpaceAndFullCheckpointRequests() {
if (transaction.get() != null) if (transaction.get() != null)
return; return;


Expand All @@ -2571,14 +2577,18 @@ private void checkLowDiskSpace() {
+ " MB). The database is now working in read-only mode." + " MB). The database is now working in read-only mode."
+ " Please close the database (or stop OrientDB), make room on your hard drive and then reopen the database. " + " Please close the database (or stop OrientDB), make room on your hard drive and then reopen the database. "
+ "The minimal required space is " + (lowDiskSpace.requiredSpace / (1024 * 1024)) + " MB. " + "The minimal required space is " + (lowDiskSpace.requiredSpace / (1024 * 1024)) + " MB. "
+ "Required space is now set to " + "Required space is now set to " + OGlobalConfiguration.DISK_CACHE_FREE_SPACE_LIMIT.getValueAsInteger()
+ OGlobalConfiguration.DISK_CACHE_FREE_SPACE_LIMIT.getValueAsInteger() + "MB (you can change it by setting parameter " + "MB (you can change it by setting parameter " + OGlobalConfiguration.DISK_CACHE_FREE_SPACE_LIMIT.getKey() + ") .");
+ OGlobalConfiguration.DISK_CACHE_FREE_SPACE_LIMIT.getKey() + ") .");
} else { } else {
lowDiskSpace = null; lowDiskSpace = null;
} }
} else } else
lowDiskSpace = null; lowDiskSpace = null;
} }

if (fullCheckpointRequest) {
synch();
fullCheckpointRequest = false;
}
} }
} }
@@ -0,0 +1,9 @@
package com.orientechnologies.orient.core.storage.impl.local;

/**
* @author Andrey Lomakin <a href="mailto:lomakin.andrey@gmail.com">Andrey Lomakin</a>
* @since 05/02/15
*/
public interface OFullCheckpointRequestListener {
void requestFullCheckpoint();
}
@@ -0,0 +1,15 @@
package com.orientechnologies.orient.core.storage.impl.local;

/**
* @author Andrey Lomakin <a href="mailto:lomakin.andrey@gmail.com">Andrey Lomakin</a>
* @since 05/02/15
*/
public class OLowDiskSpaceInformation {
public long freeSpace;
public long requiredSpace;

public OLowDiskSpaceInformation(long freeSpace, long requiredSpace) {
this.freeSpace = freeSpace;
this.requiredSpace = requiredSpace;
}
}

0 comments on commit b23efd9

Please sign in to comment.