Skip to content

Commit bdc627d

Browse files
committed
Merge branch 'hotfix-1.27.7'
2 parents 130f9bf + 1f211ca commit bdc627d

File tree

13 files changed

+89
-27
lines changed

13 files changed

+89
-27
lines changed

gemma-core/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<artifactId>gemma</artifactId>
55
<groupId>gemma</groupId>
6-
<version>1.27.6</version>
6+
<version>1.27.7</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99
<artifactId>gemma-core</artifactId>

gemma-core/src/main/java/ubic/gemma/core/apps/BatchEffectPopulationCli.java

-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ protected void doWork() throws Exception {
5555

5656
if ( !force && this.noNeedToRun( bas, BatchInformationFetchingEvent.class ) ) {
5757
AbstractCLI.log.info( "Can't or don't need to run " + bas );
58-
addErrorObject( bas, "Can't or don't need to run; use -force to override");
5958
continue;
6059
}
6160

gemma-core/src/main/java/ubic/gemma/core/genome/gene/service/GeneSetServiceImpl.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -552,11 +552,7 @@ public Taxon getTaxon( GeneSet geneSet ) {
552552
@Override
553553
@Transactional(readOnly = true)
554554
public Collection<DatabaseBackedGeneSetValueObject> getValueObjects( Collection<Long> ids ) {
555-
Collection<DatabaseBackedGeneSetValueObject> vos = new ArrayList<>();
556-
for ( Long id : ids ) {
557-
vos.add( this.getValueObject( id ) );
558-
}
559-
return vos;
555+
return geneSetValueObjectHelper.convertToValueObjects( this.load( ids ) );
560556
}
561557

562558
private void checkGeneList( GeneSet gset, Collection<GeneSetMember> updatedGenelist, Collection<Gene> genes ) {

gemma-core/src/main/java/ubic/gemma/core/job/executor/common/ProgressUpdateAppender.java

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class ProgressUpdateAppender extends AppenderSkeleton {
3838

3939
@Override
4040
protected void append( LoggingEvent event ) {
41+
if ( !isAsSevereAsThreshold( event.getLevel() ) ) {
42+
return;
43+
}
4144
ProgressUpdateContext progressUpdateContext = ( ProgressUpdateContext ) MDC.get( MDC_CURRENT_PROGRESS_UPDATE_CONTEXT_KEY );
4245
if ( progressUpdateContext == null )
4346
return;

gemma-core/src/main/java/ubic/gemma/persistence/service/AbstractDao.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ public abstract class AbstractDao<T extends Identifiable> extends HibernateDaoSu
4343

4444
protected static final Log log = LogFactory.getLog( TaxonServiceImpl.class );
4545

46+
/**
47+
* Batch size to reach before flushing the Hibernate session.
48+
*
49+
* See https://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/batch.html for more details.
50+
*/
51+
private static final int BATCH_SIZE = 100;
52+
4653
protected final Class<T> elementClass;
4754

4855
protected AbstractDao( Class<T> elementClass, SessionFactory sessionFactory ) {
@@ -55,8 +62,10 @@ public Collection<T> create( Collection<T> entities ) {
5562
int i = 0;
5663
for ( T t : entities ) {
5764
this.create( t );
58-
if ( ++i % 100 == 0 )
65+
if ( ++i % BATCH_SIZE == 0 ) {
5966
this.getSessionFactory().getCurrentSession().flush();
67+
this.getSessionFactory().getCurrentSession().clear();
68+
}
6069
}
6170
return entities;
6271
}
@@ -125,8 +134,13 @@ public void remove( T entity ) {
125134
@Override
126135
@Transactional
127136
public void update( Collection<T> entities ) {
137+
int i = 0;
128138
for ( T entity : entities ) {
129139
this.update( entity );
140+
if ( ++i % BATCH_SIZE == 0 ) {
141+
this.getSessionFactory().getCurrentSession().flush();
142+
this.getSessionFactory().getCurrentSession().clear();
143+
}
130144
}
131145
}
132146

gemma-core/src/main/resources/ehcache.nocluster.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
timeToLiveSeconds="1200" overflowToDisk="false"/>
4646
<cache name="gemma.gsec.acl.domain.AclObjectIdentity" maxElementsInMemory="10000" timeToIdleSeconds="1200"
4747
timeToLiveSeconds="1200" overflowToDisk="false"/>
48-
<cache name="gemma.gsec.acl.domain.AclObjectIdentity.entries" maxElementsInMemory="10" timeToIdleSeconds="1200"
48+
<cache name="gemma.gsec.acl.domain.AclObjectIdentity.entries" maxElementsInMemory="100" timeToIdleSeconds="1200"
4949
timeToLiveSeconds="1200" overflowToDisk="false"/>
5050

5151
<!-- Gemma -->

gemma-core/src/test/java/ubic/gemma/core/util/progress/ProgressAppenderTest.java

-4
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,6 @@ public class ProgressAppenderTest {
4646

4747
private final Deque<String> updates = new LinkedBlockingDeque<>();
4848

49-
/* fixtures */
50-
private final String taskId = "randomtaskidF";
51-
5249
@Before
5350
public void setUp() {
5451
Assume.assumeTrue( "This test must be run with -Dlog4j1.compatibility=true",
@@ -93,5 +90,4 @@ public void testLoggingInProgressUpdateCallbackDoesNotResultInLoggingRecursion()
9390
assertTrue( reached.get() );
9491
assertNull( ProgressUpdateAppender.ProgressUpdateContext.currentContext() );
9592
}
96-
9793
}

gemma-web/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<artifactId>gemma</artifactId>
55
<groupId>gemma</groupId>
6-
<version>1.27.6</version>
6+
<version>1.27.7</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99
<artifactId>gemma-web</artifactId>

gemma-web/src/main/config/log4j-dev.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ log4j.logger.ubic.basecode.ontology.model.PropertyFactory=ERROR
2828
log4j.logger.ubic.basecode.ontology.providers=WARN
2929

3030
# Gemma
31-
log4j.logger.ubic.gemma=INFO,progressAppender
31+
log4j.logger.ubic.gemma=INFO,progressUpdate
3232
log4j.logger.ubic.gemma.core.ontology.providers=WARN
3333

3434
############# THIRD PARTY CLASSES #####################

gemma-web/src/main/config/log4j.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ log4j.appender.phenocartaFile.layout.ConversionPattern=[PhenoCarta - %d] %m%n
8383
log4j.appender.jsFile=org.apache.log4j.RollingFileAppender
8484
log4j.appender.jsFile.File=${gemma.log.dir}/gemma-javascript.log
8585
log4j.appender.jsFile.MaxFileSize=10000KB
86-
log4j.appender.jsFile.MaxBackupIndex=100
86+
log4j.appender.jsFile.MaxBackupIndex=100
8787
log4j.appender.jsFile.layout=org.apache.log4j.PatternLayout
8888
log4j.appender.jsFile.layout.ConversionPattern=%d %5p [Gemma - %t] %m%n
8989

@@ -103,7 +103,7 @@ log4j.logger.ubic.basecode.ontology.model.PropertyFactory=ERROR
103103
log4j.logger.ubic.basecode.ontology.providers=WARN
104104

105105
# Gemma
106-
log4j.logger.ubic.gemma=INFO,progressAppender
106+
log4j.logger.ubic.gemma=INFO,progressUpdate
107107
log4j.logger.ubic.gemma.core.association.phenotype=INFO,phenocartaFile
108108
log4j.logger.ubic.gemma.core.ontology.OntologyService=INFO,annotationsFile
109109
log4j.logger.ubic.gemma.core.ontology.providers=WARN

gemma-web/src/main/java/ubic/gemma/web/logging/SlackAppender.java

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public SlackAppender() {
2222

2323
@Override
2424
protected void append( LoggingEvent loggingEvent ) {
25+
if ( !isAsSevereAsThreshold( loggingEvent.getLevel() ) ) {
26+
return;
27+
}
2528
try {
2629
ChatPostMessageRequest.ChatPostMessageRequestBuilder request = ChatPostMessageRequest.builder()
2730
.channel( channel )

gemma-web/src/test/java/ubic/gemma/web/logging/SlackAppenderTest.java

+54-9
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,73 @@
11
package ubic.gemma.web.logging;
22

3+
import com.slack.api.Slack;
4+
import com.slack.api.methods.MethodsClient;
5+
import com.slack.api.methods.SlackApiException;
6+
import com.slack.api.methods.request.chat.ChatPostMessageRequest;
37
import org.apache.commons.logging.Log;
48
import org.apache.commons.logging.LogFactory;
9+
import org.junit.After;
10+
import org.junit.Before;
511
import org.junit.Test;
12+
import org.mockito.MockedStatic;
13+
import org.mockito.Mockito;
14+
15+
import java.io.IOException;
16+
import java.util.Objects;
617

718
import static org.junit.Assert.*;
819
import static org.junit.Assume.assumeNotNull;
920
import static org.junit.Assume.assumeTrue;
21+
import static org.mockito.Mockito.*;
1022

1123
public class SlackAppenderTest {
1224

1325
private static Log log = LogFactory.getLog( SlackAppenderTest.class );
1426

15-
@Test
16-
public void test() {
17-
String slackToken = System.getProperty( "gemma.slack.token" );
18-
String slackChannel = System.getProperty( "gemma.slack.channel" );
27+
private Slack mockedSlack;
28+
29+
private String slackToken;
30+
private String slackChannel;
31+
32+
@Before
33+
public void setUp() {
34+
slackToken = System.getProperty( "gemma.slack.token" );
35+
slackChannel = System.getProperty( "gemma.slack.channel" );
36+
mockedSlack = mock( Slack.class );
37+
MethodsClient mockedMethodClient = mock( MethodsClient.class );
38+
when( mockedSlack.methods( any( String.class ) ) ).thenReturn( mockedMethodClient );
39+
assumeTrue( "This test must be run with -Dlog4j1.compatibility=true.",
40+
Objects.equals( System.getProperty( "log4j1.compatibility" ), "true" ) );
1941
assumeTrue( "Both -Dgemma.slack.token and -Dgemma.slack.channel must be set for this test.",
2042
slackToken != null && slackChannel != null );
21-
try {
22-
raiseStackTrace();
23-
fail( "This should not be reached." );
24-
} catch ( IllegalArgumentException e ) {
25-
log.error( "This is just a test for the Log4j Slack appender.", e );
43+
}
44+
45+
@After
46+
public void tearDown() {
47+
reset( mockedSlack );
48+
}
49+
50+
@Test
51+
public void test() throws SlackApiException, IOException {
52+
try ( MockedStatic<Slack> slack = Mockito.mockStatic( Slack.class ) ) {
53+
slack.when( Slack::getInstance ).thenReturn( mockedSlack );
54+
try {
55+
raiseStackTrace();
56+
fail( "This should not be reached." );
57+
} catch ( IllegalArgumentException e ) {
58+
log.error( "This is just a test for the Log4j Slack appender.", e );
59+
}
60+
verify( mockedSlack ).methods( slackToken );
61+
verify( mockedSlack.methods( slackToken ) ).chatPostMessage( any( ChatPostMessageRequest.class ) );
62+
}
63+
}
64+
65+
@Test
66+
public void testWarnLogsShouldNotBeAppended() {
67+
try ( MockedStatic<Slack> slack = Mockito.mockStatic( Slack.class ) ) {
68+
slack.when( Slack::getInstance ).thenReturn( mockedSlack );
69+
log.warn( "This should not be captured by the Slack appender." );
70+
verifyNoInteractions( mockedSlack );
2671
}
2772
}
2873

pom.xml

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<name>Gemma</name>
66
<groupId>gemma</groupId>
77
<artifactId>gemma</artifactId>
8-
<version>1.27.6</version>
8+
<version>1.27.7</version>
99
<inceptionYear>2005</inceptionYear>
1010
<description>The Gemma Project for meta-analysis of genomics data</description>
1111
<url>https://gemma.msl.ubc.ca</url>
@@ -447,6 +447,12 @@
447447
<version>4.0.0</version>
448448
<scope>test</scope>
449449
</dependency>
450+
<dependency>
451+
<groupId>org.mockito</groupId>
452+
<artifactId>mockito-inline</artifactId>
453+
<version>4.0.0</version>
454+
<scope>test</scope>
455+
</dependency>
450456
<dependency>
451457
<groupId>org.assertj</groupId>
452458
<artifactId>assertj-core</artifactId>

0 commit comments

Comments
 (0)