@Test public void par_update_get_compact() throws InterruptedException { int scale = TT.scale(); if (scale == 0) return; int threadNum = Math.min(4, scale * 4); final long end = TT.nowPlusMinutes(10); e = openEngine(); final BlockingQueue<Fun.Pair<Long, byte[]>> q = new ArrayBlockingQueue(threadNum * 10); for (int i = 0; i < threadNum; i++) { byte[] b = TT.randomByteArray(new Random().nextInt(10000)); long recid = e.put(b, BYTE_ARRAY_NOSIZE); q.put(new Fun.Pair(recid, b)); } final CountDownLatch l = new CountDownLatch(2); Thread tt = new Thread() { @Override public void run() { try { while (l.getCount() > 1) e.compact(); } finally { l.countDown(); } } }; tt.setDaemon(true); tt.run(); Exec.execNTimes( threadNum, new Callable() { @Override public Object call() throws Exception { Random r = new Random(); while (System.currentTimeMillis() < end) { Fun.Pair<Long, byte[]> t = q.take(); assertTrue( Serializer.BYTE_ARRAY.equals(t.b, e.get(t.a, Serializer.BYTE_ARRAY_NOSIZE))); int size = r.nextInt(1000); if (r.nextInt(10) == 1) size = size * 100; byte[] b = TT.randomByteArray(size); e.update(t.a, b, Serializer.BYTE_ARRAY_NOSIZE); q.put(new Fun.Pair<Long, byte[]>(t.a, b)); } return null; } }); l.countDown(); l.await(); for (Fun.Pair<Long, byte[]> t : q) { assertTrue(Serializer.BYTE_ARRAY.equals(t.b, e.get(t.a, Serializer.BYTE_ARRAY_NOSIZE))); } e.close(); }
protected Key executeExpression(String expr) { DKV.write_barrier(); try { int i = UNIQUE.getAndIncrement(); Key key = Exec.exec(expr, "RBigResult" + i); return key; } catch (PositionedException e) { System.out.println(e.report(expr)); e.printStackTrace(); assertTrue(false); return null; } }
protected void testExecFail(String expr, int errorPos) { DKV.write_barrier(); int keys = H2O.store_size(); try { int i = UNIQUE.getAndIncrement(); System.err.println("result" + (new Integer(i).toString()) + ": " + expr); Key key = Exec.exec(expr, "result" + (new Integer(i).toString())); UKV.remove(key); assertTrue("An exception should have been thrown.", false); } catch (ParserException e) { assertTrue(false); } catch (EvaluationException e) { if (errorPos != -1) assertEquals(errorPos, e._pos); } DKV.write_barrier(); assertEquals("Keys were not properly deleted for expression " + expr, keys, H2O.store_size()); }
@Test public void par_cas() throws InterruptedException { int scale = TT.scale(); if (scale == 0) return; int threadNum = 8 * scale; final long end = TT.nowPlusMinutes(10); e = openEngine(); final BlockingQueue<Fun.Pair<Long, byte[]>> q = new ArrayBlockingQueue(threadNum * 10); for (int i = 0; i < threadNum; i++) { byte[] b = TT.randomByteArray(new Random().nextInt(10000)); long recid = e.put(b, BYTE_ARRAY_NOSIZE); q.put(new Fun.Pair(recid, b)); } Exec.execNTimes( threadNum, new Callable() { @Override public Object call() throws Exception { Random r = new Random(); while (System.currentTimeMillis() < end) { Fun.Pair<Long, byte[]> t = q.take(); int size = r.nextInt(10000); if (r.nextInt(10) == 1) size = size * 100; byte[] b = TT.randomByteArray(size); assertTrue(e.compareAndSwap(t.a, t.b, b, Serializer.BYTE_ARRAY_NOSIZE)); q.put(new Fun.Pair<Long, byte[]>(t.a, b)); } return null; } }); for (Fun.Pair<Long, byte[]> t : q) { assertTrue(Serializer.BYTE_ARRAY.equals(t.b, e.get(t.a, Serializer.BYTE_ARRAY_NOSIZE))); } e.close(); }