This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 594994f 1. Provide InsertRequest and UpdateRequest interface for
prepare persistence. (#3131)
594994f is described below
commit 594994ffaec99d3a18225426b932feefb256fd53
Author: 彭勇升 pengys <[email protected]>
AuthorDate: Sun Jul 21 13:56:12 2019 +0800
1. Provide InsertRequest and UpdateRequest interface for prepare
persistence. (#3131)
2. Implement the ids query for H2 metrics DAO.
---
.../analysis/worker/MetricsPersistentWorker.java | 2 +-
.../oap/server/core/storage/IMetricsDAO.java | 7 +++--
.../oap/server/core/storage/StorageDAO.java | 4 +--
.../client/elasticsearch/ElasticSearchClient.java | 8 +++---
.../elasticsearch/ElasticSearchInsertRequest.java} | 23 +++++++--------
.../elasticsearch/ElasticSearchUpdateRequest.java} | 22 +++++++--------
.../client/jdbc/hikaricp/JDBCHikariCPClient.java | 2 +-
.../library/client/request/InsertRequest.java} | 16 ++---------
.../library/client/request/PrepareRequest.java} | 16 ++---------
.../library/client/request/UpdateRequest.java} | 16 ++---------
.../plugin/elasticsearch/base/MetricsEsDAO.java | 10 +++----
.../plugin/elasticsearch/base/StorageEsDAO.java | 6 ++--
.../storage/plugin/jdbc/ArrayParamBuilder.java} | 25 ++++++++--------
.../server/storage/plugin/jdbc/SQLExecutor.java | 13 ++++-----
.../storage/plugin/jdbc/h2/dao/H2MetricsDAO.java | 19 ++++++++++---
.../storage/plugin/jdbc/h2/dao/H2SQLExecutor.java | 33 +++++++++++++++++-----
.../storage/plugin/jdbc/h2/dao/H2StorageDAO.java | 7 ++---
.../plugin/jdbc/ArrayParamBuilderTestCase.java} | 22 ++++++++-------
18 files changed, 121 insertions(+), 130 deletions(-)
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
index 066f70f..14135dc 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
@@ -40,7 +40,7 @@ public class MetricsPersistentWorker extends
PersistenceWorker<Metrics, MergeDat
private final Model model;
private final MergeDataCache<Metrics> mergeDataCache;
- private final IMetricsDAO<?, ?> metricsDAO;
+ private final IMetricsDAO metricsDAO;
private final AbstractWorker<Metrics> nextAlarmWorker;
private final AbstractWorker<ExportEvent> nextExportWorker;
private final DataCarrier<Metrics> dataCarrier;
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
index 5c2e246..e67dfa8 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
@@ -22,15 +22,16 @@ import java.io.IOException;
import java.util.Map;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.apache.skywalking.oap.server.library.client.request.*;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
+public interface IMetricsDAO extends DAO {
Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+ InsertRequest prepareBatchInsert(Model model, Metrics metrics) throws
IOException;
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+ UpdateRequest prepareBatchUpdate(Model model, Metrics metrics) throws
IOException;
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
index 35d178d..4d3f26d 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageDAO.java
@@ -26,9 +26,9 @@ import
org.apache.skywalking.oap.server.library.module.Service;
/**
* @author peng-yongsheng
*/
-public interface StorageDAO<INSERT, UPDATE> extends Service {
+public interface StorageDAO extends Service {
- IMetricsDAO<INSERT, UPDATE> newMetricsDao(StorageBuilder<Metrics>
storageBuilder);
+ IMetricsDAO newMetricsDao(StorageBuilder<Metrics> storageBuilder);
IRegisterDAO newRegisterDao(StorageBuilder<RegisterSource> storageBuilder);
diff --git
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
index cbee9e2..ef9f404 100644
---
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchClient.java
@@ -254,14 +254,14 @@ public class ElasticSearchClient implements Client {
client.update(request);
}
- public IndexRequest prepareInsert(String indexName, String id,
XContentBuilder source) {
+ public ElasticSearchInsertRequest prepareInsert(String indexName, String
id, XContentBuilder source) {
indexName = formatIndexName(indexName);
- return new IndexRequest(indexName, TYPE, id).source(source);
+ return new ElasticSearchInsertRequest(indexName, TYPE,
id).source(source);
}
- public UpdateRequest prepareUpdate(String indexName, String id,
XContentBuilder source) {
+ public ElasticSearchUpdateRequest prepareUpdate(String indexName, String
id, XContentBuilder source) {
indexName = formatIndexName(indexName);
- return new UpdateRequest(indexName, TYPE, id).doc(source);
+ return new ElasticSearchUpdateRequest(indexName, TYPE, id).doc(source);
}
public int delete(String indexName, String timeBucketColumnName, long
endTimeBucket) throws IOException {
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
similarity index 57%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
index 5c2e246..19e974c 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchInsertRequest.java
@@ -13,24 +13,25 @@
* 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.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.library.client.elasticsearch;
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.apache.skywalking.oap.server.library.client.request.InsertRequest;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.common.xcontent.XContentBuilder;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
+public class ElasticSearchInsertRequest extends IndexRequest implements
InsertRequest {
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+ public ElasticSearchInsertRequest(String index, String type, String id) {
+ super(index, type, id);
+ }
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+ @Override public ElasticSearchInsertRequest source(XContentBuilder
sourceBuilder) {
+ super.source(sourceBuilder);
+ return this;
+ }
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
similarity index 59%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
index 5c2e246..9429d93 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/elasticsearch/ElasticSearchUpdateRequest.java
@@ -13,24 +13,24 @@
* 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.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.library.client.elasticsearch;
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.common.xcontent.XContentBuilder;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
+public class ElasticSearchUpdateRequest extends UpdateRequest implements
org.apache.skywalking.oap.server.library.client.request.UpdateRequest {
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+ public ElasticSearchUpdateRequest(String index, String type, String id) {
+ super(index, type, id);
+ }
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+ @Override public ElasticSearchUpdateRequest doc(XContentBuilder source) {
+ super.doc(source);
+ return this;
+ }
}
diff --git
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
index fcdeb11..158e918 100644
---
a/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/jdbc/hikaricp/JDBCHikariCPClient.java
@@ -31,7 +31,7 @@ import org.slf4j.*;
* @author wusheng
*/
public class JDBCHikariCPClient implements Client {
- private final Logger logger =
LoggerFactory.getLogger(JDBCHikariCPClient.class);
+ private static final Logger logger =
LoggerFactory.getLogger(JDBCHikariCPClient.class);
private HikariDataSource dataSource;
private HikariConfig hikariConfig;
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
similarity index 60%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
index 5c2e246..c3308d3 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/InsertRequest.java
@@ -13,24 +13,12 @@
* 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.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
-
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface InsertRequest extends PrepareRequest {
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
similarity index 60%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
index 5c2e246..05fbd94 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/PrepareRequest.java
@@ -13,24 +13,12 @@
* 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.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
-
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface PrepareRequest {
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
similarity index 60%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
index 5c2e246..209cc43 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-library/library-client/src/main/java/org/apache/skywalking/oap/server/library/client/request/UpdateRequest.java
@@ -13,24 +13,12 @@
* 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.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.library.client.request;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
-
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
-
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+public interface UpdateRequest extends PrepareRequest {
}
diff --git
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
index a0c8212..e0403c7 100644
---
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
+++
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/MetricsEsDAO.java
@@ -23,16 +23,14 @@ import java.util.*;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
import org.apache.skywalking.oap.server.core.storage.*;
import org.apache.skywalking.oap.server.core.storage.model.Model;
-import
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
-import org.elasticsearch.action.index.IndexRequest;
+import org.apache.skywalking.oap.server.library.client.elasticsearch.*;
import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.common.xcontent.XContentBuilder;
/**
* @author peng-yongsheng
*/
-public class MetricsEsDAO extends EsDAO implements IMetricsDAO<IndexRequest,
UpdateRequest> {
+public class MetricsEsDAO extends EsDAO implements IMetricsDAO {
private final StorageBuilder<Metrics> storageBuilder;
@@ -57,13 +55,13 @@ public class MetricsEsDAO extends EsDAO implements
IMetricsDAO<IndexRequest, Upd
return result;
}
- @Override public IndexRequest prepareBatchInsert(Model model, Metrics
metrics) throws IOException {
+ @Override public ElasticSearchInsertRequest prepareBatchInsert(Model
model, Metrics metrics) throws IOException {
XContentBuilder builder =
map2builder(storageBuilder.data2Map(metrics));
String modelName = TimeSeriesUtils.timeSeries(model,
metrics.getTimeBucket());
return getClient().prepareInsert(modelName, metrics.id(), builder);
}
- @Override public UpdateRequest prepareBatchUpdate(Model model, Metrics
metrics) throws IOException {
+ @Override public ElasticSearchUpdateRequest prepareBatchUpdate(Model
model, Metrics metrics) throws IOException {
XContentBuilder builder =
map2builder(storageBuilder.data2Map(metrics));
String modelName = TimeSeriesUtils.timeSeries(model,
metrics.getTimeBucket());
return getClient().prepareUpdate(modelName, metrics.id(), builder);
diff --git
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
index 318b9a8..52fe3fb 100644
---
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
+++
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsDAO.java
@@ -23,19 +23,17 @@ import
org.apache.skywalking.oap.server.core.analysis.record.Record;
import org.apache.skywalking.oap.server.core.register.RegisterSource;
import org.apache.skywalking.oap.server.core.storage.*;
import
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.update.UpdateRequest;
/**
* @author peng-yongsheng
*/
-public class StorageEsDAO extends EsDAO implements StorageDAO<IndexRequest,
UpdateRequest> {
+public class StorageEsDAO extends EsDAO implements StorageDAO {
public StorageEsDAO(ElasticSearchClient client) {
super(client);
}
- @Override public IMetricsDAO<IndexRequest, UpdateRequest>
newMetricsDao(StorageBuilder<Metrics> storageBuilder) {
+ @Override public IMetricsDAO newMetricsDao(StorageBuilder<Metrics>
storageBuilder) {
return new MetricsEsDAO(getClient(), storageBuilder);
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
similarity index 60%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
index 5c2e246..78da5fc 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilder.java
@@ -13,24 +13,23 @@
* 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.skywalking.oap.server.core.storage;
-
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
-
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
-
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+public class ArrayParamBuilder {
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+ public static String build(String[] values) {
+ StringBuilder param = new StringBuilder();
+ for (int i = 0; i < values.length; i++) {
+ param.append("'").append(values[i]).append("'");
+ if (i < values.length - 1) {
+ param.append(",");
+ }
+ }
+ return param.toString();
+ }
}
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
index 54b1192..d2d7cc2 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/SQLExecutor.java
@@ -18,20 +18,19 @@
package org.apache.skywalking.oap.server.storage.plugin.jdbc;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
+import java.sql.*;
import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.skywalking.oap.server.library.client.request.*;
+import org.slf4j.*;
/**
* A SQL executor.
*
* @author wusheng
*/
-public class SQLExecutor {
- private final Logger logger = LoggerFactory.getLogger(SQLExecutor.class);
+public class SQLExecutor implements InsertRequest, UpdateRequest {
+
+ private static final Logger logger =
LoggerFactory.getLogger(SQLExecutor.class);
private String sql;
private List<Object> param;
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
index 1943c94..7f18b4c 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsDAO.java
@@ -19,7 +19,7 @@
package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
import java.io.IOException;
-import java.util.Map;
+import java.util.*;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
import org.apache.skywalking.oap.server.core.storage.*;
import org.apache.skywalking.oap.server.core.storage.model.Model;
@@ -29,7 +29,7 @@ import
org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
/**
* @author wusheng
*/
-public class H2MetricsDAO extends H2SQLExecutor implements
IMetricsDAO<SQLExecutor, SQLExecutor> {
+public class H2MetricsDAO extends H2SQLExecutor implements IMetricsDAO {
private JDBCHikariCPClient h2Client;
private StorageBuilder<Metrics> storageBuilder;
@@ -40,8 +40,19 @@ public class H2MetricsDAO extends H2SQLExecutor implements
IMetricsDAO<SQLExecut
}
@Override public Map<String, Metrics> get(Model model, Metrics[] metrics)
throws IOException {
- // return (Metrics)getByID(h2Client, model.getName(),
metrics.id(), storageBuilder);
- return null;
+ Map<String, Metrics> result = new HashMap<>();
+
+ String[] ids = new String[metrics.length];
+ for (int i = 0; i < metrics.length; i++) {
+ ids[i] = metrics[i].id();
+ }
+
+ List<StorageData> storageDataList = getByIDs(h2Client,
model.getName(), ids, storageBuilder);
+
+ for (StorageData storageData : storageDataList) {
+ result.put(storageData.id(), (Metrics)storageData);
+ }
+ return result;
}
@Override public SQLExecutor prepareBatchInsert(Model model, Metrics
metrics) throws IOException {
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
index 3ab7d29..049bee3 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2SQLExecutor.java
@@ -32,11 +32,33 @@ import
org.apache.skywalking.oap.server.storage.plugin.jdbc.*;
import org.slf4j.*;
/**
- * @author wusheng
+ * @author wusheng, peng-yongsheng
*/
public class H2SQLExecutor {
private static final Logger logger =
LoggerFactory.getLogger(H2SQLExecutor.class);
+ protected List<StorageData> getByIDs(JDBCHikariCPClient h2Client, String
modelName, String[] ids,
+ StorageBuilder storageBuilder) throws IOException {
+
+ try (Connection connection = h2Client.getConnection()) {
+ /*
+ * Although H2 database or other database support createArrayOf
and setArray operate.
+ * But Mysql 5.1.44 driver doesn't.
+ */
+ String param = ArrayParamBuilder.build(ids);
+
+ try (ResultSet rs = h2Client.executeQuery(connection, "SELECT *
FROM " + modelName + " WHERE id in (" + param + ")")) {
+ List<StorageData> storageDataList = new ArrayList<>();
+ while (rs.next()) {
+ storageDataList.add(toStorageData(rs, modelName,
storageBuilder));
+ }
+ return storageDataList;
+ }
+ } catch (SQLException | JDBCClientException e) {
+ throw new IOException(e.getMessage(), e);
+ }
+ }
+
protected StorageData getByID(JDBCHikariCPClient h2Client, String
modelName, String id,
StorageBuilder storageBuilder) throws IOException {
try (Connection connection = h2Client.getConnection()) {
@@ -59,8 +81,7 @@ public class H2SQLExecutor {
}
}
- protected StorageData toStorageData(ResultSet rs, String modelName,
- StorageBuilder storageBuilder) throws SQLException {
+ protected StorageData toStorageData(ResultSet rs, String modelName,
StorageBuilder storageBuilder) throws SQLException {
if (rs.next()) {
Map data = new HashMap();
List<ModelColumn> columns =
TableMetaInfo.get(modelName).getColumns();
@@ -85,8 +106,7 @@ public class H2SQLExecutor {
return Const.NONE;
}
- protected SQLExecutor getInsertExecutor(String modelName, StorageData
metrics,
- StorageBuilder storageBuilder) throws IOException {
+ protected SQLExecutor getInsertExecutor(String modelName, StorageData
metrics, StorageBuilder storageBuilder) throws IOException {
Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
SQLBuilder sqlBuilder = new SQLBuilder("INSERT INTO " + modelName + "
VALUES");
@@ -113,8 +133,7 @@ public class H2SQLExecutor {
return new SQLExecutor(sqlBuilder.toString(), param);
}
- protected SQLExecutor getUpdateExecutor(String modelName, StorageData
metrics,
- StorageBuilder storageBuilder) throws IOException {
+ protected SQLExecutor getUpdateExecutor(String modelName, StorageData
metrics, StorageBuilder storageBuilder) throws IOException {
Map<String, Object> objectMap = storageBuilder.data2Map(metrics);
SQLBuilder sqlBuilder = new SQLBuilder("UPDATE " + modelName + " SET
");
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
index d8ef839..1d95881 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2StorageDAO.java
@@ -23,12 +23,11 @@ import
org.apache.skywalking.oap.server.core.analysis.record.Record;
import org.apache.skywalking.oap.server.core.register.RegisterSource;
import org.apache.skywalking.oap.server.core.storage.*;
import
org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
-import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLExecutor;
/**
- * @author wusheng
+ * @author wusheng, peng-yongsheng
*/
-public class H2StorageDAO implements StorageDAO<SQLExecutor, SQLExecutor> {
+public class H2StorageDAO implements StorageDAO {
private JDBCHikariCPClient h2Client;
@@ -36,7 +35,7 @@ public class H2StorageDAO implements StorageDAO<SQLExecutor,
SQLExecutor> {
this.h2Client = h2Client;
}
- @Override public IMetricsDAO<SQLExecutor, SQLExecutor>
newMetricsDao(StorageBuilder<Metrics> storageBuilder) {
+ @Override public IMetricsDAO newMetricsDao(StorageBuilder<Metrics>
storageBuilder) {
return new H2MetricsDAO(h2Client, storageBuilder);
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
similarity index 60%
copy from
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
copy to
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
index 5c2e246..8d120a5 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IMetricsDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/ArrayParamBuilderTestCase.java
@@ -13,24 +13,26 @@
* 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.skywalking.oap.server.core.storage;
+package org.apache.skywalking.oap.server.storage.plugin.jdbc;
-import java.io.IOException;
-import java.util.Map;
-import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
-import org.apache.skywalking.oap.server.core.storage.model.Model;
+import org.junit.*;
/**
* @author peng-yongsheng
*/
-public interface IMetricsDAO<INSERT, UPDATE> extends DAO {
+public class ArrayParamBuilderTestCase {
- Map<String, Metrics> get(Model model, Metrics[] metrics) throws
IOException;
+ @Test
+ public void testBuild() {
+ String param = ArrayParamBuilder.build(new String[] {"1"});
+ Assert.assertEquals("'1'", param);
- INSERT prepareBatchInsert(Model model, Metrics metrics) throws IOException;
+ param = ArrayParamBuilder.build(new String[] {"1", "2"});
+ Assert.assertEquals("'1','2'", param);
- UPDATE prepareBatchUpdate(Model model, Metrics metrics) throws IOException;
+ param = ArrayParamBuilder.build(new String[] {"1", "2", "3"});
+ Assert.assertEquals("'1','2','3'", param);
+ }
}