[JBoss JIRA] (ISPN-10309) Convert Remaining Parts to Non Blocking & Reduce Thread Pools
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/ISPN-10309?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated ISPN-10309:
------------------------------------------
Sprint: DataGrid Sprint #29, DataGrid Sprint #30, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #29, DataGrid Sprint #30, DataGrid Sprint #33)
> Convert Remaining Parts to Non Blocking & Reduce Thread Pools
> -------------------------------------------------------------
>
> Key: ISPN-10309
> URL: https://issues.jboss.org/browse/ISPN-10309
> Project: Infinispan
> Issue Type: Enhancement
> Components: Core
> Reporter: Will Burns
> Assignee: Will Burns
> Priority: Major
> Fix For: 10.0.0.Final
>
>
> We would love to get our thread pools down to a single CPU thread pool (size = numCores) and a blocking thread pool (arbitrarily large). We may also require a scheduler pool for various options as well (limited size 1-2?).
> To do this we need to remove remnants of our blocking code as possible. Possible issues for blocking are mostly around locks and io operations.
> The persistence layer was completed with ISPN-9722 so that is not an issue.
> The requirement around locking can be relaxed if the locks are guaranteed to be small in scope and do not wrap other blocking operations. An example would be a lock such as ones in CHM as long as we don't have large blocks for functional argument types.
> If code cannot be made non blocking we must offload the operation to the blocking thread pool. Care must be taken to ensure that once the blocking portion of code is completed that we switch back the to CPU thread pool as soon as possible. The listener API for example is violating this and will run code in Infinispan from any thread that completes the listener that could be done from a user.
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (ISPN-10362) Unify remove command initialization and invocation
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/ISPN-10362?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated ISPN-10362:
------------------------------------------
Sprint: DataGrid Sprint #30, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #30, DataGrid Sprint #33)
> Unify remove command initialization and invocation
> --------------------------------------------------
>
> Key: ISPN-10362
> URL: https://issues.jboss.org/browse/ISPN-10362
> Project: Infinispan
> Issue Type: Enhancement
> Components: Core
> Affects Versions: 10.0.0.Beta3
> Reporter: Dan Berindei
> Assignee: Dan Berindei
> Priority: Major
> Fix For: 10.0.0.CR3, 10.0.0.Final
>
>
> ISPN-10322 unified command initialization with {{InitializableCommand}}, but we should go further and unify initialization with invocation.
> We can replace the current {{ReplicableCommand.invokeAsync}} and {{InitializableCommand.init(ComponentRegistry()}} methods with a method {{CacheRpcCommand.invokeAsync(ComponentRegistry)}} (or maybe {{execute}}?).
> For global commands we can create a {{GlobalRpcCommand}} interface with a method {{invokeAsync(GlobalComponentRegistry)}}.
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (ISPN-10385) Console Server Ng
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/ISPN-10385?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated ISPN-10385:
------------------------------------------
Sprint: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33)
> Console Server Ng
> -----------------
>
> Key: ISPN-10385
> URL: https://issues.jboss.org/browse/ISPN-10385
> Project: Infinispan
> Issue Type: Feature Request
> Components: Console
> Reporter: Katia Aresti
> Assignee: Katia Aresti
> Priority: Major
> Labels: console-ng
>
> Create a new console using React and Patternfly 4
> - Create react app skeleton
> - Login / splash page
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (ISPN-10404) XStream 1.4.11.1
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/ISPN-10404?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated ISPN-10404:
------------------------------------------
Sprint: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33)
> XStream 1.4.11.1
> ----------------
>
> Key: ISPN-10404
> URL: https://issues.jboss.org/browse/ISPN-10404
> Project: Infinispan
> Issue Type: Component Upgrade
> Components: Build
> Affects Versions: 10.0.0.Beta4, 9.4.15.Final
> Reporter: Tristan Tarrant
> Assignee: Tristan Tarrant
> Priority: Major
> Fix For: 10.0.0.Beta5, 9.4.16.Final
>
>
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (IPROTO-108) AutoProtoSchemaBuilder processor throws exceptions releated to primitive types not being found
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/IPROTO-108?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated IPROTO-108:
------------------------------------------
Sprint: DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #32, DataGrid Sprint #33)
> AutoProtoSchemaBuilder processor throws exceptions releated to primitive types not being found
> ----------------------------------------------------------------------------------------------
>
> Key: IPROTO-108
> URL: https://issues.jboss.org/browse/IPROTO-108
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Affects Versions: 4.3.0.Alpha9
> Reporter: Nistor Adrian
> Assignee: Nistor Adrian
> Priority: Major
> Fix For: 4.3.0.Alpha10
>
>
> This seems to be caused by some oddity in javax.lang.model's Elements.getTypeElement not being able to find primitve types (by design). It looks like primitives should to be looked up via Types.getPrimitiveType.
> {code}
> Error:java: @AutoProtoSchemaBuilder processor threw a fatal exception: java.lang.RuntimeException: Type not found : long
> at org.infinispan.protostream.annotations.impl.processor.types.MirrorClassFactory$MirrorClass.isAssignableTo(MirrorClassFactory.java:541)
> at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.scanMemberAnnotations(ProtoMessageTypeMetadata.java:212)
> at org.infinispan.protostream.annotations.impl.BaseProtoSchemaGenerator.generateAndRegister(BaseProtoSchemaGenerator.java:116)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processClass(AutoProtoSchemaBuilderAnnotationProcessor.java:287)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processElement(AutoProtoSchemaBuilderAnnotationProcessor.java:218)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processDependencies(AutoProtoSchemaBuilderAnnotationProcessor.java:344)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processClass(AutoProtoSchemaBuilderAnnotationProcessor.java:279)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processElement(AutoProtoSchemaBuilderAnnotationProcessor.java:218)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.process(AutoProtoSchemaBuilderAnnotationProcessor.java:171)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
> at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
> at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
> at com.sun.tools.javac.main.Main.compile(Main.java:523)
> at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
> at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
> at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:195)
> at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:460)
> at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:330)
> at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:255)
> at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:213)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1324)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1004)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
> at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
> at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139)
> at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288)
> at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121)
> at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> {code}
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (IPROTO-109) AutoProtoSchemaBuilder fails due to mismatched @ProtoFactory signature during incremental compilation
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/IPROTO-109?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated IPROTO-109:
------------------------------------------
Sprint: DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #32, DataGrid Sprint #33)
> AutoProtoSchemaBuilder fails due to mismatched @ProtoFactory signature during incremental compilation
> -----------------------------------------------------------------------------------------------------
>
> Key: IPROTO-109
> URL: https://issues.jboss.org/browse/IPROTO-109
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Affects Versions: 4.3.0.Alpha10
> Reporter: Nistor Adrian
> Assignee: Nistor Adrian
> Priority: Major
> Fix For: 4.3.0.Alpha11
>
>
> {noformat}
> Error:(29, 1) java: org.infinispan.protostream.annotations.ProtoSchemaBuilderException: @ProtoFactory annotated static method or constructor signature mismatch. The parameter 'numericVersion' does not match the field definition: EmbeddedExpirableMetadata(long,long,org.infinispan.container.versioning.NumericVersion,org.infinispan.container.versioning.SimpleClusteredVersion)
> at org.infinispan.protostream.annotations.impl.ProtoMessageTypeMetadata.scanMemberAnnotations(ProtoMessageTypeMetadata.java:213)
> at org.infinispan.protostream.annotations.impl.BaseProtoSchemaGenerator.generateAndRegister(BaseProtoSchemaGenerator.java:116)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processClass(AutoProtoSchemaBuilderAnnotationProcessor.java:287)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processElement(AutoProtoSchemaBuilderAnnotationProcessor.java:218)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processDependencies(AutoProtoSchemaBuilderAnnotationProcessor.java:344)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processClass(AutoProtoSchemaBuilderAnnotationProcessor.java:279)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.processElement(AutoProtoSchemaBuilderAnnotationProcessor.java:218)
> at org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor.process(AutoProtoSchemaBuilderAnnotationProcessor.java:171)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
> at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
> at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
> at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
> at com.sun.tools.javac.main.Main.compile(Main.java:523)
> at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
> at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
> at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:195)
> at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:460)
> at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:330)
> at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:255)
> at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:213)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1324)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1004)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965)
> at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794)
> at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
> at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
> at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139)
> at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288)
> at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121)
> at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (IPROTO-100) Annotated Collection Class Method cannot be converted to Collection
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/IPROTO-100?page=com.atlassian.jira.plugin... ]
Pedro Zapata Fernandez updated IPROTO-100:
------------------------------------------
Sprint: DataGrid Sprint #30, DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #30, DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33)
> Annotated Collection Class Method cannot be converted to Collection
> -------------------------------------------------------------------
>
> Key: IPROTO-100
> URL: https://issues.jboss.org/browse/IPROTO-100
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Reporter: Ryan Emerson
> Assignee: Nistor Adrian
> Priority: Major
> Fix For: 4.3.0.Alpha9, 4.3.0.Final
>
>
> Reproducing code
> {code:java}
> public class MagicKeyStringFilter implements KeyValueFilter<MagicKey, String> {
> Map<MagicKey, String> allowedEntries;
> MagicKeyStringFilter() {}
> MagicKeyStringFilter(Map<MagicKey, String> allowedEntries) {
> this.allowedEntries = allowedEntries;
> }
> @ProtoField(number = 1, collectionImplementation = ArrayList.class)
> public List<MapPair> getMapEntries() {
> return new ArrayList<>();
> }
> public void setMapEntries(List<MapPair> entries) {
> // No-op but has influence on error
> }
> }
> public class MapPair {
> @ProtoField(number = 1)
> MagicKey key;
> @ProtoField(number = 2)
> String value;
> MapPair() {}
> MapPair(Map.Entry<MagicKey, String> entry) {
> this.key = entry.getKey();
> this.value = entry.getValue();
> }
> }
> {code}
> {code:java}
> core/target/generated-test-sources/test-annotations/org/infinispan/stream/MagicKeyStringFilter$___Marshaller89f891e2edf7d63eb676a6effb5379a47edc312b.java:[56,41] incompatible types: org.infinispan.stream.MapPair cannot be converted to java.util.Collection
> {code}
> Generated marshaller code:
> {code:java}
> /**
> * WARNING: Generated code!
> */
> @javax.annotation.Generated(value = "org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor",
> comments = "Please do not edit this file!")
> @SuppressWarnings("unchecked")
> public final class MagicKeyStringFilter$___Marshaller89f891e2edf7d63eb676a6effb5379a47edc312b extends org.infinispan.protostream.annotations.impl.GeneratedMarshallerBase implements org.infinispan.protostream.RawProtobufMarshaller<org.infinispan.stream.MagicKeyStringFilter> {
> private org.infinispan.protostream.impl.BaseMarshallerDelegate __md$org$infinispan$stream$MapPair;
>
> @Override
> public Class<org.infinispan.stream.MagicKeyStringFilter> getJavaClass() { return org.infinispan.stream.MagicKeyStringFilter.class; }
>
> @Override
> public String getTypeName() { return "org.infinispan.test.MagicKeyStringFilter"; }
>
> @Override
> public org.infinispan.stream.MagicKeyStringFilter readFrom(org.infinispan.protostream.ImmutableSerializationContext $1, org.infinispan.protostream.RawProtoStreamReader $2) throws java.io.IOException {
> final org.infinispan.stream.MagicKeyStringFilter o = new org.infinispan.stream.MagicKeyStringFilter();
> java.util.ArrayList __c$mapEntries = new java.util.ArrayList();
> boolean done = false;
> while (!done) {
> final int tag = $2.readTag();
> switch (tag) {
> case 0:
> done = true;
> break;
> case 10:
> {
> if (__md$org$infinispan$stream$MapPair == null) __md$org$infinispan$stream$MapPair = ((org.infinispan.protostream.impl.SerializationContextImpl) $1).getMarshallerDelegate(org.infinispan.stream.MapPair.class);
> int length = $2.readRawVarint32();
> int oldLimit = $2.pushLimit(length);
> org.infinispan.stream.MapPair v = (org.infinispan.stream.MapPair) readMessage(__md$org$infinispan$stream$MapPair, $2);
> $2.checkLastTagWas(0);
> $2.popLimit(oldLimit);
> if (__c$mapEntries == null) __c$mapEntries = new java.util.ArrayList();
> __c$mapEntries.add(v);
> }
> break;
> default:
> {
> if (!$2.skipField(tag)) done = true;
> }
> }
> }
> o.setMapEntries(__c$mapEntries);
> return o;
> }
>
> @Override
> public void writeTo(org.infinispan.protostream.ImmutableSerializationContext $1, org.infinispan.protostream.RawProtoStreamWriter $2, org.infinispan.stream.MagicKeyStringFilter $3) throws java.io.IOException {
> final org.infinispan.stream.MagicKeyStringFilter o = (org.infinispan.stream.MagicKeyStringFilter) $3;
> {
> final java.util.Collection c = (org.infinispan.stream.MapPair) o.getMapEntries();
> if (c != null)
> for (java.util.Iterator it = c.iterator(); it.hasNext(); ) {
> final org.infinispan.stream.MapPair v = (org.infinispan.stream.MapPair) it.next();
> {
> if (__md$org$infinispan$stream$MapPair == null) __md$org$infinispan$stream$MapPair = ((org.infinispan.protostream.impl.SerializationContextImpl) $1).getMarshallerDelegate(org.infinispan.stream.MapPair.class);
> writeNestedMessage(__md$org$infinispan$stream$MapPair, $2, 1, v);
> }
> }
> }
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months
[JBoss JIRA] (IPROTO-94) Marshalling of immutable objects
by Pedro Zapata Fernandez (Jira)
[ https://issues.jboss.org/browse/IPROTO-94?page=com.atlassian.jira.plugin.... ]
Pedro Zapata Fernandez updated IPROTO-94:
-----------------------------------------
Sprint: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33, DataGrid Sprint #34 (was: DataGrid Sprint #31, DataGrid Sprint #32, DataGrid Sprint #33)
> Marshalling of immutable objects
> --------------------------------
>
> Key: IPROTO-94
> URL: https://issues.jboss.org/browse/IPROTO-94
> Project: Infinispan ProtoStream
> Issue Type: Enhancement
> Reporter: Nistor Adrian
> Assignee: Nistor Adrian
> Priority: Major
> Fix For: 4.3.0.Alpha8, 4.3.0.Final
>
>
> These typically have final fields, may have getters for them but do not have setters. All fields should be read in advance and passed all at once to a constructor.
--
This message was sent by Atlassian Jira
(v7.13.5#713005)
5 years, 4 months