瀏覽代碼

Replace CAS loop by updateAndGet to improve readability

Relates #28737
Nhat Nguyen 7 年之前
父節點
當前提交
0c2871c4d2
共有 1 個文件被更改,包括 3 次插入10 次删除
  1. 3 10
      server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java

+ 3 - 10
server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java

@@ -1020,21 +1020,14 @@ public class InternalEngine extends Engine {
      */
     private boolean mayHaveBeenIndexedBefore(Index index) {
         assert canOptimizeAddDocument(index);
-        boolean mayHaveBeenIndexBefore;
-        long deOptimizeTimestamp = maxUnsafeAutoIdTimestamp.get();
+        final boolean mayHaveBeenIndexBefore;
         if (index.isRetry()) {
             mayHaveBeenIndexBefore = true;
-            do {
-                deOptimizeTimestamp = maxUnsafeAutoIdTimestamp.get();
-                if (deOptimizeTimestamp >= index.getAutoGeneratedIdTimestamp()) {
-                    break;
-                }
-            } while (maxUnsafeAutoIdTimestamp.compareAndSet(deOptimizeTimestamp,
-                index.getAutoGeneratedIdTimestamp()) == false);
+            maxUnsafeAutoIdTimestamp.updateAndGet(curr -> Math.max(index.getAutoGeneratedIdTimestamp(), curr));
             assert maxUnsafeAutoIdTimestamp.get() >= index.getAutoGeneratedIdTimestamp();
         } else {
             // in this case we force
-            mayHaveBeenIndexBefore = deOptimizeTimestamp >= index.getAutoGeneratedIdTimestamp();
+            mayHaveBeenIndexBefore = maxUnsafeAutoIdTimestamp.get() >= index.getAutoGeneratedIdTimestamp();
         }
         return mayHaveBeenIndexBefore;
     }