@Override public boolean doHasNext() throws HyracksDataException { if (!tupleConsumed) { return true; } if (currentCursor != null) { if (nextValidTuple()) { return true; } currentCursor.close(); accessorIndex++; } while (accessorIndex < indexAccessors.size()) { // Current cursor has been exhausted, switch to next accessor/cursor. currentAccessor = indexAccessors.get(accessorIndex); currentCursor = currentAccessor.createSearchCursor(false); currentAccessor.search(currentCursor, searchPred); if (nextValidTuple()) { return true; } // Close as we go to release resources. currentCursor.close(); accessorIndex++; } return false; }
@Override public void validate() throws HyracksDataException { btree.validate(); // Scan the btree and validate the order of elements in each inverted-list. IIndexAccessor btreeAccessor = btree.createAccessor(NoOpIndexAccessParameters.INSTANCE); try { MultiComparator btreeCmp = MultiComparator.create(btree.getComparatorFactories()); RangePredicate rangePred = new RangePredicate(null, null, true, true, btreeCmp, btreeCmp); IIndexCursor btreeCursor = btreeAccessor.createSearchCursor(false); try { btreeAccessor.search(btreeCursor, rangePred); try { doValidate(btreeCursor); } finally { btreeCursor.close(); } } finally { btreeCursor.destroy(); } } finally { btreeAccessor.destroy(); } }
private void insertIntTupleRange(int begin, int end) throws Exception { if (end < begin) { throw new IllegalArgumentException("Invalid range: [" + begin + ", " + end + "]"); } for (int i = begin; i <= end; i++) { TupleUtils.createIntegerTuple(builder, tuple, i); accessor.insert(tuple); } }
@Test public void modificationCallbackTest() throws Exception { IndexAccessParameters actx = new IndexAccessParameters(cb, NoOpOperationCallback.INSTANCE); IIndexAccessor accessor = index.createAccessor(actx); isFoundNull = true; for (int i = 0; i < AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT; i++) { TupleUtils.createIntegerTuple(builder, tuple, i); accessor.insert(tuple); } isFoundNull = false; for (int i = 0; i < AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT; i++) { TupleUtils.createIntegerTuple(builder, tuple, i); accessor.upsert(tuple); } isFoundNull = false; for (int i = 0; i < AccessMethodTestsConfig.BTREE_NUM_TUPLES_TO_INSERT; i++) { TupleUtils.createIntegerTuple(builder, tuple, i); accessor.delete(tuple); } }
@Override public void doOpen(ICursorInitialState initialState, ISearchPredicate searchPred) throws HyracksDataException { this.btreePred = (RangePredicate) searchPred; btreeAccessor.search(btreeCursor, btreePred); openInvListRangeSearchCursor(); }
protected IIndexCursor createCursor() throws HyracksDataException { return indexAccessor.createSearchCursor(false); }
public static void insertData(ITreeIndex lsmBtree) throws HyracksDataException { ArrayTupleBuilder tb = new ArrayTupleBuilder(FIELD_COUNT); ArrayTupleReference tuple = new ArrayTupleReference(); IndexAccessParameters actx = new IndexAccessParameters(TestOperationCallback.INSTANCE, TestOperationCallback.INSTANCE); IIndexAccessor indexAccessor = lsmBtree.createAccessor(actx); try { int numInserts = 10000; for (int i = 0; i < numInserts; i++) { int f0 = RND.nextInt() % numInserts; int f1 = 5; TupleUtils.createIntegerTuple(tb, tuple, f0, f1); try { indexAccessor.insert(tuple); } catch (HyracksDataException e) { if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) { e.printStackTrace(); throw e; } } catch (Exception e) { e.printStackTrace(); throw e; } } } finally { indexAccessor.destroy(); } } }
@Override public void destroy() throws HyracksDataException { if (destroyed) { return; } destroyed = true; try { btreeAccessor.destroy(); } finally { btreeCursor.destroy(); } }
@Override public Boolean call() throws Exception { lock.lock(); try { insertTaskStarted = true; // insert tuples [101, 200] insertIntTupleRange(101, 200); condition.signal(); condition.await(); // insert tuples [1, 100] insertIntTupleRange(1, 100); condition.signal(); condition.await(); // insert tuples [201, 300] and delete tuple 151 insertIntTupleRange(201, 300); TupleUtils.createIntegerTuple(builder, tuple, 151); accessor.delete(tuple); condition.signal(); } finally { lock.unlock(); } return true; }
protected void open(IIndexAccessor accessor, IIndexCursor cursor, ISearchPredicate predicate) throws HyracksDataException { accessor.search(cursor, predicate); }
protected IIndexCursor createCursor(IIndexAccessor accessor) throws Exception { return accessor.createSearchCursor(false); }
Math.max(p1y, p2y), pk); try { indexAccessor.insert(tuple); } catch (HyracksDataException e) { if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) { TupleUtils.createIntegerTuple(tb, tuple, p1xs[i], p1ys[i], p2xs[i], p2ys[i], pks[i]); try { indexAccessor.delete(tuple); delDone++; } catch (HyracksDataException e) {
protected void destroy(IIndexAccessor accessor) throws HyracksDataException { accessor.destroy(); }
public void upsertStringTuples(IIndexTestContext ictx, int numTuples, Random rnd) throws Exception { OrderedIndexTestContext ctx = (OrderedIndexTestContext) ictx; int fieldCount = ctx.getFieldCount(); int numKeyFields = ctx.getKeyFieldCount(); String[] fieldValues = new String[fieldCount]; for (int i = 0; i < numTuples; i++) { if (LOGGER.isInfoEnabled()) { if ((i + 1) % (numTuples / Math.min(10, numTuples)) == 0) { LOGGER.info("Inserting Tuple " + (i + 1) + "/" + numTuples); } } // Set keys. for (int j = 0; j < numKeyFields; j++) { int length = (Math.abs(rnd.nextInt()) % 10) + 1; fieldValues[j] = getRandomString(length, rnd); } // Set values. for (int j = numKeyFields; j < fieldCount; j++) { fieldValues[j] = getRandomString(5, rnd); } TupleUtils.createTuple(ctx.getTupleBuilder(), ctx.getTuple(), ctx.getFieldSerdes(), (Object[]) fieldValues); ctx.getIndexAccessor().upsert(ctx.getTuple()); ctx.upsertCheckTuple(createStringCheckTuple(fieldValues, ctx.getKeyFieldCount()), ctx.getCheckTuples()); } }