This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch tsbs/iot
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/tsbs/iot by this push:
new ad1b38d8161 take null attribute into account
ad1b38d8161 is described below
commit ad1b38d81614f1d40c3afcb19bef2f04ae61970e
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 7 20:58:09 2024 +0800
take null attribute into account
---
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 24 +++++++--------
.../apache/iotdb/db/utils/QueryDataSetUtils.java | 36 +++++++++++++---------
2 files changed, 33 insertions(+), 27 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index f026e3f1d99..f1c02d96852 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -277,8 +277,6 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
private static final String NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME =
"nominal_fuel_consumption";
- private static final String FUEL_CAPACITY_COLUMN_NAME = "fuel_capacity";
-
private static final String FLEET_COLUMN_NAME = "fleet";
private static final String MODEL_COLUMN_NAME = "model";
@@ -531,17 +529,15 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
private volatile Map<String, DeviceAttributes> deviceAttributesHashMap =
null;
public static class DeviceAttributes {
- public final double nominalFuelConsumption;
+ public final Double nominalFuelConsumption;
- public final double loadCapacity;
+ public final Double loadCapacity;
- public final double fuelCapacity;
public DeviceAttributes(
- double nominalFuelConsumption, double loadCapacity, double
fuelCapacity) {
+ Double nominalFuelConsumption, Double loadCapacity) {
this.nominalFuelConsumption = nominalFuelConsumption;
this.loadCapacity = loadCapacity;
- this.fuelCapacity = fuelCapacity;
}
}
@@ -2558,9 +2554,12 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
String key = tmpArray[0].substring(1,
tmpArray[0].length() - 1);
String value = tmpArray[1].substring(1,
tmpArray[1].length() - 1);
if (NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME.equals(key)
- || LOAD_CAPACITY_COLUMN_NAME.equals(key)
- || FUEL_CAPACITY_COLUMN_NAME.equals(key)) {
- parsedMap.put(key, Double.parseDouble(value));
+ || LOAD_CAPACITY_COLUMN_NAME.equals(key)) {
+ try {
+ parsedMap.put(key, Double.parseDouble(value));
+ } catch (NumberFormatException e) {
+ // ignore
+ }
}
}
}
@@ -2569,9 +2568,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
tmp.put(
timeSeries.substring(16, timeSeries.length() - 5),
new DeviceAttributes(
-
parsedMap.getOrDefault(NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME, 1.0d),
- parsedMap.getOrDefault(LOAD_CAPACITY_COLUMN_NAME,
1.0d),
- parsedMap.getOrDefault(FUEL_CAPACITY_COLUMN_NAME,
1.0d)));
+
parsedMap.get(NOMINAL_FUEL_CONSUMPTION_COLUMN_NAME),
+ parsedMap.get(LOAD_CAPACITY_COLUMN_NAME)));
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
index 94a7dfa182d..1fd6ae0c756 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
@@ -908,9 +908,9 @@ public class QueryDataSetUtils {
String driver = seriesArray[DRIVER_LEVEL];
double value =
Double.parseDouble(valueColumn.getBinary(i).getStringValue(StandardCharsets.UTF_8));
- double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
+ Double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
- if (value >= 0.9 * loadCapacity) {
+ if (loadCapacity != null && value >= 0.9 * loadCapacity) {
builder.declarePosition();
// time column
timeColumnBuilder.writeLong(tsBlock.getTimeByIndex(i));
@@ -1037,8 +1037,10 @@ public class QueryDataSetUtils {
String[] seriesArray = deviceId.split("\\.");
String model = seriesArray[MODEL_LEVEL];
String name = seriesArray[NAME_LEVEL];
- double nominalFuelConsumption =
deviceAttributesMap.get(name).nominalFuelConsumption;
-
+ Double nominalFuelConsumption =
deviceAttributesMap.get(name).nominalFuelConsumption;
+ if (nominalFuelConsumption == null) {
+ continue;
+ }
AvgIntermediateResult result =
map.computeIfAbsent(model, k -> new AvgIntermediateResult());
long count = countFuelColumn.getLong(i);
@@ -1341,12 +1343,14 @@ public class QueryDataSetUtils {
String model = deviceArray[MODEL_LEVEL];
String name = deviceArray[NAME_LEVEL];
double avgLoad = avgLoadColumn.getDouble(i);
- double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
+ Double loadCapacity = deviceAttributesMap.get(name).loadCapacity;
AvgLoadKey key = new AvgLoadKey(fleet, model, loadCapacity);
AvgLoadIntermediateResult intermediateResult =
map.computeIfAbsent(key, k -> new AvgLoadIntermediateResult());
- intermediateResult.sum += (avgLoad / loadCapacity);
- intermediateResult.count++;
+ if (loadCapacity != null) {
+ intermediateResult.sum += (avgLoad / loadCapacity);
+ intermediateResult.count++;
+ }
}
}
}
@@ -1365,8 +1369,13 @@ public class QueryDataSetUtils {
timeColumnBuilder.writeLong(0L);
fleetColumnBuilder.writeBinary(new Binary(k.fleet,
StandardCharsets.UTF_8));
modelColumnBuilder.writeBinary(new Binary(k.model,
StandardCharsets.UTF_8));
- loadCapacityColumnBuilder.writeDouble(k.loadCapacity);
- avgLoadColumnBuilder.writeDouble(v.sum / v.count);
+ if (k.loadCapacity == null) {
+ loadCapacityColumnBuilder.appendNull();
+ avgLoadColumnBuilder.appendNull();
+ } else {
+ loadCapacityColumnBuilder.writeDouble(k.loadCapacity);
+ avgLoadColumnBuilder.writeDouble(v.sum / v.count);
+ }
});
builder.declarePositions(size);
@@ -1389,9 +1398,9 @@ public class QueryDataSetUtils {
private final String model;
- private final double loadCapacity;
+ private final Double loadCapacity;
- public AvgLoadKey(String fleet, String model, double loadCapacity) {
+ public AvgLoadKey(String fleet, String model, Double loadCapacity) {
this.fleet = fleet;
this.model = model;
this.loadCapacity = loadCapacity;
@@ -1406,9 +1415,8 @@ public class QueryDataSetUtils {
return false;
}
AvgLoadKey that = (AvgLoadKey) o;
- return Double.compare(loadCapacity, that.loadCapacity) == 0
- && Objects.equals(fleet, that.fleet)
- && Objects.equals(model, that.model);
+ return Objects.equals(fleet, that.fleet) && Objects.equals(model,
that.model) &&
+ Objects.equals(loadCapacity, that.loadCapacity);
}
@Override