예제 #1
0
  @Test
  public void test() throws Exception {
    log.info("You can ignore exceptions and scary stack traces from this test");
    IdService idService = new CachingIdService(5, new MapIdService(), "test");

    Configuration conf = getTestUtil().getConfiguration();
    HTablePool pool = new HTablePool(conf, Integer.MAX_VALUE);

    DbHarness<LongOp> dbHarness =
        new HBaseDbHarness<LongOp>(
            pool,
            "XY".getBytes(),
            "nonexistentTable".getBytes(),
            "nonexistentCf".getBytes(),
            LongOp.DESERIALIZER,
            idService,
            CommitType.INCREMENT,
            5,
            2,
            2,
            null);

    DataCube<LongOp> cube;

    Dimension<String> zipcode =
        new Dimension<String>("zipcode", new StringToBytesBucketer(), true, 5);

    Rollup zipRollup = new Rollup(zipcode);

    List<Dimension<?>> dimensions = ImmutableList.<Dimension<?>>of(zipcode);
    List<Rollup> rollups = ImmutableList.of(zipRollup);

    cube = new DataCube<LongOp>(dimensions, rollups);

    DataCubeIo<LongOp> dataCubeIo =
        new DataCubeIo<LongOp>(cube, dbHarness, 1, Long.MAX_VALUE, SyncLevel.BATCH_ASYNC);

    dataCubeIo.writeAsync(new LongOp(1), new WriteBuilder(cube).at(zipcode, "97212"));

    dataCubeIo.writeAsync(new LongOp(1), new WriteBuilder(cube).at(zipcode, "97212"));

    dataCubeIo.flush();

    try {
      dataCubeIo.writeAsync(new LongOp(1), new WriteBuilder(cube).at(zipcode, "97212"));
      Assert.fail("Cube should not have accepted more writes after an error!");
    } catch (AsyncException e) {
      // This exception *should* happen. Because we wrote to a nonexistent table.
      Assert.assertTrue(e.getCause().getCause().getCause() instanceof TableNotFoundException);
    }
  }
예제 #2
0
  /**
   * Do all the increments necessary to add a tweet to the datacube. May not immediately flush to
   * the DB.
   */
  public void countTweet(Tweet tweet) throws IOException, InterruptedException, AsyncException {
    WriteBuilder writeBuilder =
        new WriteBuilder(dataCube)
            .at(timeDimension, tweet.time)
            .at(userDimension, tweet.username)
            .at(retweetedFromDimension, tweet.retweetedFrom.or(""))
            .at(tagsDimension, tweet.hashTags);
    Batch<LongOp> cubeUpdates = dataCube.getWrites(writeBuilder, new LongOp(1));

    dataCubeIo.writeAsync(cubeUpdates);
  }