/** Choose a block to insert. * FIXME make SplitFileInserterSender per-segment, eliminate a lot of unnecessary complexity. */ public BlockInsert chooseBlock() { // FIXME this should probably use SimpleBlockChooser and hence use lowest-retry-count from // each segment? // Less important for inserts than for requests though... synchronized(cooldownLock) { synchronized(this) { if (status == Status.FAILED || status == Status.SUCCEEDED || status == Status.GENERATING_METADATA || failing != null) { return null; } } // Generally segments are fairly well balanced, so we can usually pick a random segment // then a random key from it. randomSegmentIterator.reset(random); while (randomSegmentIterator.hasNext()) { SplitFileInserterSegmentStorage segment = randomSegmentIterator.next(); BlockInsert ret = segment.chooseBlock(); if (ret != null) { noBlocksToSend = false; return ret; } } noBlocksToSend = true; return null; } }
BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addRunningInsert(chosen); segment.onFailure(chosen.blockNumber, new InsertException(InsertExceptionMode.ROUTE_NOT_FOUND)); BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen == null); for(int i=0;i<segment.totalBlockCount;i++) chosen = segment.chooseBlock(); keys.addRunningInsert(chosen); assertTrue(chosen != null);
BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen); BlockInsert chosen = segment.chooseBlock(); keys.addInsert(chosen); assertTrue(chosen != null);
BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen); BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen);
BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen); BlockInsert chosen = segment.chooseBlock(); keys.addInsert(chosen); assertTrue(chosen != null);
BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen); BlockInsert chosen = segment.chooseBlock(); keys.addInsert(chosen); assertTrue(chosen != null);
assertTrue(resumed.getStatus() == Status.ENCODED); BlockInsert chosen = segment.chooseBlock(); assertTrue(chosen != null); keys.addInsert(chosen); assertTrue(resumed.getStatus() == Status.ENCODED); BlockInsert chosen = segment.chooseBlock(); keys.addInsert(chosen); assertTrue(chosen != null);