committed by
Andrew Shvayka
9 changed files with 219 additions and 87 deletions
@ -0,0 +1,95 @@ |
|||
/** |
|||
* Copyright © 2016-2021 The Thingsboard Authors |
|||
* |
|||
* Licensed 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 |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* 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.thingsboard.server.dao.nosql; |
|||
|
|||
import com.google.common.util.concurrent.ListenableFuture; |
|||
import com.google.common.util.concurrent.SettableFuture; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Component; |
|||
import org.thingsboard.server.common.stats.StatsFactory; |
|||
import org.thingsboard.server.dao.entity.EntityService; |
|||
import org.thingsboard.server.dao.util.AbstractBufferedRateExecutor; |
|||
import org.thingsboard.server.dao.util.AsyncTaskContext; |
|||
import org.thingsboard.server.dao.util.NoSqlAnyDao; |
|||
|
|||
import javax.annotation.PreDestroy; |
|||
|
|||
/** |
|||
* Created by ashvayka on 24.10.18. |
|||
*/ |
|||
@Component |
|||
@Slf4j |
|||
@NoSqlAnyDao |
|||
public class CassandraBufferedRateWriteExecutor extends AbstractBufferedRateExecutor<CassandraStatementTask, TbResultSetFuture, TbResultSet> { |
|||
|
|||
static final String BUFFER_NAME = "Write"; |
|||
|
|||
public CassandraBufferedRateWriteExecutor( |
|||
@Value("${cassandra.query.buffer_size}") int queueLimit, |
|||
@Value("${cassandra.query.concurrent_limit}") int concurrencyLimit, |
|||
@Value("${cassandra.query.permit_max_wait_time}") long maxWaitTime, |
|||
@Value("${cassandra.query.dispatcher_threads:2}") int dispatcherThreads, |
|||
@Value("${cassandra.query.callback_threads:4}") int callbackThreads, |
|||
@Value("${cassandra.query.poll_ms:50}") long pollMs, |
|||
@Value("${cassandra.query.tenant_rate_limits.enabled}") boolean tenantRateLimitsEnabled, |
|||
@Value("${cassandra.query.tenant_rate_limits.configuration}") String tenantRateLimitsConfiguration, |
|||
@Value("${cassandra.query.tenant_rate_limits.print_tenant_names}") boolean printTenantNames, |
|||
@Value("${cassandra.query.print_queries_freq:0}") int printQueriesFreq, |
|||
@Autowired StatsFactory statsFactory, |
|||
@Autowired EntityService entityService) { |
|||
super(queueLimit, concurrencyLimit, maxWaitTime, dispatcherThreads, callbackThreads, pollMs, tenantRateLimitsEnabled, tenantRateLimitsConfiguration, printQueriesFreq, statsFactory, |
|||
entityService, printTenantNames); |
|||
} |
|||
|
|||
@Scheduled(fixedDelayString = "${cassandra.query.rate_limit_print_interval_ms}") |
|||
@Override |
|||
public void printStats() { |
|||
super.printStats(); |
|||
} |
|||
|
|||
@PreDestroy |
|||
public void stop() { |
|||
super.stop(); |
|||
} |
|||
|
|||
@Override |
|||
public String getBufferName() { |
|||
return BUFFER_NAME; |
|||
} |
|||
|
|||
@Override |
|||
protected SettableFuture<TbResultSet> create() { |
|||
return SettableFuture.create(); |
|||
} |
|||
|
|||
@Override |
|||
protected TbResultSetFuture wrap(CassandraStatementTask task, SettableFuture<TbResultSet> future) { |
|||
return new TbResultSetFuture(future); |
|||
} |
|||
|
|||
@Override |
|||
protected ListenableFuture<TbResultSet> execute(AsyncTaskContext<CassandraStatementTask, TbResultSet> taskCtx) { |
|||
CassandraStatementTask task = taskCtx.getTask(); |
|||
return task.executeAsync( |
|||
statement -> |
|||
this.submit(new CassandraStatementTask(task.getTenantId(), task.getSession(), statement)) |
|||
); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue