diff --git a/core/src/main/java/overflowdb/ReferenceManager.java b/core/src/main/java/overflowdb/ReferenceManager.java index 5de8f2a9..bd12eeb2 100644 --- a/core/src/main/java/overflowdb/ReferenceManager.java +++ b/core/src/main/java/overflowdb/ReferenceManager.java @@ -1,9 +1,9 @@ package overflowdb; -import overflowdb.storage.OdbStorage; -import overflowdb.util.NamedThreadFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import overflowdb.storage.OdbStorage; +import overflowdb.util.NamedThreadFactory; import java.util.ArrayList; import java.util.Collections; @@ -83,8 +83,8 @@ private void syncClearReferences(final int releaseCount) { if (!refsToClear.isEmpty()) { safelyClearReferences(refsToClear); if (logger.isInfoEnabled()) logger.info("completed clearing of " + refsToClear.size() + " references"); - if (logger.isDebugEnabled()) logger.debug("current clearable queue size: " + clearableRefs.size()); - if (logger.isDebugEnabled()) logger.debug("references cleared in total: " + totalReleaseCount); + if (logger.isDebugEnabled()) logger.debug("remaining clearable references: " + clearableRefs.size()); + if (logger.isTraceEnabled()) logger.trace("references cleared in total: " + totalReleaseCount); } } @@ -161,17 +161,26 @@ private static SerializedNode serializeReference(NodeRef ref) { return null; } - /** * writes all references to disk overflow, blocks until complete. * useful when saving the graph */ public void clearAllReferences() { + int initialRefCount = clearableRefs.size(); + int clearedCount = 0; while (!clearableRefs.isEmpty()) { - int clearableRefsSize = clearableRefs.size(); - logger.info("clearing all (" + clearableRefsSize + ") references - this may take some time"); try { - syncClearReferences(clearableRefsSize); + final List refsToClear = collectRefsToClear(releaseCount); + if (!refsToClear.isEmpty()) { + int clearCountCurr = refsToClear.size(); + safelyClearReferences(refsToClear); + clearedCount += clearCountCurr; + } + + if (logger.isInfoEnabled()) { + float progressPercent = 100f * clearedCount / initialRefCount; + logger.info(String.format("progress of clearing references: %.2f%s", Float.min(100f, progressPercent), "%")); + } } catch (Exception e) { throw new RuntimeException("error while clearing references to disk", e); } diff --git a/core/src/main/java/overflowdb/storage/OdbStorage.java b/core/src/main/java/overflowdb/storage/OdbStorage.java index 1b45f1f3..798ef729 100644 --- a/core/src/main/java/overflowdb/storage/OdbStorage.java +++ b/core/src/main/java/overflowdb/storage/OdbStorage.java @@ -96,7 +96,7 @@ public A readNode(final long id) throws IOException { /** flush any remaining changes in underlying storage to disk */ public void flush() { if (mvstore != null) { - logger.debug("flushing to disk"); + logger.trace("flushing to disk"); mvstore.commit(); } }