Skip to content

Commit

Permalink
Merge pull request #22 from KB-iGOT/4.8.20-dev-v4
Browse files Browse the repository at this point in the history
4.8.20 dev v4
  • Loading branch information
karthik-tarento authored Jan 7, 2025
2 parents 0a9bc74 + 88e7e05 commit c523a8f
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.igot.cb.discussion.service.impl;

import com.igot.cb.discussion.entity.DiscussionEntity;
import com.igot.cb.pores.cache.CacheService;
import com.igot.cb.pores.elasticsearch.service.EsUtilService;
import com.igot.cb.pores.util.CbServerProperties;
import com.igot.cb.pores.util.Constants;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
@Slf4j
public class DiscussionAsyncProcess {
@Autowired
private CacheService cacheService;
@Autowired
private EsUtilService esUtilService;
@Autowired
private CbServerProperties cbServerProperties;

@Async
public void updateElasticsearchAndRedis(DiscussionEntity saveJsonEntity) {
try {
// Elasticsearch update
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode jsonNode = objectMapper.createObjectNode();
jsonNode.setAll((ObjectNode) saveJsonEntity.getData());
Map<String, Object> map = objectMapper.convertValue(jsonNode, Map.class);
esUtilService.addDocument(cbServerProperties.getDiscussionEntity(), Constants.INDEX_TYPE, saveJsonEntity.getDiscussionId(), map, cbServerProperties.getElasticDiscussionJsonPath());
log.info("Updated Elasticsearch for discussion ID: {}", saveJsonEntity.getDiscussionId());

// Redis update
cacheService.putCache("discussion_" + saveJsonEntity.getDiscussionId(), jsonNode);
log.info("Updated Redis cache for discussion ID: {}", saveJsonEntity.getDiscussionId());
} catch (Exception e) {
log.error("Failed to update Elasticsearch or Redis for discussion ID: {}", saveJsonEntity.getDiscussionId(), e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ public class DiscussionServiceImpl implements DiscussionService {
private AccessTokenValidator accessTokenValidator;
@Autowired
private RedisTemplate<String, Object> redisTemp;
@Autowired
private DiscussionAsyncProcess asyncService;

@PostConstruct
public void init() {
Expand Down Expand Up @@ -119,16 +121,12 @@ public ApiResponse createDiscussion(JsonNode discussionDetails, String token) {
ObjectNode jsonNode = objectMapper.createObjectNode();
jsonNode.setAll((ObjectNode) saveJsonEntity.getData());
Map<String, Object> map = objectMapper.convertValue(jsonNode, Map.class);
long esTime = System.currentTimeMillis();
esUtilService.addDocument(cbServerProperties.getDiscussionEntity(), Constants.INDEX_TYPE, String.valueOf(id), map, cbServerProperties.getElasticDiscussionJsonPath());
updateMetricsDbOperation(Constants.DISCUSSION_CREATE, Constants.ELASTICSEARCH, Constants.INSERT, esTime);
long redisTime = System.currentTimeMillis();
cacheService.putCache("discussion_" + String.valueOf(id), jsonNode);
updateMetricsDbOperation(Constants.DISCUSSION_CREATE, Constants.REDIS, Constants.INSERT, redisTime);

map.put(Constants.CREATED_ON, currentTime);
response.setResponseCode(HttpStatus.CREATED);
response.getParams().setStatus(Constants.SUCCESS);
response.setResult(map);
asyncService.updateElasticsearchAndRedis(saveJsonEntity);
} catch (Exception e) {
log.error("Failed to create discussion: {}", e.getMessage(), e);
createErrorResponse(response, Constants.FAILED_TO_CREATE_DISCUSSION, HttpStatus.INTERNAL_SERVER_ERROR, Constants.FAILED);
Expand Down Expand Up @@ -629,7 +627,7 @@ public ApiResponse createAnswerPost(JsonNode answerPostData, String token) {
updateMetricsApiCall(Constants.DISCUSSION_ANSWER_POST);
long redisTimer = System.currentTimeMillis();
DiscussionEntity discussionEntity = discussionRepository.findById(answerPostData.get(Constants.PARENT_DISCUSSION_ID).asText()).orElse(null);
updateMetricsDbOperation(Constants.DISCUSSION_ANSWER_POST, Constants.REDIS, Constants.READ, redisTimer);
updateMetricsDbOperation(Constants.DISCUSSION_ANSWER_POST, Constants.POSTGRES, Constants.READ, redisTimer);
if (discussionEntity == null || !discussionEntity.getIsActive()) {
returnErrorMsg(Constants.INVALID_PARENT_DISCUSSION_ID, HttpStatus.BAD_REQUEST, response, Constants.FAILED);
return response;
Expand Down Expand Up @@ -713,7 +711,7 @@ private void updateAnswerPostToDiscussion(DiscussionEntity discussionEntity, Str
Map<String, Object> map = objectMapper.convertValue(jsonNode, Map.class);
long esTime = System.currentTimeMillis();
esUtilService.addDocument(cbServerProperties.getDiscussionEntity(), Constants.INDEX_TYPE, discussionEntity.getDiscussionId(), map, cbServerProperties.getElasticDiscussionJsonPath());
updateMetricsDbOperation(Constants.DISCUSSION_ANSWER_POST, Constants.ELASTICSEARCH, Constants.INSERT, esTime);
updateMetricsDbOperation(Constants.DISCUSSION_ANSWER_POST, Constants.ELASTICSEARCH, Constants.UPDATE_KEY, esTime);
long redisTime = System.currentTimeMillis();
cacheService.putCache(Constants.DISCUSSION_CACHE_PREFIX + discussionEntity.getDiscussionId(), jsonNode);
updateMetricsDbOperation(Constants.DISCUSSION_ANSWER_POST, Constants.REDIS, Constants.INSERT, redisTime);
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/igot/cb/pores/config/AsyncConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.igot.cb.pores.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration
@EnableAsync
public class AsyncConfig {

@Bean

public ThreadPoolTaskExecutor taskExecutor() {

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("async-");
executor.initialize();
return executor;
}
}

0 comments on commit c523a8f

Please sign in to comment.