Пример #1
0
  public static void flushCache(@Nullable VirtualFile finishedFile) {
    if (finishedFile == null || !myFinishedFiles.offer(finishedFile)) {
      VirtualFile[] files = null;
      synchronized (myFinishedFiles) {
        int size = myFinishedFiles.size();
        if ((finishedFile == null && size > 0) || size == CAPACITY) {
          files = myFinishedFiles.toArray(new VirtualFile[size]);
          myFinishedFiles.clear();
        }
      }

      if (files != null) {
        for (VirtualFile file : files) {
          synchronized (getStripedLock(file)) {
            Timestamps timestamp = myTimestampsCache.remove(file);
            if (timestamp == null) continue;
            try {
              if (timestamp.isDirty() && file.isValid()) {
                final DataOutputStream sink = Timestamps.PERSISTENCE.writeAttribute(file);
                timestamp.writeToStream(sink);
                sink.close();
              }
            } catch (IOException e) {
              throw new RuntimeException(e);
            }
          }
        }
      }
      if (finishedFile != null) myFinishedFiles.offer(finishedFile);
    }
  }
Пример #2
0
 public static long getIndexStamp(VirtualFile file, ID<?, ?> indexName) {
   synchronized (getStripedLock(file)) {
     Timestamps stamp = createOrGetTimeStamp(file);
     if (stamp != null) return stamp.get(indexName);
     return 0;
   }
 }
Пример #3
0
 public static void update(
     final VirtualFile file, final ID<?, ?> indexName, final long indexCreationStamp) {
   synchronized (getStripedLock(file)) {
     try {
       Timestamps stamp = createOrGetTimeStamp(file);
       if (stamp != null) stamp.set(indexName, indexCreationStamp);
     } catch (InvalidVirtualFileAccessException ignored /*ok to ignore it here*/) {
     }
   }
 }
Пример #4
0
 @Override
 protected void onDropFromCache(final VirtualFile key, final Timestamps value) {
   try {
     if (value.isDirty()) {
       final DataOutputStream sink = Timestamps.PERSISTENCE.writeAttribute(key);
       value.writeToStream(sink);
       sink.close();
     }
   } catch (InvalidVirtualFileAccessException ignored /*ok to ignore it here*/) {
   } catch (IOException e) {
     throw new RuntimeException(e);
   }
 }
Пример #5
0
 @Test
 public void testCheckGoodStartTimestamp() {
   assertEquals(GOOD_TIMESTAMP, Timestamps.checkTimestamp(GOOD_TIMESTAMP));
 }
Пример #6
0
 @Test(expected = IllegalArgumentException.class)
 public void testCheckTimestampNegativeTimestamp() {
   Timestamps.checkTimestamp(BAD_TIMESTAMP);
 }