byte[] index = ChunkIndex.create(objectList);
info.setIndexSize(index.length);
builder.setChunkIndex(index);
ChunkMeta meta = dirtyMeta.remove(key);
if (meta == null)
meta = chunkMeta.get(key);
switch (type) {
case OBJ_COMMIT: {
Edges edges = chunkEdges.get(key);
List<ChunkKey> e = edges != null ? edges.commitEdges : null;
List<ChunkKey> s = sequentialHint(key, OBJ_COMMIT);
if (e == null)
e = Collections.emptyList();
if (s == null)
s = Collections.emptyList();
if (!e.isEmpty() || !s.isEmpty()) {
ChunkMeta.Builder m = edit(meta);
ChunkMeta.PrefetchHint.Builder h = m.getCommitPrefetchBuilder();
for (ChunkKey k : e)
h.addEdge(k.asString());
for (ChunkKey k : s)
h.addSequential(k.asString());
meta = m.build();
}
break;
}
case OBJ_TREE: {
List<ChunkKey> s = sequentialHint(key, OBJ_TREE);
if (s == null)
s = Collections.emptyList();
if (!s.isEmpty()) {
ChunkMeta.Builder m = edit(meta);
ChunkMeta.PrefetchHint.Builder h = m.getTreePrefetchBuilder();
for (ChunkKey k : s)
h.addSequential(k.asString());
meta = m.build();
}
break;
}
}
if (meta != null) {
info.setMetaSize(meta.getSerializedSize());
builder.setMeta(meta);
}
ChunkInfo newInfo = new ChunkInfo(key, info.build());
infoByKey.put(key, newInfo);