|
1 | 1 | package overflowdb; |
2 | 2 |
|
3 | | -import overflowdb.storage.OdbStorage; |
4 | | -import overflowdb.util.NamedThreadFactory; |
5 | 3 | import org.slf4j.Logger; |
6 | 4 | import org.slf4j.LoggerFactory; |
| 5 | +import overflowdb.storage.OdbStorage; |
| 6 | +import overflowdb.util.NamedThreadFactory; |
7 | 7 |
|
8 | 8 | import java.util.ArrayList; |
9 | 9 | import java.util.Collections; |
@@ -83,8 +83,8 @@ private void syncClearReferences(final int releaseCount) { |
83 | 83 | if (!refsToClear.isEmpty()) { |
84 | 84 | safelyClearReferences(refsToClear); |
85 | 85 | if (logger.isInfoEnabled()) logger.info("completed clearing of " + refsToClear.size() + " references"); |
86 | | - if (logger.isDebugEnabled()) logger.debug("current clearable queue size: " + clearableRefs.size()); |
87 | | - if (logger.isDebugEnabled()) logger.debug("references cleared in total: " + totalReleaseCount); |
| 86 | + if (logger.isDebugEnabled()) logger.debug("remaining clearable references: " + clearableRefs.size()); |
| 87 | + if (logger.isTraceEnabled()) logger.trace("references cleared in total: " + totalReleaseCount); |
88 | 88 | } |
89 | 89 | } |
90 | 90 |
|
@@ -161,17 +161,26 @@ private static SerializedNode serializeReference(NodeRef ref) { |
161 | 161 | return null; |
162 | 162 | } |
163 | 163 |
|
164 | | - |
165 | 164 | /** |
166 | 165 | * writes all references to disk overflow, blocks until complete. |
167 | 166 | * useful when saving the graph |
168 | 167 | */ |
169 | 168 | public void clearAllReferences() { |
| 169 | + int initialRefCount = clearableRefs.size(); |
| 170 | + int clearedCount = 0; |
170 | 171 | while (!clearableRefs.isEmpty()) { |
171 | | - int clearableRefsSize = clearableRefs.size(); |
172 | | - logger.info("clearing all (" + clearableRefsSize + ") references - this may take some time"); |
173 | 172 | try { |
174 | | - syncClearReferences(clearableRefsSize); |
| 173 | + final List<NodeRef> refsToClear = collectRefsToClear(releaseCount); |
| 174 | + if (!refsToClear.isEmpty()) { |
| 175 | + int clearCountCurr = refsToClear.size(); |
| 176 | + safelyClearReferences(refsToClear); |
| 177 | + clearedCount += clearCountCurr; |
| 178 | + } |
| 179 | + |
| 180 | + if (logger.isInfoEnabled()) { |
| 181 | + float progressPercent = 100f * clearedCount / initialRefCount; |
| 182 | + logger.info(String.format("progress of clearing references: %.2f%s", Float.min(100f, progressPercent), "%")); |
| 183 | + } |
175 | 184 | } catch (Exception e) { |
176 | 185 | throw new RuntimeException("error while clearing references to disk", e); |
177 | 186 | } |
|
0 commit comments