|
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