public boolean obtainNonHollowNode(final OsmNode node) {
        if (!node.isHollow()) {
            return true;
        }

        final MicroCache segment = getSegmentFor(node.ilon, node.ilat);
        if (segment == null) {
            return false;
        }
        if (!node.isHollow()) {
            return true; // direct weaving...
        }

        final long id = node.getIdFromPos();
        if (segment.getAndClear(id)) {
            node.parseNodeBody(segment, nodesMap, expCtxWay);
        }

        if (garbageCollectionEnabled) { // garbage collection
            cacheSum -= segment.collect(segment.getSize() >> 1); // threshold = 1/2 of size is deleted
        }

        return !node.isHollow();
    }
make sure the given node is non-hollow,
which means it contains not just the id,
but also the actual data

@return true if successfull, false if node is still hollow
main/src/main/java/cgeo/geocaching/brouter/mapaccess/NodesCache.java