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 4f2d51ef6fa1c4..964cbf1d1e7d14 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 void executeGet(BaseRequest request, BaseResponse response) { 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;