AbstractBlobStore implements GarbageCollectableBlobStore,
        Cache.Backend<AbstractBlobStore.BlockId, AbstractBlobStore.Data> { @Override public long getBlobLength(String blobId) throws IOException { if (isMarkEnabled()) { mark(blobId); } byte[] id = StringUtils.convertHexToBytes(blobId); ByteArrayInputStream idStream = new ByteArrayInputStream(id); long totalLength = 0; while (true) { int type = idStream.read(); if (type == -1) { break; } if (type == TYPE_DATA) { int len = IOUtils.readVarInt(idStream); IOUtils.skipFully(idStream, len); totalLength += len; } else if (type == TYPE_HASH) { int level = IOUtils.readVarInt(idStream); totalLength += IOUtils.readVarLong(idStream); if (level > 0) { IOUtils.readVarLong(idStream); } int digestLength = IOUtils.readVarInt(idStream); IOUtils.skipFully(idStream, digestLength); } else { throw new IOException("Datastore id type " + type + " for blob " + blobId); } } return totalLength; }  void setBlockSizeMin(int x); @Override long getBlockSizeMin(); @Override void setBlockSize(int x); void setStatsCollector(BlobStatsCollector stats); int getBlockSize(); @Override String writeBlob(String tempFilePath); @Override String writeBlob(InputStream in); @Override String writeBlob(InputStream in, BlobOptions options); @Override InputStream getInputStream(String blobId); @Override String getReference(@NotNull String blobId); @Override String getBlobId(@NotNull String reference); void setReferenceKey(byte[] referenceKey); void setReferenceKeyEncoded(String encodedKey); void setReferenceKeyPlainText(String textKey); @Override void clearInUse(); @Override abstract void startMark(); @Override abstract int sweep(); @Override int readBlob(String blobId, long pos, byte[] buff, int off,
            int length); @Override Data load(BlockId id); @Override long getBlobLength(String blobId); @Override Iterator<String> resolveChunks(String blobId); @Override boolean deleteChunks(List<String> chunkIds, long maxLastModifiedTime); @Override void close();  }
@Test public void testIllegalIdentifier2() throws Exception { try { store.getBlobLength("ff"); fail(); } catch (Exception e) { } }