You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tubemq.apache.org by yu...@apache.org on 2021/01/11 02:18:06 UTC
[incubator-tubemq] branch master updated: [TUBEMQ-500] Add setting
operate API (#389)
This is an automated email from the ASF dual-hosted git repository.
yuanbo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tubemq.git
The following commit(s) were added to refs/heads/master by this push:
new 0b3581a [TUBEMQ-500] Add setting operate API (#389)
0b3581a is described below
commit 0b3581a740f47abce7e91489c99d12b03b95cece
Author: gosonzhang <46...@qq.com>
AuthorDate: Mon Jan 11 10:17:54 2021 +0800
[TUBEMQ-500] Add setting operate API (#389)
Co-authored-by: gosonzhang <go...@tencent.com>
---
.../tubemq/client/producer/AllowedSetting.java | 61 ++++++++
.../org/apache/tubemq/corebase/TBaseConstants.java | 1 +
.../apache/tubemq/corebase/utils/MixedUtils.java | 9 --
.../tubemq/corebase/utils/SettingValidUtils.java | 39 +++++
.../tubemq/server/common/fielddef/WebFieldDef.java | 14 +-
.../server/common/utils/WebParameterUtils.java | 165 ++++++++++++++-------
.../bdbentitys/BdbClusterSettingEntity.java | 17 +--
.../nodemanage/nodebroker/BrokerConfManager.java | 62 ++------
.../master/web/handler/WebMasterInfoHandler.java | 119 ++++++++++++++-
9 files changed, 353 insertions(+), 134 deletions(-)
diff --git a/tubemq-client/src/main/java/org/apache/tubemq/client/producer/AllowedSetting.java b/tubemq-client/src/main/java/org/apache/tubemq/client/producer/AllowedSetting.java
new file mode 100644
index 0000000..cabf928
--- /dev/null
+++ b/tubemq-client/src/main/java/org/apache/tubemq/client/producer/AllowedSetting.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tubemq.client.producer;
+
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.tubemq.corebase.TBaseConstants;
+import org.apache.tubemq.corebase.protobuf.generated.ClientMaster;
+import org.apache.tubemq.corebase.utils.SettingValidUtils;
+
+/**
+ * The class class caches the dynamic settings
+ * returned from the server.
+ */
+public class AllowedSetting {
+ private AtomicLong configId =
+ new AtomicLong(TBaseConstants.META_VALUE_UNDEFINED);
+ private AtomicInteger maxMsgSize =
+ new AtomicInteger(TBaseConstants.META_MAX_MESSAGE_DATA_SIZE);
+
+ public AllowedSetting() {
+
+ }
+
+ // set master returned configure
+ public void updAllowedSetting(ClientMaster.ApprovedClientConfig allowedConfig) {
+ if (allowedConfig != null) {
+ if (configId.get() != allowedConfig.getConfigId()) {
+ configId.set(allowedConfig.getConfigId());
+ }
+ if (allowedConfig.hasMaxMsgSize()
+ && allowedConfig.getMaxMsgSize() != maxMsgSize.get()) {
+ maxMsgSize.set(
+ SettingValidUtils.validAndGetMaxMsgSize(allowedConfig.getMaxMsgSize()));
+ }
+ }
+ }
+
+ public long getConfigId() {
+ return configId.get();
+ }
+
+ public int getMaxMsgSize() {
+ return maxMsgSize.get();
+ }
+}
diff --git a/tubemq-core/src/main/java/org/apache/tubemq/corebase/TBaseConstants.java b/tubemq-core/src/main/java/org/apache/tubemq/corebase/TBaseConstants.java
index 2f1be7a..d91b083 100644
--- a/tubemq-core/src/main/java/org/apache/tubemq/corebase/TBaseConstants.java
+++ b/tubemq-core/src/main/java/org/apache/tubemq/corebase/TBaseConstants.java
@@ -31,6 +31,7 @@ public class TBaseConstants {
public static final int META_MAX_MSGTYPE_LENGTH = 255;
public static final int META_MAX_MESSAGE_HEADER_SIZE = 1024;
public static final int META_MAX_MESSAGE_DATA_SIZE = 1024 * 1024;
+ public static final int META_MAX_MESSAGE_DATA_SIZE_UPPER_LIMIT = 20 * 1024 * 1024;
public static final int META_MAX_PARTITION_COUNT = 100;
public static final int META_MAX_BROKER_IP_LENGTH = 32;
public static final int META_MAX_USERNAME_LENGTH = 64;
diff --git a/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MixedUtils.java b/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MixedUtils.java
index bcd0738..bfbedad 100644
--- a/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MixedUtils.java
+++ b/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MixedUtils.java
@@ -92,13 +92,4 @@ public class MixedUtils {
dataBuffer.flip();
return dataBuffer.array();
}
-
- // get the middle data between min, max, and data
- public static int mid(int data, int min, int max) {
- return Math.max(min, Math.min(max, data));
- }
-
- public static long mid(long data, long min, long max) {
- return Math.max(min, Math.min(max, data));
- }
}
diff --git a/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/SettingValidUtils.java b/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/SettingValidUtils.java
new file mode 100644
index 0000000..4a206ef
--- /dev/null
+++ b/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/SettingValidUtils.java
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tubemq.corebase.utils;
+
+import org.apache.tubemq.corebase.TBaseConstants;
+
+
+public class SettingValidUtils {
+
+ // get the middle data between min, max, and data
+ public static int mid(int data, int min, int max) {
+ return Math.max(min, Math.min(max, data));
+ }
+
+ public static long mid(long data, long min, long max) {
+ return Math.max(min, Math.min(max, data));
+ }
+
+ public static int validAndGetMaxMsgSize(int inMaxMsgSize) {
+ return mid(inMaxMsgSize,
+ TBaseConstants.META_MAX_MESSAGE_DATA_SIZE,
+ TBaseConstants.META_MAX_MESSAGE_DATA_SIZE_UPPER_LIMIT);
+ }
+}
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/common/fielddef/WebFieldDef.java b/tubemq-server/src/main/java/org/apache/tubemq/server/common/fielddef/WebFieldDef.java
index a65a223..05688a7 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/common/fielddef/WebFieldDef.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/common/fielddef/WebFieldDef.java
@@ -84,7 +84,19 @@ public enum WebFieldDef {
OFFSETJSON(21, "offsetJsonInfo", "offsetInfo",
WebFieldType.JSONTYPE, "The offset info that needs to be added or modified"),
ONLYMEM(22, "onlyMemory", "onlyMem", WebFieldType.BOOLEAN,
- "Only clear the offset data in the memory cache, default is false");
+ "Only clear the offset data in the memory cache, default is false"),
+ ADMINAUTHTOKEN(23, "confModAuthToken", "authToken", WebFieldType.STRING,
+ "Admin api operation authorization code",
+ TServerConstants.CFG_MODAUTHTOKEN_MAX_LENGTH),
+ MAXMSGSIZE(24, "maxMsgSize", "maxMsgSize", WebFieldType.INT,
+ "Max allowed message size", RegexDef.TMP_NUMBER),
+ CREATEDATE(25, "createDate", "cDate", WebFieldType.STRING,
+ "Record creation date", TBaseConstants.META_MAX_DATEVALUE_LENGTH),
+ MODIFYDATE(26, "modifyDate", "mDate", WebFieldType.STRING,
+ "Record modification date", TBaseConstants.META_MAX_DATEVALUE_LENGTH);
+
+
+
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/WebParameterUtils.java b/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/WebParameterUtils.java
index f309ab7..385fe22 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/WebParameterUtils.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/WebParameterUtils.java
@@ -246,6 +246,10 @@ public class WebParameterUtils {
return strBuffer.append("{\"result\":true,\"errCode\":0,\"errMsg\":\"OK\"}");
}
+ public static StringBuilder buildSuccessResult(StringBuilder strBuffer, String appendInfo) {
+ return strBuffer.append("{\"result\":true,\"errCode\":0,\"errMsg\":\"").
+ append(appendInfo).append("\"}");
+ }
/**
* Parse the parameter value from an object value to a long value
*
@@ -273,10 +277,9 @@ public class WebParameterUtils {
long paramIntVal = Long.parseLong(paramValue);
result.setSuccResult(paramIntVal);
} catch (Throwable e) {
- result.setFailResult(400,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name).append(" parse error: ")
- .append(e.getMessage()).toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" parse error: ").append(e.getMessage()).toString());
}
return result.success;
}
@@ -429,10 +432,9 @@ public class WebParameterUtils {
// Check if the parameter exists
if (TStringUtils.isBlank(paramValue)) {
if (required) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append(" is missing or value is null or blank!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" is missing or value is null or blank!").toString());
} else {
procStringDefValue(fieldDef.isCompFieldType(), defValue, result);
}
@@ -455,10 +457,9 @@ public class WebParameterUtils {
// check if is empty result
if (valItemSet.isEmpty()) {
if (required) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append(" is missing or value is null or blank!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" is missing or value is null or blank!").toString());
} else {
procStringDefValue(fieldDef.isCompFieldType(), defValue, result);
}
@@ -467,11 +468,10 @@ public class WebParameterUtils {
// check max item count
if (fieldDef.itemMaxCnt != TBaseConstants.META_VALUE_UNDEFINED) {
if (valItemSet.size() > fieldDef.itemMaxCnt) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append("'s item count over max allowed count (")
- .append(fieldDef.itemMaxCnt).append(")!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append("'s item count over max allowed count (")
+ .append(fieldDef.itemMaxCnt).append(")!").toString());
}
}
result.setSuccResult(valItemSet);
@@ -511,10 +511,9 @@ public class WebParameterUtils {
// Check if the parameter exists
if (TStringUtils.isBlank(paramValue)) {
if (required) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append(" is missing or value is null or blank!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" is missing or value is null or blank!").toString());
} else {
result.setSuccResult(defValue);
}
@@ -524,18 +523,15 @@ public class WebParameterUtils {
paramValue = URLDecoder.decode(paramValue,
TBaseConstants.META_DEFAULT_CHARSET_NAME);
} catch (UnsupportedEncodingException e) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append(" decode error, exception is ")
- .append(e.toString()).toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" decode error, exception is ")
+ .append(e.toString()).toString());
}
if (TStringUtils.isBlank(paramValue)) {
if (required) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append("'s value is blank!").toString());
+ result.setFailResult(new StringBuilder(512).append("Parameter ")
+ .append(fieldDef.name).append("'s value is blank!").toString());
} else {
result.setSuccResult(defValue);
}
@@ -543,11 +539,10 @@ public class WebParameterUtils {
}
if (fieldDef.valMaxLen != TBaseConstants.META_VALUE_UNDEFINED) {
if (paramValue.length() > fieldDef.valMaxLen) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append("'s length over max allowed length (")
- .append(fieldDef.valMaxLen).append(")!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append("'s length over max allowed length (")
+ .append(fieldDef.valMaxLen).append(")!").toString());
return result.success;
}
}
@@ -557,11 +552,71 @@ public class WebParameterUtils {
new TypeToken<Map<String, Long>>(){}.getType());
result.setSuccResult(manOffsets);
} catch (Throwable e) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name)
- .append(" value parse failure, error is ")
- .append(e.getMessage()).append("!").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" value parse failure, error is ")
+ .append(e.getMessage()).append("!").toString());
+ }
+ return result.success;
+ }
+
+ /**
+ * Parse the parameter value from an string value to Date value
+ *
+ * @param req Http Servlet Request
+ * @param fieldDef the parameter field definition
+ * @param required a boolean value represent whether the parameter is must required
+ * @param defValue a default value returned if failed to parse value from the given object
+ * @param result process result
+ * @return valid result for the parameter value
+ */
+ public static boolean getDateParameter(HttpServletRequest req,
+ WebFieldDef fieldDef,
+ boolean required,
+ Date defValue,
+ ProcessResult result) {
+ if (!getStringParamValue(req, fieldDef, required, null, result)) {
+ return result.success;
+ }
+ String paramValue = (String) result.retData1;
+ if (paramValue == null) {
+ result.setSuccResult(defValue);
+ return result.success;
+ }
+ try {
+ DateFormat sdf = new SimpleDateFormat(TBaseConstants.META_TMP_DATE_VALUE);
+ Date date = sdf.parse(paramValue);
+ result.setSuccResult(date);
+ } catch (Throwable e) {
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" parse error: ").append(e.getMessage()).toString());
+ }
+ return result.success;
+ }
+
+ /**
+ * Valid execution authorization info
+ * @param req Http Servlet Request
+ * @param fieldDef the parameter field definition
+ * @param required a boolean value represent whether the parameter is must required
+ * @param master current master object
+ * @param result process result
+ * @return valid result for the parameter value
+ */
+ public static boolean validReqAuthorizeInfo(HttpServletRequest req,
+ WebFieldDef fieldDef,
+ boolean required,
+ TMaster master,
+ ProcessResult result) {
+ if (!getStringParamValue(req, fieldDef, required, null, result)) {
+ return result.success;
+ }
+ String paramValue = (String) result.retData1;
+ if (paramValue != null) {
+ if (!paramValue.equals(master.getMasterConfig().getConfModAuthToken())) {
+ result.setFailResult("Illegal access, unauthorized request!");
+ }
}
return result.success;
}
@@ -608,20 +663,20 @@ public class WebParameterUtils {
// check value's max length
if (fieldDef.valMaxLen != TBaseConstants.META_VALUE_UNDEFINED) {
if (paramVal.length() > fieldDef.valMaxLen) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("over max length for ")
- .append(fieldDef.name).append(", only allow ")
- .append(fieldDef.valMaxLen).append(" length").toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("over max length for ").append(fieldDef.name)
+ .append(", only allow ").append(fieldDef.valMaxLen)
+ .append(" length").toString());
return false;
}
}
// check value's pattern
if (fieldDef.regexCheck) {
if (!paramVal.matches(fieldDef.regexDef.getPattern())) {
- result.setFailResult(fieldDef.id,
- new StringBuilder(512).append("illegal value for ")
- .append(fieldDef.name).append(", value ")
- .append(fieldDef.regexDef.getErrMsgTemp()).toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("illegal value for ").append(fieldDef.name)
+ .append(", value ").append(fieldDef.regexDef.getErrMsgTemp())
+ .toString());
return false;
}
}
@@ -647,18 +702,16 @@ public class WebParameterUtils {
try {
int paramIntVal = Integer.parseInt(paramValue);
if (hasMinVal && paramIntVal < minValue) {
- result.setFailResult(400,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name).append(" value must >= ")
- .append(minValue).toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" value must >= ").append(minValue).toString());
return false;
}
result.setSuccResult(paramIntVal);
} catch (Throwable e) {
- result.setFailResult(400,
- new StringBuilder(512).append("Parameter ")
- .append(fieldDef.name).append(" parse error: ")
- .append(e.getMessage()).toString());
+ result.setFailResult(new StringBuilder(512)
+ .append("Parameter ").append(fieldDef.name)
+ .append(" parse error: ").append(e.getMessage()).toString());
return false;
}
return true;
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/bdbstore/bdbentitys/BdbClusterSettingEntity.java b/tubemq-server/src/main/java/org/apache/tubemq/server/master/bdbstore/bdbentitys/BdbClusterSettingEntity.java
index ca6e1b4..588fd87 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/bdbstore/bdbentitys/BdbClusterSettingEntity.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/master/bdbstore/bdbentitys/BdbClusterSettingEntity.java
@@ -33,7 +33,7 @@ import org.apache.tubemq.server.common.utils.WebParameterUtils;
@Entity
public class BdbClusterSettingEntity implements Serializable {
- private static final long serialVersionUID = -3259439355290322115L;
+ private static final long serialVersionUID = 3259439355290322115L;
@PrimaryKey
private String recordKey = "";
@@ -62,7 +62,7 @@ public class BdbClusterSettingEntity implements Serializable {
private String deleteWhen = ""; //delete policy execute time
private int qryPriorityId = TBaseConstants.META_VALUE_UNDEFINED;
private int maxMsgSize = TBaseConstants.META_VALUE_UNDEFINED;
- private String attributes; //extra attribute
+ private String attributes = ""; //extra attribute
private String modifyUser; //modify user
private Date modifyDate; //modify date
@@ -235,22 +235,19 @@ public class BdbClusterSettingEntity implements Serializable {
this.attributes = attributes;
}
- public String getModifyUser() {
- return modifyUser;
+ public void setModifyInfo(String modifyUser, Date modifyDate) {
+ this.modifyUser = modifyUser;
+ this.modifyDate = modifyDate;
}
- public void setModifyUser(String modifyUser) {
- this.modifyUser = modifyUser;
+ public String getModifyUser() {
+ return modifyUser;
}
public Date getModifyDate() {
return modifyDate;
}
- public void setModifyDate(Date modifyDate) {
- this.modifyDate = modifyDate;
- }
-
/**
* Serialize field to json format
*
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/nodemanage/nodebroker/BrokerConfManager.java b/tubemq-server/src/main/java/org/apache/tubemq/server/master/nodemanage/nodebroker/BrokerConfManager.java
index 86a6bc4..3eae7dc 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/nodemanage/nodebroker/BrokerConfManager.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/master/nodemanage/nodebroker/BrokerConfManager.java
@@ -2020,64 +2020,27 @@ public class BrokerConfManager implements Server {
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
- * Add cluster default setting
+ * Add or update cluster default setting
*
* @param bdbEntity the cluster default setting entity will be add
* @return true if success otherwise false
* @throws Exception
*/
- public boolean confAddBdbClusterDefSetting(BdbClusterSettingEntity bdbEntity)
+ public boolean confSetBdbClusterDefSetting(BdbClusterSettingEntity bdbEntity)
throws Exception {
validMasterStatus();
- BdbClusterSettingEntity curEntity =
- clusterSettingMap.get(bdbEntity.getRecordKey());
- if (curEntity != null) {
- throw new Exception(new StringBuilder(512)
- .append("Duplicate add ClusterSetting info, exist record is: ")
- .append(curEntity).toString());
- }
- boolean putResult =
+ bdbEntity.setRecordKey(TServerConstants.TOKEN_DEFAULT_CLUSTER_SETTING);
+ boolean result =
mBdbStoreManagerService.putBdbClusterConfEntity(bdbEntity, true);
- if (putResult) {
- clusterSettingMap.put(bdbEntity.getRecordKey(), bdbEntity);
- logger.info(new StringBuilder(512)
- .append("[ClusterSetting Success] ")
- .append(bdbEntity).toString());
- return true;
- }
- return false;
- }
-
- /**
- * update cluster default setting
- *
- * @param bdbEntity the cluster setting entity will be set
- * @return true if success otherwise false
- * @throws Exception
- */
- public boolean confUpdBdbClusterSetting(BdbClusterSettingEntity bdbEntity)
- throws Exception {
- validMasterStatus();
+ clusterSettingMap.put(TServerConstants.TOKEN_DEFAULT_CLUSTER_SETTING, bdbEntity);
StringBuilder strBuffer = new StringBuilder(512);
- BdbClusterSettingEntity curDefSettingEntity =
- clusterSettingMap.get(bdbEntity.getRecordKey());
- if (curDefSettingEntity == null) {
- throw new Exception(strBuffer
- .append("Update ClusterSetting failure, not exist record for record: ")
- .append(bdbEntity.getRecordKey()).toString());
- }
- boolean putResult =
- mBdbStoreManagerService.putBdbClusterConfEntity(bdbEntity, false);
- if (putResult) {
- clusterSettingMap.put(bdbEntity.getRecordKey(), bdbEntity);
- strBuffer.append("[confUpdBdbClusterSetting Success] record from : ");
- strBuffer = curDefSettingEntity.toJsonString(strBuffer);
- strBuffer.append(" to : ");
- strBuffer = bdbEntity.toJsonString(strBuffer);
- logger.info(strBuffer.toString());
- return true;
+ if (result) {
+ strBuffer.append("[confSetBdbClusterDefSetting Success], add new record :");
+ } else {
+ strBuffer.append("[confSetBdbClusterDefSetting Success], update old record :");
}
- return false;
+ logger.info(bdbEntity.toJsonString(strBuffer).toString());
+ return true;
}
/**
@@ -2107,12 +2070,9 @@ public class BrokerConfManager implements Server {
return this.clusterSettingMap.get(TServerConstants.TOKEN_DEFAULT_CLUSTER_SETTING);
}
-
private void validMasterStatus() throws Exception {
if (!isSelfMaster()) {
throw new StandbyException("Please send your request to the master Node.");
}
}
-
-
}
diff --git a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebMasterInfoHandler.java b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebMasterInfoHandler.java
index 98cd36c..9afe1aa 100644
--- a/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebMasterInfoHandler.java
+++ b/tubemq-server/src/main/java/org/apache/tubemq/server/master/web/handler/WebMasterInfoHandler.java
@@ -17,10 +17,16 @@
package org.apache.tubemq.server.master.web.handler;
+import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
+import org.apache.tubemq.corebase.TBaseConstants;
+import org.apache.tubemq.corebase.utils.SettingValidUtils;
+import org.apache.tubemq.server.common.fielddef.WebFieldDef;
+import org.apache.tubemq.server.common.utils.ProcessResult;
import org.apache.tubemq.server.common.utils.WebParameterUtils;
import org.apache.tubemq.server.master.TMaster;
+import org.apache.tubemq.server.master.bdbstore.bdbentitys.BdbClusterSettingEntity;
import org.apache.tubemq.server.master.web.model.ClusterGroupVO;
import org.apache.tubemq.server.master.web.model.ClusterNodeVO;
@@ -43,9 +49,14 @@ public class WebMasterInfoHandler extends AbstractWebHandler {
// register query method
registerQueryWebMethod("admin_query_master_group_info",
"getGroupAddressStrInfo");
+ registerQueryWebMethod("admin_query_cluster_default_setting",
+ "adminQueryClusterDefSetting");
// register modify method
registerModifyWebMethod("admin_transfer_current_master",
"transferCurrentMaster");
+ // register modify method
+ registerModifyWebMethod("admin_set_cluster_default_setting",
+ "adminSetClusterDefSetting");
}
/**
@@ -94,17 +105,111 @@ public class WebMasterInfoHandler extends AbstractWebHandler {
* @return
*/
public StringBuilder transferCurrentMaster(HttpServletRequest req) {
- StringBuilder strBuffer = new StringBuilder(512);
+ ProcessResult result = new ProcessResult();
+ StringBuilder sBuilder = new StringBuilder(512);
+ // valid operation authorize info
+ if (!WebParameterUtils.validReqAuthorizeInfo(req,
+ WebFieldDef.ADMINAUTHTOKEN, true, master, result)) {
+ WebParameterUtils.buildFailResult(sBuilder, result.errInfo);
+ return sBuilder;
+ }
try {
- WebParameterUtils.reqAuthorizeCheck(master, brokerConfManager, req.getParameter("confModAuthToken"));
brokerConfManager.transferMaster();
- strBuffer.append("{\"result\":true,\"errCode\":0," +
- "\"errMsg\":\"TransferMaster method called, please wait 20 seconds!\"}");
+ WebParameterUtils.buildSuccessResult(sBuilder,
+ "TransferMaster method called, please wait 20 seconds!");
} catch (Exception e2) {
- strBuffer.append("{\"result\":false,\"errCode\":400,\"errMsg\":\"")
- .append(e2.getMessage()).append("\"}");
+ WebParameterUtils.buildFailResult(sBuilder, e2.getMessage());
}
- return strBuffer;
+ return sBuilder;
+ }
+
+ /**
+ * Query cluster default setting
+ *
+ * @param req
+ * @return
+ * @throws Exception
+ */
+ public StringBuilder adminQueryClusterDefSetting(HttpServletRequest req) {
+ StringBuilder sBuilder = new StringBuilder(512);
+ BdbClusterSettingEntity defClusterSetting =
+ brokerConfManager.getBdbClusterSetting();
+ sBuilder.append("{\"result\":true,\"errCode\":0,\"errMsg\":\"Ok\",\"data\":[");
+ if (defClusterSetting != null) {
+ defClusterSetting.toJsonString(sBuilder);
+ }
+ sBuilder.append("]}");
+ return sBuilder;
+ }
+
+ /**
+ * Add or modify cluster default setting
+ *
+ * @param req
+ * @return
+ */
+ public StringBuilder adminSetClusterDefSetting(HttpServletRequest req) {
+ boolean dataChanged = false;
+ ProcessResult result = new ProcessResult();
+ StringBuilder sBuilder = new StringBuilder(512);
+ // valid operation authorize info
+ if (!WebParameterUtils.validReqAuthorizeInfo(req,
+ WebFieldDef.ADMINAUTHTOKEN, true, master, result)) {
+ WebParameterUtils.buildFailResult(sBuilder, result.errInfo);
+ return sBuilder;
+ }
+ // check modify user field
+ if (!WebParameterUtils.getStringParamValue(req,
+ WebFieldDef.MODIFYUSER, true, null, result)) {
+ WebParameterUtils.buildFailResult(sBuilder, result.errInfo);
+ return sBuilder;
+ }
+ String modifyUser = (String) result.retData1;
+ // check max message size
+ if (!WebParameterUtils.getIntParamValue(req,
+ WebFieldDef.MAXMSGSIZE, false,
+ TBaseConstants.META_VALUE_UNDEFINED,
+ TBaseConstants.META_MAX_MESSAGE_DATA_SIZE,
+ result)) {
+ WebParameterUtils.buildFailResult(sBuilder, result.errInfo);
+ return sBuilder;
+ }
+ int maxMsgSize = (int) result.retData1;
+ if (maxMsgSize != TBaseConstants.META_VALUE_UNDEFINED) {
+ dataChanged = true;
+ }
+ // check and get modify date
+ if (!WebParameterUtils.getDateParameter(req,
+ WebFieldDef.MODIFYDATE, false, new Date(), result)) {
+ WebParameterUtils.buildFailResult(sBuilder, result.errInfo);
+ return sBuilder;
+ }
+ Date modifyDate = (Date) result.retData1;
+ if (!dataChanged) {
+ WebParameterUtils.buildSuccessResult(sBuilder, "No data is changed!");
+ return sBuilder;
+ }
+ // add or modify cluster setting info
+ BdbClusterSettingEntity defClusterSetting =
+ brokerConfManager.getBdbClusterSetting();
+ if (defClusterSetting == null) {
+ defClusterSetting = new BdbClusterSettingEntity();
+ }
+ defClusterSetting.setModifyInfo(modifyUser, modifyDate);
+ if (maxMsgSize != TBaseConstants.META_VALUE_UNDEFINED) {
+ defClusterSetting.setMaxMsgSize(
+ SettingValidUtils.validAndGetMaxMsgSize(maxMsgSize));
+ }
+ try {
+ brokerConfManager.confSetBdbClusterDefSetting(defClusterSetting);
+ WebParameterUtils.buildSuccessResult(sBuilder);
+ } catch (Exception e) {
+ WebParameterUtils.buildFailResult(sBuilder, e.getMessage());
+ }
+ return sBuilder;
}
+
+
+
}