You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ca...@apache.org on 2021/09/16 02:28:49 UTC

[incubator-doris] branch master updated: [Meta][Refactor] Use lambda expressions to save Image (#6646)

This is an automated email from the ASF dual-hosted git repository.

caiconghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 67472f3  [Meta][Refactor] Use lambda expressions to save Image (#6646)
67472f3 is described below

commit 67472f35182eadb8920f0929b26fe05c6bbb40e7
Author: xy720 <22...@users.noreply.github.com>
AuthorDate: Thu Sep 16 10:28:40 2021 +0800

    [Meta][Refactor] Use lambda expressions to save Image (#6646)
    
    The original code in MetaWriter is tedious,So I try use lambda expressions to make the code more clean.
---
 .../java/org/apache/doris/catalog/Catalog.java     |   2 +-
 .../java/org/apache/doris/common/MetaWriter.java   | 106 +++++++++++----------
 2 files changed, 56 insertions(+), 52 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
index e12b8a2..265e1da 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
@@ -2252,7 +2252,7 @@ public class Catalog {
         return checksum;
     }
 
-    public long saveSqlBlockRule(DataOutputStream out, long checksum) throws IOException {
+    public long saveSqlBlockRule(CountingDataOutputStream out, long checksum) throws IOException {
         Catalog.getCurrentCatalog().getSqlBlockRuleMgr().write(out);
         return checksum;
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/MetaWriter.java b/fe/fe-core/src/main/java/org/apache/doris/common/MetaWriter.java
index a58f4f5..6b9d9aa 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/MetaWriter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/MetaWriter.java
@@ -19,6 +19,7 @@ package org.apache.doris.common;
 
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.common.io.CountingDataOutputStream;
+
 import com.google.common.collect.Lists;
 
 import org.apache.logging.log4j.LogManager;
@@ -65,71 +66,74 @@ import java.util.List;
 public class MetaWriter {
     private static final Logger LOG = LogManager.getLogger(MetaWriter.class);
 
+    public static MetaWriter writer = new MetaWriter();
+
+    private interface Delegate {
+        long doWork(String name, WriteMethod method) throws IOException;
+    }
+
+    private interface WriteMethod {
+        long write() throws IOException;
+    }
+
+    private Delegate delegate;
+
+    public void setDelegate(CountingDataOutputStream dos, List<MetaIndex> indices) {
+        this.delegate = (name, method) -> {
+            indices.add(new MetaIndex(name, dos.getCount()));
+            return method.write();
+        };
+    }
+
+    public long doWork(String name, WriteMethod method) throws IOException {
+        if(delegate == null){
+            return method.write();
+        }
+        return delegate.doWork(name, method);
+    }
+
     public static void write(File imageFile, Catalog catalog) throws IOException {
         // save image does not need any lock. because only checkpoint thread will call this method.
         LOG.info("start save image to {}. is ckpt: {}", imageFile.getAbsolutePath(), Catalog.isCheckpointThread());
 
-        long checksum = 0;
+        final Reference<Long> checksum = new Reference<>(0L);
         long saveImageStartTime = System.currentTimeMillis();
         long startPosition = MetaHeader.write(imageFile);
         List<MetaIndex> metaIndices = Lists.newArrayList();
         try (CountingDataOutputStream dos = new CountingDataOutputStream(new BufferedOutputStream(
                 new FileOutputStream(imageFile, true)), startPosition)) {
+            writer.setDelegate(dos, metaIndices);
             long replayedJournalId = catalog.getReplayedJournalId();
-            metaIndices.add(new MetaIndex("header", dos.getCount()));
-            checksum = catalog.saveHeader(dos, replayedJournalId, checksum);
-            metaIndices.add(new MetaIndex("masterInfo", dos.getCount()));
-            checksum = catalog.saveMasterInfo(dos, checksum);
-            metaIndices.add(new MetaIndex("frontends", dos.getCount()));
-            checksum = catalog.saveFrontends(dos, checksum);
-            metaIndices.add(new MetaIndex("backends", dos.getCount()));
-            checksum = Catalog.getCurrentSystemInfo().saveBackends(dos, checksum);
-            metaIndices.add(new MetaIndex("db", dos.getCount()));
-            checksum = catalog.saveDb(dos, checksum);
-            metaIndices.add(new MetaIndex("loadJob", dos.getCount()));
-            checksum = catalog.saveLoadJob(dos, checksum);
-            metaIndices.add(new MetaIndex("alterJob", dos.getCount()));
-            checksum = catalog.saveAlterJob(dos, checksum);
-            metaIndices.add(new MetaIndex("recycleBin", dos.getCount()));
-            checksum = catalog.saveRecycleBin(dos, checksum);
-            metaIndices.add(new MetaIndex("globalVariable", dos.getCount()));
-            checksum = catalog.saveGlobalVariable(dos, checksum);
-            metaIndices.add(new MetaIndex("cluster", dos.getCount()));
-            checksum = catalog.saveCluster(dos, checksum);
-            metaIndices.add(new MetaIndex("broker", dos.getCount()));
-            checksum = catalog.saveBrokers(dos, checksum);
-            metaIndices.add(new MetaIndex("resources", dos.getCount()));
-            checksum = catalog.saveResources(dos, checksum);
-            metaIndices.add(new MetaIndex("exportJob", dos.getCount()));
-            checksum = catalog.saveExportJob(dos, checksum);
-            metaIndices.add(new MetaIndex("syncJob", dos.getCount()));
-            checksum = catalog.saveSyncJobs(dos, checksum);
-            metaIndices.add(new MetaIndex("backupHandler", dos.getCount()));
-            checksum = catalog.saveBackupHandler(dos, checksum);
-            metaIndices.add(new MetaIndex("paloAuth", dos.getCount()));
-            checksum = catalog.savePaloAuth(dos, checksum);
-            metaIndices.add(new MetaIndex("transactionState", dos.getCount()));
-            checksum = catalog.saveTransactionState(dos, checksum);
-            metaIndices.add(new MetaIndex("colocateTableIndex", dos.getCount()));
-            checksum = catalog.saveColocateTableIndex(dos, checksum);
-            metaIndices.add(new MetaIndex("routineLoadJobs", dos.getCount()));
-            checksum = catalog.saveRoutineLoadJobs(dos, checksum);
-            metaIndices.add(new MetaIndex("loadJobV2", dos.getCount()));
-            checksum = catalog.saveLoadJobsV2(dos, checksum);
-            metaIndices.add(new MetaIndex("smallFiles", dos.getCount()));
-            checksum = catalog.saveSmallFiles(dos, checksum);
-            metaIndices.add(new MetaIndex("plugins", dos.getCount()));
-            checksum = catalog.savePlugins(dos, checksum);
-            metaIndices.add(new MetaIndex("deleteHandler", dos.getCount()));
-            checksum = catalog.saveDeleteHandler(dos, checksum);
-            metaIndices.add(new MetaIndex("sqlBlockRule", dos.getCount()));
-            checksum = catalog.saveSqlBlockRule(dos, checksum);
+            checksum.setRef(writer.doWork("header", () -> catalog.saveHeader(dos, replayedJournalId, checksum.getRef())));
+            checksum.setRef(writer.doWork("masterInfo", () -> catalog.saveMasterInfo(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("frontends", () -> catalog.saveFrontends(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("backends", () -> Catalog.getCurrentSystemInfo().saveBackends(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("db", () -> catalog.saveDb(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("loadJob", () -> catalog.saveLoadJob(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("alterJob", () -> catalog.saveAlterJob(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("recycleBin", () -> catalog.saveRecycleBin(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("globalVariable", () -> catalog.saveGlobalVariable(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("cluster", () -> catalog.saveCluster(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("broker", () -> catalog.saveBrokers(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("resources", () -> catalog.saveResources(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("exportJob", () -> catalog.saveExportJob(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("syncJob", () -> catalog.saveSyncJobs(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("backupHandler", () -> catalog.saveBackupHandler(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("paloAuth", () -> catalog.savePaloAuth(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("transactionState", () -> catalog.saveTransactionState(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("colocateTableIndex", () -> catalog.saveColocateTableIndex(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("routineLoadJobs", () -> catalog.saveRoutineLoadJobs(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("loadJobV2", () -> catalog.saveLoadJobsV2(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("smallFiles", () -> catalog.saveSmallFiles(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("plugins", () -> catalog.savePlugins(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("deleteHandler", () -> catalog.saveDeleteHandler(dos, checksum.getRef())));
+            checksum.setRef(writer.doWork("sqlBlockRule", () -> catalog.saveSqlBlockRule(dos, checksum.getRef())));
         }
-        MetaFooter.write(imageFile, metaIndices, checksum);
+        MetaFooter.write(imageFile, metaIndices, checksum.getRef());
 
         long saveImageEndTime = System.currentTimeMillis();
         LOG.info("finished save image {} in {} ms. checksum is {}",
-                imageFile.getAbsolutePath(), (saveImageEndTime - saveImageStartTime), checksum);
+                imageFile.getAbsolutePath(), (saveImageEndTime - saveImageStartTime), checksum.getRef());
     }
 
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org