From 2ddf537094370981ec860742e9d0cc4fac72b53c Mon Sep 17 00:00:00 2001 From: gengjun-git <54172532+gengjun-git@users.noreply.github.com> Date: Sat, 23 Jan 2021 21:08:04 +0800 Subject: [PATCH] [Meta] Add some consistency check in image put api (#5219) --- .../apache/doris/http/meta/MetaService.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/http/meta/MetaService.java b/fe/fe-core/src/main/java/org/apache/doris/http/meta/MetaService.java index 631b579f02..a707900035 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/http/meta/MetaService.java +++ b/fe/fe-core/src/main/java/org/apache/doris/http/meta/MetaService.java @@ -173,7 +173,28 @@ public class MetaService { writeResponse(request, response, HttpResponseStatus.BAD_REQUEST); return; } - checkLongParam(versionStr); + + long version = checkLongParam(versionStr); + + // for master node, reject image put + if (Catalog.getCurrentCatalog().isMaster()) { + response.appendContent("this node is master, reject image put"); + writeResponse(request, response, HttpResponseStatus.BAD_REQUEST); + LOG.error("this node is master, but receive image put from host {}, reject it", machine); + return; + } + + // do not accept image whose version is bigger than max journalId + // if accepted, newly added log will not be replayed when restart + long maxJournalId = Catalog.getCurrentCatalog().getMaxJournalId(); + if (version > maxJournalId) { + response.appendContent("image version [" + version + "] is bigger than local max journal id [" + + maxJournalId + "], reject image put"); + writeResponse(request, response, HttpResponseStatus.BAD_REQUEST); + LOG.error("receive image whose version [{}] is bigger than local max journal id [{}], reject it", + version, maxJournalId); + return; + } String url = "http://" + machine + ":" + portStr + "/image?version=" + versionStr;