/** {@inheritDoc} */ @Override public void insertDataRow(T row, IoStatisticsHolder statHolder) throws IgniteCheckedException { int rowSize = row.size(); int written = 0; do { if (written != 0) memMetrics.incrementLargeEntriesPages(); int remaining = rowSize - written; long pageId = 0L; for (int b = remaining < MIN_SIZE_FOR_DATA_PAGE ? bucket(remaining, false) + 1 : REUSE_BUCKET; b < BUCKETS; b++) { pageId = takeEmptyPage(b, ioVersions(), statHolder); if (pageId != 0L) break; } AbstractDataPageIO<T> initIo = null; if (pageId == 0L) { pageId = allocateDataPage(row.partition()); initIo = ioVersions().latest(); } else if (PageIdUtils.tag(pageId) != PageIdAllocator.FLAG_DATA) pageId = initReusedPage(pageId, row.partition(), statHolder); else pageId = PageIdUtils.changePartitionId(pageId, (row.partition())); written = write(pageId, writeRow, initIo, row, written, FAIL_I, statHolder); assert written != FAIL_I; // We can't fail here. } while (written != COMPLETE); }
/** {@inheritDoc} */ @Override public void insertDataRow(T row) throws IgniteCheckedException { int rowSize = row.size(); int written = 0; do { if (written != 0) memMetrics.incrementLargeEntriesPages(); int remaining = rowSize - written; long pageId = 0L; for (int b = remaining < MIN_SIZE_FOR_DATA_PAGE ? bucket(remaining, false) + 1 : REUSE_BUCKET; b < BUCKETS; b++) { pageId = takeEmptyPage(b, ioVersions()); if (pageId != 0L) break; } AbstractDataPageIO<T> initIo = null; if (pageId == 0L) { pageId = allocateDataPage(row.partition()); initIo = ioVersions().latest(); } else if (PageIdUtils.tag(pageId) != PageIdAllocator.FLAG_DATA) pageId = initReusedPage(pageId, row.partition()); else pageId = PageIdUtils.changePartitionId(pageId, (row.partition())); written = write(pageId, writeRow, initIo, row, written, FAIL_I); assert written != FAIL_I; // We can't fail here. } while (written != COMPLETE); }