示例#1
0
 public void writeChecksums() throws IOException {
   ensureOpen();
   ImmutableMap<String, StoreFileMetaData> files = list();
   String checksumName = CHECKSUMS_PREFIX + System.currentTimeMillis();
   synchronized (mutex) {
     Map<String, String> checksums = new HashMap<>();
     for (StoreFileMetaData metaData : files.values()) {
       if (metaData.checksum() != null) {
         checksums.put(metaData.name(), metaData.checksum());
       }
     }
     while (directory.fileExists(checksumName)) {
       checksumName = CHECKSUMS_PREFIX + System.currentTimeMillis();
     }
     try (IndexOutput output = directory.createOutput(checksumName, IOContext.DEFAULT, true)) {
       output.writeInt(0); // version
       output.writeStringStringMap(checksums);
     }
   }
   for (StoreFileMetaData metaData : files.values()) {
     if (metaData.name().startsWith(CHECKSUMS_PREFIX) && !checksumName.equals(metaData.name())) {
       try {
         directory.deleteFileChecksum(metaData.name());
       } catch (Throwable e) {
         // ignore
       }
     }
   }
 }