mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
create transaction only when needed
This commit is contained in:
@@ -14,17 +14,20 @@ import javax.inject.Singleton;
|
|||||||
|
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.apache.commons.lang3.time.DateUtils;
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
import com.codahale.metrics.Gauge;
|
import com.codahale.metrics.Gauge;
|
||||||
import com.codahale.metrics.Meter;
|
import com.codahale.metrics.Meter;
|
||||||
import com.codahale.metrics.MetricRegistry;
|
import com.codahale.metrics.MetricRegistry;
|
||||||
import com.commafeed.CommaFeedConfiguration;
|
import com.commafeed.CommaFeedConfiguration;
|
||||||
import com.commafeed.backend.dao.FeedDAO;
|
import com.commafeed.backend.dao.FeedDAO;
|
||||||
|
import com.commafeed.backend.dao.UnitOfWork;
|
||||||
import com.commafeed.backend.model.Feed;
|
import com.commafeed.backend.model.Feed;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class FeedQueues {
|
public class FeedQueues {
|
||||||
|
|
||||||
|
private SessionFactory sessionFactory;
|
||||||
private final FeedDAO feedDAO;
|
private final FeedDAO feedDAO;
|
||||||
private final CommaFeedConfiguration config;
|
private final CommaFeedConfiguration config;
|
||||||
|
|
||||||
@@ -35,7 +38,8 @@ public class FeedQueues {
|
|||||||
private Meter refill;
|
private Meter refill;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FeedQueues(FeedDAO feedDAO, CommaFeedConfiguration config, MetricRegistry metrics) {
|
public FeedQueues(SessionFactory sessionFactory, FeedDAO feedDAO, CommaFeedConfiguration config, MetricRegistry metrics) {
|
||||||
|
this.sessionFactory = sessionFactory;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.feedDAO = feedDAO;
|
this.feedDAO = feedDAO;
|
||||||
|
|
||||||
@@ -67,7 +71,7 @@ public class FeedQueues {
|
|||||||
FeedRefreshContext context = takeQueue.poll();
|
FeedRefreshContext context = takeQueue.poll();
|
||||||
|
|
||||||
if (context == null) {
|
if (context == null) {
|
||||||
refill();
|
UnitOfWork.run(sessionFactory, () -> refill());
|
||||||
context = takeQueue.poll();
|
context = takeQueue.poll();
|
||||||
}
|
}
|
||||||
return context;
|
return context;
|
||||||
|
|||||||
@@ -10,13 +10,10 @@ import javax.inject.Singleton;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
|
|
||||||
import com.codahale.metrics.Meter;
|
import com.codahale.metrics.Meter;
|
||||||
import com.codahale.metrics.MetricRegistry;
|
import com.codahale.metrics.MetricRegistry;
|
||||||
import com.commafeed.CommaFeedConfiguration;
|
import com.commafeed.CommaFeedConfiguration;
|
||||||
import com.commafeed.backend.dao.FeedDAO;
|
import com.commafeed.backend.dao.FeedDAO;
|
||||||
import com.commafeed.backend.dao.UnitOfWork;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Infinite loop fetching feeds from @FeedQueues and queuing them to the {@link FeedRefreshWorker} pool.
|
* Infinite loop fetching feeds from @FeedQueues and queuing them to the {@link FeedRefreshWorker} pool.
|
||||||
@@ -26,7 +23,6 @@ import com.commafeed.backend.dao.UnitOfWork;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class FeedRefreshTaskGiver implements Managed {
|
public class FeedRefreshTaskGiver implements Managed {
|
||||||
|
|
||||||
private final SessionFactory sessionFactory;
|
|
||||||
private final FeedQueues queues;
|
private final FeedQueues queues;
|
||||||
private final FeedRefreshWorker worker;
|
private final FeedRefreshWorker worker;
|
||||||
|
|
||||||
@@ -36,9 +32,8 @@ public class FeedRefreshTaskGiver implements Managed {
|
|||||||
private Meter threadWaited;
|
private Meter threadWaited;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FeedRefreshTaskGiver(SessionFactory sessionFactory, FeedQueues queues, FeedDAO feedDAO, FeedRefreshWorker worker,
|
public FeedRefreshTaskGiver(FeedQueues queues, FeedDAO feedDAO, FeedRefreshWorker worker, CommaFeedConfiguration config,
|
||||||
CommaFeedConfiguration config, MetricRegistry metrics) {
|
MetricRegistry metrics) {
|
||||||
this.sessionFactory = sessionFactory;
|
|
||||||
this.queues = queues;
|
this.queues = queues;
|
||||||
this.worker = worker;
|
this.worker = worker;
|
||||||
|
|
||||||
@@ -68,7 +63,7 @@ public class FeedRefreshTaskGiver implements Managed {
|
|||||||
public void run() {
|
public void run() {
|
||||||
while (!executor.isShutdown()) {
|
while (!executor.isShutdown()) {
|
||||||
try {
|
try {
|
||||||
FeedRefreshContext context = UnitOfWork.run(sessionFactory, () -> queues.take());
|
FeedRefreshContext context = queues.take();
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
feedRefreshed.mark();
|
feedRefreshed.mark();
|
||||||
worker.updateFeed(context);
|
worker.updateFeed(context);
|
||||||
|
|||||||
Reference in New Issue
Block a user